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

Andrew

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

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

  • Победитель дней

    3

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

  1. Очень просто: ====================== program Project1; uses System.StartUpCopy, FMX.Forms, Androidapi.Helpers, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin TAndroidHelper.Activity.setRequestedOrientation(TJActivityInfo.JavaClass.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. ====================== Если укажите SCREEN_ORIENTATION_SENSOR_PORTRAIT, то будет только портретная ориентация, но картинка переворачивается на InvertedPortrait только на планшетах.
  2. Пока в Delphi нет такой нужной компоненты как ViewPager: http://developer.android.com/training/animation/screen-slide.html
  3. У TImage есть свойство DisableInterpolation ===================================== Image1.DisableInterpolation:= False;
  4. Lenovo TAB S8-50LC на базе процессора Intel Atom Z3745 - http://fire-monkey.ru/topic/1416-tform-на-планшетах-android/
  5. При работе с Listbox мне приходится использовать RecalcSize. Вообще, для лучшего понимания проблемы вы лучше нарисуйте что хотели бы видеть и что реально получаете.
  6. var ScreenService: IFMXScreenService; begin ScreenService:= TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService; ScreenService.SetScreenOrientation([TScreenOrientation.Landscape]); end;
  7. Я получил Seattle по подписке. Информации действительно мало, приходилось точно так возмущаться и вытягивать ответы от Embarcadero по телефону. В общем, пока действует подписка, можете скачивать обновления и новые версии. Поэтому подписка меня полностью удовлетворяет.
  8. Обратитесь к тем, у кого приобретали Delphi. Летом на Allsoft я оформил "Update Subscription" поскольку посчитал, что проще платить раз в год и получать обновления и новые версии, чем платить за отдельные версии без обновлений, от которых все равно проку мало. Учитывая, что развитие мобильных платформ и, следовательно, Delphi идет очень быстрыми темпами, это лучший вариант. Помнится, во времена Windows не было большой необходимости часто обновлять Delphi (до сих пор еще разрабатываю на D7).
  9. Может вам это поможет: http://www.jvesoft.com/wp/custom-ios-device-rotation. По аналогии попробуйте сделать и для Android.
  10. Type THackListBox = type TListBox; Procedure TMainForm.Scroll_ListBox_to_Top; begin THackListBox(MyListBox).VScrollBar.Value:= 0; // Прокрутка к первому Item end; На основе этого можно прокручивать к произвольному Item, исходя из суммы высот предыдущих. Впрочем для вашего случая достаточно и ScrollViewPos, но нужно после создания Item добавлять RecalcSize.
  11. Нашел и устранил последнюю проблему планшета Lenovo TAB S8-50LC (CPU Intel Atom). Не исключаю, что подобная проблема возникает и на других устройствах. При изменении ориентации устройства картинка поворачивается моментально. Возможно поэтому в 9 случаях из 10 программа не успевала на это правильно реагировать и форма в портретной ориентации отображалась как альбомная и наоборот. В общем, это выглядело крайне неприятно: Нужно в процедуре "TPlatformAndroid.HandleAndroidCmd(ACmd: Int32);" найти строки: =============== APP_CMD_CONFIG_CHANGED: begin FContentRectMightHaveChanged := ContentRectChangeRefreshCount; // <<---- !!!! FOrientationMightHaveChanged := True; Include(FAppCmdStates, TAndroidAppCmdState.ConfigChanged); end; =============== и в отмеченной строке умножить ContentRectChangeRefreshCount на 3 или 4: FContentRectMightHaveChanged := ContentRectChangeRefreshCount * 4; После этой поправки и исправлений от "Magnum Labs" (см. выше) форма отображается правильно, сколько планшет не крути. На скорость работы приложения это никак не отразилось. Проверялось также на нескольких аппаратах Samsung. Если будет интересно, в следующий раз расскажу как устранить проблему ненужного появления NavigationBar если кликнуть по TMediaPlayerControl или TWebBrowser, а также странной анимации появления/скрытия указанных компонент при изменении их свойства Visible. Проблема с NavigationBar касается устройств, у которых имеется SoftKey.
  12. В Magnum Labs опубликовали решение проблемы с отображением верхней части формы для Android-устройств с процессором Intel x86. Раньше она уезжала под статус бар. Как и предполагалось, требуется внести поправки в FMX.Platform.Android. Для устранения проблемы необходимо: ================================== 1) скопировать файл FMX.Platform.Android.pas в папку с проектом; 2) внести заменить "родную" функцию function TWindowManager.RetrieveContentRect: TRect; на приведенную ниже и перекомпилировать проект: function TWindowManager.RetrieveContentRect: TRect; var Activity: JActivity; NativeWin: JWindow; DecorView: JView; ContentRectVisible, ContentRect: JRect; begin Activity := SharedActivity; if Activity <> nil then begin NativeWin := Activity.getWindow; if NativeWin <> nil then begin FStatusBarHeight := FNewContentRect.Top; ContentRect := TJRect.Create; DecorView := NativeWin.getDecorView; DecorView.getDrawingRect(ContentRect); // Fix by Flying Wang & CallInUIThread( procedure begin if (not PlatformAndroid.GetFullScreen(nil)) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN <> TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN) then begin // http://www.2cto.com/kf/201307/227536.html ContentRectVisible := TJRect.Create; DecorView.getWindowVisibleDisplayFrame(ContentRectVisible); if (ContentRect.Top < 1) or (ContentRectVisible.Top < FStatusBarHeight) then begin ContentRect.Top := ContentRectVisible.Top; FNewContentRect.Top := ContentRectVisible.Top; FStatusBarHeight := FNewContentRect.Top; end; end; end); Result := TRect.Create(Round(FNewContentRect.Left / FScale), Round(FNewContentRect.Top / FScale), Round(ContentRect.Right / FScale), Round(ContentRect.Bottom / FScale)); end; end; end; Ссылка на источник: https://magnumlabs.wordpress.com/2015/10/10/delphiandroid-misalignment-status-bar-on-intel-based-devices/
  13. Да, TViewPager очень не хватает - http://fire-monkey.ru/topic/1392-tviewpager/
  14. Для Android вычисляйте диагональ сами: =================================== Diagonal_in_Inch:= Sqrt(Sqr(DeviceMetricsService.GetDisplayMetrics.PhysicalScreenSize.Width) + Sqr(DeviceMetricsService.GetDisplayMetrics.PhysicalScreenSize.Height)) / DeviceMetricsService.GetDisplayMetrics.PixelsPerInch;
  15. Для iOS плотность так просто не получите. В файле FMX.Platform.iOS.pas зачем-то тупо умножается ScreenScale на базовую плотность 163 PPI и в итоге получите полную чепуху. См. там функцию function TPlatformCocoaTouch.GetDisplayMetrics: TDeviceDisplayMetrics. Поэтому выходом может служить получение кода модели устройства с помощью SysCtlByName. Например, для iPhone 6+ получите код "iPhone7,2", а для iPad Air2 - "iPad5,3". Затем составьте список PPI для каждого устройства с помощью таблицы https://en.wikipedia.org/wiki/List_of_iOS_devices. См. там данные в строках "Hardware strings" и "Display". Конечно, придется следить за появлением новых устройств.
  16. Использовал пример пользователя enatechno: http://fire-monkey.ru/topic/1456-tlistbox-kak-otobrazit-itemy-v-vide-panelei/#entry7419 В моих примерах тоже самое. Если в ListBoxItem имеется, например, TRectangle с включеным свойством HitTest=True, прокрутка не будет работать в полноэкранном режиме iOS. Проверялось на iOS 6, 7 и 8. Стоит вернуть для BorderStyle = Sizeable - прокрутка снова работает. Поэтому для полноэкранного приложения пришлось отказаться от OnClick/OnTap и использовать OnChange.
  17. Интересно, что стилизованный ListBox не скролится под iOS в полноэкранном режиме. Можно проверить на примере http://fire-monkey.ru/topic/1456-tlistbox-kak-otobrazit-itemy-v-vide-panelei/#entry7419 Пробовал BorderStyle с None, так и FullScreen:=True как в данном примере http://cc.embarcadero.com/item/30023. На Android проблем с прокруткой нет.
  18. Поговорив с сотрудником Embarcadero, приобрел Update Subscription. Теперь все в порядке. Просто им нужно научиться доносить информацию до своих клиентов и поставлять Allsoft.ru полный прайс-лист.
  19. Вот расценки за Update Subscription. На Allsoft такой информации я не нашел. Непонятно зачем платить за исправления ошибок Embarcadero, тем более каждые полгода выходят новые Delphi с новыми ошибками. Раньше такой дурости не было.
  20. Ничего не понимаю что придумали в Embarcadero. Видимо хотят окончательно от себя отпугнуть даже самый ярых поклонников Delphi. После обновления Delphi XE8, который только приобрел, выскочило такое замечательное окно. Как я понял предлагают обновления только за деньги. Как платить и сколько - непонятно. Если это так, значит надо перестать лениться и уходить на Android Studio. Посмотрел у немцев - годовая подписка за Delphi 372 евро и Mobile Pack 186 евро. Короче, полный бред и очень жаль что так.
  21. Для проведения опытов на Delphi XE8 использовал два планшета Android: - Lenovo TAB S8-50LC на базе процессора Intel Atom Z3745: http://www.ixbt.com/portopc/lenovo-tab-s8-50lc.shtml. На нем установлен Android версии 4.4.2. Подключил к USB и, как не странно, тестовая программка "Hello World!" успешно запустилась, хотя думал, что с процессором Intel вообще ничего не получится; - Prestigio Multipad PMT5777_3G с процессором ARM MediaTek MT8382. На нем установлен Android 4.2.2. Затем на форму красного цвета бросил зеленый TRectangle, присвоил Align значение Client, а также добавил желтую рамку с помощью свойства Stroke (Thinkness=10). Запустил на Prestigio - выглядит нормально, если не считать не дорисованных уголков (см. красные квадраты). Кстати, на Windows уголки рамки отображаются нормально. MainForm.Top = 25 - видимо, смещение от статус-бара. Затем запустил на Lenovo и результат получился не такой красивый. Как видим, верх формы почему-то "уехал" за статус-бар, а ее свойство Top равно 0: ------------------------------------------------------------------------------------------------------------------------------------ Поворачиваем планшеты на 90 градусов. На Prestigio все выглядит нормально: На Lenovo произошло какое-то расстройство: Как я понял, на Lenovo возникают проблемы с получением высоты статус-бара и размеров экрана при повороте планшета, но с чем это связано - непонятно. Возможно решение где-то в FMX.Platform.Android или глубже. По крайней мере там переменная FStatusBarHeight равна нулю. На моем примере ниже можно получить правильные размеры и позицию для формы (в т.ч. с учетом статус-бара): NativeWin := SharedActivity.getWindow; if NativeWin <> nil then begin ContentRect := TJRect.Create; DecorView := NativeWin.getDecorView; DecorView.getWindowVisibleDisplayFrame(ContentRect); end;
  22. Andrew

    TViewPager

    Странно, что в Delphi нет такой нужной компоненты как ViewPager: http://developer.android.com/training/animation/screen-slide.html. Надеюсь, появится в XE9 или XE10.
×
×
  • Создать...