-
Постов
27 -
Зарегистрирован
-
Посещение
Весь контент sargon
-
Ах да CannotClose не нужен здесь, это костыль исходя из логики работы приложения, приложение не должно закрываться во время работы, на скорую руку делал, можно и красивее сделать было конечно
-
Да, все верно, там были ошибки, наверное уже не актуально, но выложу. Тот код у меня вырос до такого вот WM_SYSCOMMAND: begin case wParam of SC_MINIMIZE:begin PlatformWin.MinimizeApp; Result:=DefWindowProc(HWND, uMsg, wParam, LPARAM); FinalActionsOfPopups; end; SC_RESTORE:begin PlatformWin.RestoreApp; if Application.MainForm <> nil then if OldWindowState = TWindowState.wsMaximized then Application.MainForm.WindowState := TWindowState.wsMaximized ; DefWindowProc(HWND, uMsg, wParam, LPARAM); Winapi.Windows.SetActiveWindow(FormToHwnd(LForm){WinAPI.Windows.FindWindow('TForm1','Form1')}); end; SC_CLOSE:begin if CannotClose = True then exit else if Application.MainForm <> nil then begin for I := 0 to Screen.FormCount - 1 do // if FormToHWND(Screen.Forms[I]) = hwnd then // begin Screen.Forms[I].Close; // Exit; // end; Application.MainForm.BorderStyle:=TFmxFormBorderStyle.None; Application.MainForm.Height:=0; Application.MainForm.Width:=0; PlatformWin.RestoreApp; // Application.MainForm.Activate; end; Result := DefWindowProc(hwnd, uMsg, wParam, lParam); end; SC_MAXIMIZE:begin Winapi.Windows.ShowWindow(FormToHwnd(LForm), SW_MAXIMIZE); DefWindowProc(HWND, uMsg, wParam, LPARAM); end; end; end; С такими изменениями вроде все работает корректно, еще раз просмотрел сейчас тот проект, вроде бы все адекватно отрабатывает, как и в VCL.
-
Благодарю, но не помогло, попробовал, оказалось, что в первую очередь срабатывает нажатие для контролов, а потом уже для формы, ну такое у меня впечатление сложилось... но даже если прописать обработчик контролу, он тоже срабатывает после Ctrl+Tab
-
Добрый день, у меня есть один вопрос, делаю приложение в виде программы-мастера на FMX, в качестве страничек мастера использую TTabControl, случайно обнаружил, что при нажатии Tab+Ctrl вкладки переключаются, вроде так и должно быть, но мне вот такое поведение не подходит. Можно ли как-то отключить\заблокировать переключение вкладок по нажатию клавиш. Пробовал обрабатывать события KeyUp и KeyDown для TTabItem, но переключение вкладки происходит раньше, чем происходит вызов обработчика. Оно не критично конечно, но может быть кто-то сталкивался (если коротко, хочу переключать вкладки только по нажатию кнопок в программе)? Спасибо.
-
Старая тема, но столкнулся с такой же проблемой, также добавил WM_SYSCOMMAND, точно также после разворота не активировалось окно, пофиксил это дело, выложу тут, может кому пригодится. Такая же проблема ив Tokyo 10.2.2 - хотелось бы, чтобы такой глюк был пофиксен из коробки, хотя бы в следующей версии WM_SYSCOMMAND: begin if wParam = SC_MINIMIZE then PlatformWin.MinimizeApp else if wParam = SC_RESTORE then PlatformWin.RestoreApp; DefWindowProc(HWND, uMsg, wParam, LPARAM); sleep(50); // у FMX какая-то беда с потоками, иногда при нажатии по иконуе приложения в TaskBar окно не сворачивается а снова активируется, sleep уменьшает количество таких глюков Winapi.Windows.SetActiveWindow(FormToHwnd(LForm)); // после разворота активирует окно - проверил в Berlin и Tokyo 10.2.2 end; Нужно добавить код в FMX.Platform.Win в функцию function WndProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
-
Большое спасибо за помощь, премного благодарен!
-
Ой да, виноват, прошу прощения, не указал. Да Android, Delphi Berlin.
-
Добрый день уважаемое сообщество. Возможно ли, и если возможно, то как, сделать что-то наподобие этого http://developer.alexanderklimov.ru/android/animation/overridependingtransition.php. В Android есть стандартная анимация при переходе между окнами в приложениях, мне было бы достаточно и такой, не знаю только как ее прикрутить, в какую сторону рыть - ничего не нагуглил, знаю про TFloatAnimation но может быть есть какой-нибудь нативный способ для этого в FMX. Заранее благодарю за помощь.
-
Отличная идея, Ярослав, благодарю, буду пробовать. В принципе Rusland тоже интересное решение предлагает.
-
Добрый день! Нигде не нашел, как сделать в FMX что-то наподобие этого? Идея такая, выбирать из ListBox параметры, а после выбора хотелось бы чтобы они отображались в каком-нибудь контролле (наиболее для этого подходящем) подобным образом как на рисунке. Направьте хотя бы в какую сторону копать. Заранее благодарю!
-
Заранее прошу простить если не в ту ветку, не знаю в какую лучше написать - больше вроде к жестам относится, Есть боковое меню на Android которое прекрасно выезжает и заезжает по жестам влево-вправо, может быть кто-то уже сталкивался, как сделать чтобы панель как бы "прилипла" к пальцу и следовала за ним, т.е. пока палец без отрыва от тачскрина двигается вправо - панель следует за ним вправо, если палец пошел влево она следует влево и закрывается. В общем так как сделано в большинстве приложений на Java - Facebook, VK и других. И вообще возможно ли это сделать на Delphi. (у меня Delphi Berlin android 4.2)
- 1 ответ
-
- тачскрин
- жесты влево вправо
-
(и ещё 1 )
C тегом:
-
Уважаемый ZuBy, большое спасибо!!! Видел ваш компонент, но не додумался заглянуть внутрь! То что нужно! Вопрос решен
- 3 ответа
-
- TmapView
- Google Distance
-
(и ещё 1 )
C тегом:
-
Добрый день, уважаемое сообщество! Может быть кто-то подобное делал - хочу отрисовать маршрут между двумя точками, нужна помощь кодом. Что-то не могу ничего нагуглить похожего, интересует именно реализация (надеюсь гугл не забанил). Прошу помощи или совета. (Во время поисков понял, что нужно делать через GoogleDistance, но не могу понять с какой стороны подступиться)
- 3 ответа
-
- TmapView
- Google Distance
-
(и ещё 1 )
C тегом:
-
Доброго дня, спасибо за скрины - вроде все как нужно по ним 80% вероятности, что вы не сгенерили ключ для своей IDE (debug.keystore как оказалось разный на разных компах даже если одну и ту же инсталляшку используешь) и не прописали его в Google.console для Google Maps сервиса. Если сгенерили - то переименуйте проект - потому что в моей консоли проект с таким именем уже существует - там у гугла какой-то дивный глюк с именами проектов, даже под разными пользователями. Работает ли у вас апк собранная у меня? Это нужно в дебаге посмотреть, что за ошибка вываливается, идей никаких нет, тут что угодно может быть - какие версии андройдов на устройствах? Возможные причины: не обновлены гугл-сервисы, версия Андройда (я собирал тестовую АПК под 6-ку), интелловский проц - при эмуляции ARM кода MapView не работает, да и много чего еще может быть. Нашел устройство на котором навигационная панель "рисованная" - проверил - да, проблема воспроизводится. Как оказалось, причина в косяках при реализации джавовского NativeLayout - на котором размещается MapView. На нем размещается оно везде, что в FireMonkey, что в Java. На java такая же проблема с картой... но получилось устранить так getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); Это на Java (код скрывает панель) - работает, но карту надо перерисовать invalidate сделать, иначе панелька "как бы" и не убирается - т.е. она отображается на карте как рисунок - в java так решена проблема с размещением чего-то поверх карты я так понимаю. Интерпретация Java на Delphi type TRunner = class(TJavaLocal, JRunnable) private FRunMethod: TThreadProcedure; public constructor Create(RunMethod: TThreadProcedure); overload; procedure run; cdecl; end; var Runner:TRunner; procedure TForm1.Button2Click(Sender: TObject); begin Runner := TRunner.Create( procedure begin TAndroidHelper.Activity.getWindow.getDecorView().setSystemUiVisibility (TJView.JavaClass.SYSTEM_UI_FLAG_HIDE_NAVIGATION); end); TAndroidHelper.Activity.runOnUiThread(Runner); Sleep(400); Form1.Recreate; Map.Repaint; // Вот тут нужно что-то додумать end; { TRunner } constructor TRunner.Create(RunMethod: TThreadProcedure); begin FRunMethod := RunMethod; Create; end; procedure TRunner.run; begin FRunMethod; end; У меня срабатывает, но панелька не исчезает, потому что она рисуется системой на карте как картинка (как и в случае с Java), и пропадает только после касания области панельки на карте, когда она перерисуется (если вы коснетесь панельки она съедет вниз, но Map.repaint нужно закомментить, иначе оно так и висит, repaint немного не так как ожидается работает), точнее не она NativeLayout. map.repaint не срабатывает - как сделать на delphi пока не придумал. Сейчас к сожалению нету времени покапаться и решить вопрос.
-
А можете скинуть данные утилиты SysCheck по этим планшетам? А вы компилировали сами или ставили apk который идет в архиве?
-
Конечно, прикладываю. Сразу скажу писал для себя и на скорую руку поэтому комментов нет практически, и где-то используются не особо красивые решения, есть также явные косяки в реализации, но их не устранял так как под себя делал, и знаю как обойти их - например jmapview не корректно размещается в tabcontrol (не корректно прорисовывается), но у меня задачи с размещением контрола сугубо на форме, поэтому до исправления руки не дошли - но можете дописать это под себя, если сие пофиксите и скините мне - буду очень благодарен. Модуль называется Android.Native.JMapView - он дает возможность работы с JMapView. TMapView тоже естественно основан на JmapView но там гораздо больше функционала, на мой взгляд лишнего, а того что надо нету. Здесь сделано по-проще по аналогии с Java. Мне этого модуля хватает во всяком случае. За основу взят DPF.JmapView Романа Янковского большое спасибо ему за это. Android.BaseControl - этот файл содержит класс от которого унаследован мой класс карты в модуле Android.Native.JMapView. TAndroidNativeMapView умеет все самое необходимое для карты (ну по моим меркам естественно) вот список возможностей procedure AddMarker - добавляет маркер на карту procedure AddPolyline - добавляет полилинию procedure RemoveMarker - удаляет маркер procedure SetCameraPosition(Lat, Lng: Double; Zoom: Single) - устанавливает камеру по координатам с зумом procedure Clear; - очищает карту от всего procedure Loaded; override; - загрузить карту procedure MapShow; - показать карту (без миганий удалось сделать) procedure MapHide; скрыть карту без миганий procedure Resume; возобновить прорисовку карты procedure Suspend; приостановить прорисовку карты function Snapshot(Recipient: TMapScreenshotRecipient): Boolean; - сделать скрин карты function SelectMarker(MarkerIndex:integer):Boolean; выделить маркер заданным цветом function SelectReset:Boolean; сбросить выделенный маркер к цвету который у него был или битмапу property MyLocationEnabled - мое местоположение включение\выключение property ZoomControlEnabled - включение\выключение зумма property OnMarkerClick - обработка события клика по маркеру property OnMapLoaded - обработка события загрузки карты property OnMapClick - обработка события клика по карте property OnInfoWindowClick - обработка события клика по информационному окну property Color - задать цвет информационного окна property CustomWindowAdapter - использовать ли кастомное информационное окно (true\false) любой другой функционал который есть или нету в стандартном MapView в рамках JGoogleMap можно легко добавить если он вам понадобится Ну и если будут вопросы задавайте - постараюсь оперативно отвечать Прикрепляю также apk -шку на всякий - там по нажатию кнопки тест выполняется ваш код Form1.FullScreen:=not Form1.FullScreen; У меня нормально работает ничего не появляется никаких панелей - пробуйте у себя. IDE Delphi Berlin - проверял на Android 4.1 и 5.0 TEST.rar
-
Вот и у меня была похожая проблема, вернее одна из множества проблем с отображением при использовании TMapView. Найти решение в рамках TMapView за разумное время так и не получилось к сожалению. Именно поэтому сделал свой контрол для отображения карты. Все проблемы исчезли - практически все, те, что остались, получилось обойти при построении UI с учетом этих "особенностей", но мне под мои нужды хватает за глаза своего контролла. TMapView имхо сыроват пока,можно посмотреть на WebGMaps от TMS или TECN для сравнения - но все платное. Справедливости ради хочу сказать, что и андройд сам по себе не без греха, так что дело может быть совсем и не в TMapView. Пишу также на Java, так там проблем с JmapView еще больше. Если кто-то опишет как решить проблемы перерисовки (мигания, артефакты при открытии и проч) средствами TMapView - это будет супер. Ну или ждем новой версии от разрабов. А вам уважаемый Rusland могу посоветовать, если есть возможность, отказаться от использования TMapView, и сделать контрол на базе Jmapview - и все проблемы такого рода отпадут, должны отпасть. А если вы все-таки найдете решение с использованием стандартного MapView, то прошу поделиться.
-
Да, я знаю про этот компонент. К сожалению мне пришлось от него отказаться, он почему-то как-то странно мигает при переключении с вкладки на вкладку (TTabControl), не знаю только у меня ли это, может быть что-то делаю не правильно. (мигания эти не устраивают заказчика). Может быть вы подскажите, есть ли у вас промигивания, когда компонент лежит на одной из вкладок TabControl и вы между вкладками переключаетесь??? (заметил что такое поведение чаще на разных Huawei и TCL и проч. на исконно брендовых аппаратах работает нормально). Свой вопрос частично решил - строю свой popup в getInfoWindow, getInfoContent почему-то не срабатывает. В документации говориться, что должен срабатывать сначала getInfoWindow, а потом getInfoContent если getInfoWindow возвращает Null. Вот пишу Resuly:=nil и вылетает ошибка а до getInfoContent не доходит. В принципе нормально работает и текст свой можно писать и цвет задавать и шрифт, все можно, кроме картинки и без описания layout в xml. Единственно, что не устраивает, окно без язычка к маркеру получилось, а хочется с язычком (corner), попробую описать Layout и подключить. В любом случае, очень благодарен вам за ответ!
-
Добрый день, уважаемое сообщество. Возник такой вопрос, по нажатию на маркер на карте нужно показывать свой InfoWindow. как тут. Может быть кто-то такое уже делал, прошу помочь кодом. Попытался сделать как здесь. Там на Java, но я переписал на Delphi. Компилится, но в рантайме выдает Segmentation class (11), AV и проч. может кто-нибудь может подсказать в чем проблема. Делаю так ... TMyAndroidInfoWindowAdapter = class (TJavaLocal, JGoogleMap_InfoWindowAdapter) private FMapControl: TAlexAndroidMapView; public function getInfoContents(P1: JMarker): JView; cdecl; function getInfoWindow(P1: JMarker): JView; cdecl; end; ... function TMyAndroidInfoWindowAdapter.getInfoContents(P1: JMarker):JView; var LinearLayout:JLinearLayout; snippet, title:JTextView; begin LinearLayout:=TJLinearLayout.JavaClass.init(TAndroidHelper.Activity); title:=TJTextView.JavaClass.init(TAndroidHelper.Activity); title.setTextColor(TAlphaColorRec.Brown); title.setText(JCharSequence(P1.getTitle)); snippet:=TJTextView.JavaClass.init(TAndroidHelper.Activity); snippet.setTextColor(TAlphaColorRec.Coral); snippet.setText(JCharSequence(P1.getSnippet)); LinearLayout.addView(title); LinearLayout.addView(snippet); result:=LinearLayout; end; function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView; begin Result:=nil; end; При создании экземпляра JMapView делаю так ... if not Assigned(FWindowsAdapter) then FWindowsAdapter:=TAlexAndroidInfoWindowAdapter.Create; FJMapView.getMap.setInfoWindowAdapter(FWindowsAdapter); ... FWindowsAdapter это поле в моем классе TMyAndroidMapView = class(TDPFANDBaseControl) protected ... FWindowsAdapter:TAlexAndroidInfoWindowAdapter; MapView не использую реализовал свой контрол на базе dpf android native components Романа Янковского. Ошибки валятся после выполнения этого метода function TMyAndroidInfoWindowAdapter.getInfoWindow(P1: JMarker):JView; begin Result:=nil; <------ выполнился и сразу Class Segmentation Fault (11) end; Опишу зачем вообще я это делаю. Мне в InfoWindow по клику на маркер на карте нужно всего навсего отобразить текст в несколько строк (свойство маркера Snippet), но так как перенос строк почему-то не работает взялся за реализацию WindowInfoAdapter. Может быть все это проще можно сделать. Заранее благодарю за помощь.
-
Может быть кто-нибудь такое делал. Подскажите пожалуйста, мне нужно отображать/скрывать маркеры на карте в зависимости от заданного радиуса от местоположения, например радиусы 2,4 и 6 км - если выбираем радиус например 4 км, определяется местоположение (это знаю как сделать) и отображаем все маркеры на карте в радиусе до 4 км, а те что превышают 4 км скрываем. Подтолкните в какую сторону рыть, как это может быть реализовано при помощи TMapView??? Заранее весьма благодарю!