Перейти к содержанию
Fire Monkey от А до Я

sargon

Пользователи
  • Постов

    27
  • Зарегистрирован

  • Посещение

Весь контент sargon

  1. Ах да CannotClose не нужен здесь, это костыль исходя из логики работы приложения, приложение не должно закрываться во время работы, на скорую руку делал, можно и красивее сделать было конечно
  2. Да, все верно, там были ошибки, наверное уже не актуально, но выложу. Тот код у меня вырос до такого вот 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.
  3. Ярослав, а что стало с проектом, вы не знаете случайно? Сайт их не доступен. Как раз пару недель назад вспомнил про этот проект, стало интересно как он развивается, а сайта уже и нет...
  4. Благодарю, но не помогло, попробовал, оказалось, что в первую очередь срабатывает нажатие для контролов, а потом уже для формы, ну такое у меня впечатление сложилось... но даже если прописать обработчик контролу, он тоже срабатывает после Ctrl+Tab
  5. Добрый день, у меня есть один вопрос, делаю приложение в виде программы-мастера на FMX, в качестве страничек мастера использую TTabControl, случайно обнаружил, что при нажатии Tab+Ctrl вкладки переключаются, вроде так и должно быть, но мне вот такое поведение не подходит. Можно ли как-то отключить\заблокировать переключение вкладок по нажатию клавиш. Пробовал обрабатывать события KeyUp и KeyDown для TTabItem, но переключение вкладки происходит раньше, чем происходит вызов обработчика. Оно не критично конечно, но может быть кто-то сталкивался (если коротко, хочу переключать вкладки только по нажатию кнопок в программе)? Спасибо.
  6. Старая тема, но столкнулся с такой же проблемой, также добавил 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;
  7. Ой да, виноват, прошу прощения, не указал. Да Android, Delphi Berlin.
  8. Добрый день уважаемое сообщество. Возможно ли, и если возможно, то как, сделать что-то наподобие этого http://developer.alexanderklimov.ru/android/animation/overridependingtransition.php. В Android есть стандартная анимация при переходе между окнами в приложениях, мне было бы достаточно и такой, не знаю только как ее прикрутить, в какую сторону рыть - ничего не нагуглил, знаю про TFloatAnimation но может быть есть какой-нибудь нативный способ для этого в FMX. Заранее благодарю за помощь.
  9. Отличная идея, Ярослав, благодарю, буду пробовать. В принципе Rusland тоже интересное решение предлагает.
  10. Добрый день! Нигде не нашел, как сделать в FMX что-то наподобие этого? Идея такая, выбирать из ListBox параметры, а после выбора хотелось бы чтобы они отображались в каком-нибудь контролле (наиболее для этого подходящем) подобным образом как на рисунке. Направьте хотя бы в какую сторону копать. Заранее благодарю!
  11. Заранее прошу простить если не в ту ветку, не знаю в какую лучше написать - больше вроде к жестам относится, Есть боковое меню на Android которое прекрасно выезжает и заезжает по жестам влево-вправо, может быть кто-то уже сталкивался, как сделать чтобы панель как бы "прилипла" к пальцу и следовала за ним, т.е. пока палец без отрыва от тачскрина двигается вправо - панель следует за ним вправо, если палец пошел влево она следует влево и закрывается. В общем так как сделано в большинстве приложений на Java - Facebook, VK и других. И вообще возможно ли это сделать на Delphi. (у меня Delphi Berlin android 4.2)
  12. Уважаемый ZuBy, большое спасибо!!! Видел ваш компонент, но не додумался заглянуть внутрь! То что нужно! Вопрос решен
  13. Добрый день, уважаемое сообщество! Может быть кто-то подобное делал - хочу отрисовать маршрут между двумя точками, нужна помощь кодом. Что-то не могу ничего нагуглить похожего, интересует именно реализация (надеюсь гугл не забанил). Прошу помощи или совета. (Во время поисков понял, что нужно делать через GoogleDistance, но не могу понять с какой стороны подступиться)
  14. sargon

    MapView и Form.FullScreen

    Доброго дня, спасибо за скрины - вроде все как нужно по ним 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 пока не придумал. Сейчас к сожалению нету времени покапаться и решить вопрос.
  15. sargon

    MapView и Form.FullScreen

    А можете скинуть данные утилиты SysCheck по этим планшетам? А вы компилировали сами или ставили apk который идет в архиве?
  16. sargon

    MapView и Form.FullScreen

    Конечно, прикладываю. Сразу скажу писал для себя и на скорую руку поэтому комментов нет практически, и где-то используются не особо красивые решения, есть также явные косяки в реализации, но их не устранял так как под себя делал, и знаю как обойти их - например 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
  17. sargon

    MapView и Form.FullScreen

    Вот и у меня была похожая проблема, вернее одна из множества проблем с отображением при использовании TMapView. Найти решение в рамках TMapView за разумное время так и не получилось к сожалению. Именно поэтому сделал свой контрол для отображения карты. Все проблемы исчезли - практически все, те, что остались, получилось обойти при построении UI с учетом этих "особенностей", но мне под мои нужды хватает за глаза своего контролла. TMapView имхо сыроват пока,можно посмотреть на WebGMaps от TMS или TECN для сравнения - но все платное. Справедливости ради хочу сказать, что и андройд сам по себе не без греха, так что дело может быть совсем и не в TMapView. Пишу также на Java, так там проблем с JmapView еще больше. Если кто-то опишет как решить проблемы перерисовки (мигания, артефакты при открытии и проч) средствами TMapView - это будет супер. Ну или ждем новой версии от разрабов. А вам уважаемый Rusland могу посоветовать, если есть возможность, отказаться от использования TMapView, и сделать контрол на базе Jmapview - и все проблемы такого рода отпадут, должны отпасть. А если вы все-таки найдете решение с использованием стандартного MapView, то прошу поделиться.
  18. Ребята, а есть ли в FireMonkey что-то подобное https://developer.android.com/guide/topics/resources/accessing-resources.html?hl=ru - можно ли получить как-то доступ к ресурсам по-типу слоя R в Java? Мне нужно свой layout загрузить?
  19. Да, я знаю про этот компонент. К сожалению мне пришлось от него отказаться, он почему-то как-то странно мигает при переключении с вкладки на вкладку (TTabControl), не знаю только у меня ли это, может быть что-то делаю не правильно. (мигания эти не устраивают заказчика). Может быть вы подскажите, есть ли у вас промигивания, когда компонент лежит на одной из вкладок TabControl и вы между вкладками переключаетесь??? (заметил что такое поведение чаще на разных Huawei и TCL и проч. на исконно брендовых аппаратах работает нормально). Свой вопрос частично решил - строю свой popup в getInfoWindow, getInfoContent почему-то не срабатывает. В документации говориться, что должен срабатывать сначала getInfoWindow, а потом getInfoContent если getInfoWindow возвращает Null. Вот пишу Resuly:=nil и вылетает ошибка а до getInfoContent не доходит. В принципе нормально работает и текст свой можно писать и цвет задавать и шрифт, все можно, кроме картинки и без описания layout в xml. Единственно, что не устраивает, окно без язычка к маркеру получилось, а хочется с язычком (corner), попробую описать Layout и подключить. В любом случае, очень благодарен вам за ответ!
  20. Добрый день, уважаемое сообщество. Возник такой вопрос, по нажатию на маркер на карте нужно показывать свой 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. Может быть все это проще можно сделать. Заранее благодарю за помощь.
  21. Может быть кто-нибудь такое делал. Подскажите пожалуйста, мне нужно отображать/скрывать маркеры на карте в зависимости от заданного радиуса от местоположения, например радиусы 2,4 и 6 км - если выбираем радиус например 4 км, определяется местоположение (это знаю как сделать) и отображаем все маркеры на карте в радиусе до 4 км, а те что превышают 4 км скрываем. Подтолкните в какую сторону рыть, как это может быть реализовано при помощи TMapView??? Заранее весьма благодарю!
×
×
  • Создать...