Перейти к содержанию
  • Регистрация

Alex7wrt

Пользователи
  • Публикаций

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

  • Посещение

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

    25

Alex7wrt стал победителем дня 31 мая

Alex7wrt имел наиболее популярный контент!

Информация о Alex7wrt

  • Звание
    Продвинутый пользователь

Информация

  • Пол
    Мужчина

Посетители профиля

1 311 просмотр профиля
  1. Как вариант, можно рисовать вектора да и все, что угодно, в событии OnPaint
  2. Да Можете также попробовать комбинацию TRectangle + TText Утопленность и фон в таком случае задаете соответственно свойствами Stroke и Fill у TRectangle
  3. Добрый день Выводите текст в событии OnPaint
  4. Равиль Зарипов написал модуль для ровной отрисовки под Android, который здесь используется. Поищите по запросу FMX.ZNativeDrawFigure
  5. В первом примере, когда создаете наследника какого-либо класса (в вашем случае TObject), не забывайте наследовать параметры от родительского класса и переопределять базовые методы Constructor Create(NewId:integer;NewNGP:string); overload; constructor MyType.Create(NewId:integer;NewNGP:string); Var RectForButt:TRectangle; begin inherited Create; ......
  6. Написанию 64-битных приложений не удовлетворяет ни одна версия Rad Studio, включая и ту, которая еще не вышла (10.3). В планах Embarcadero добавить поддержку 64 бит под Android позже в 19-м году. Думаю, механизм внедрения этой фичи будет такой же, как сейчас с TargetSDK. То есть старые приложения, уже размещенные в маркете, никто трогать не будет, но обновления и новые приложения уже нельзя будет выпускать только в 32-битном исполнении.
  7. Обнаружил, что на некоторых телефонах с вытянутым экраном не отображается Smart Banner (TBannerAD.Size = Auto). Оказалось, что причиной тому неверный расчет высоты баннера в исходниках FMX.Advertising.Android. Может быть, эта информация кому-нибудь поможет В документации Android высота баннера должна вычисляться так: Тогда как в коде FMX.Advertising.Android она вычисляется в процедуре UpdateControlMetrics следующим образом: const AdHeightPortrait = 90; AdHeightLandscape = 90; AdHeightPhonePortrait = 50; AdHeightPhoneLandscape = 32; AndroidSW600DP = 600; AndroidSW600DPLandscape = 552; AdMobBannerHeight = 50; AdMobFullBannerHeight = 60; AdMobLeaderboardHeight = 90; begin if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then begin case FAdControl.AdSize of TBannerAdSize.Auto: begin if Screen.Size.Height > Screen.Size.Width then if Screen.Size.Width < AndroidSW600DP then FAdControl.Height := AdHeightPhonePortrait else FAdControl.Height := AdHeightPortrait else if Screen.Size.Height < AndroidSW600DPLandscape then FAdControl.Height := AdHeightPhoneLandscape else FAdControl.Height := AdHeightLandscape; end; Также, учитывая, что на вытянутых экранах (по крайней мере на тех устройствах, на которых я тестил), Screen.Width и Screen.Height далеко не всегда дают верные значения, то более правильный код процедуры TAndroidBannerAd.UpdateControlMetrics будет таким: procedure TAndroidBannerAd.UpdateControlMetrics; var Frame: TRectF; Form: TCommonCustomForm; Disp: JDisplayMetrics; Window: JWindow; h: integer; const AdHeightLandscape = 90; AdHeightPhoneLandscape = 32; AndroidSW600DP = 600; AndroidSW600DPLandscape = 552; AdMobBannerHeight = 50; AdMobFullBannerHeight = 60; AdMobLeaderboardHeight = 90; begin if (FAdControl <> nil) and not Assigned(FAdControl.OnResize) then begin Disp := TJDisplayMetrics.Create; Window:=TJWindow.Wrap((MainActivity.getWindow as ILocalObject).GetObjectID); Window.getWindowManager.getDefaultDisplay.getRealMetrics(disp); h:=round(Disp.heightPixels/Disp.density); case FAdControl.AdSize of TBannerAdSize.Auto: begin if Screen.Size.Height > Screen.Size.Width then begin if h <= 400 then FAdControl.Height := 32 else if (h>400) and (h<=720) then FAdControl.Height:=50 else FAdControl.Height := 90 end else if Screen.Size.Height < AndroidSW600DPLandscape then FAdControl.Height := AdHeightPhoneLandscape else FAdControl.Height := AdHeightLandscape; end; TBannerAdSize.Small: FAdControl.Height := AdMobBannerHeight; TBannerAdSize.Medium: FAdControl.Height := AdMobFullBannerHeight; TBannerAdSize.Large: FAdControl.Height := AdMobLeaderboardHeight; end; if Screen.ActiveForm <> nil then Form := Screen.ActiveForm else if Application.MainForm <> nil then Form := Application.MainForm else Form := nil; if Form <> nil then begin Frame := WindowHandleToPlatform(Form.Handle).Bounds; FAdControl.Width := Round(Frame.Width); end; end; end;
  8. Если не ошибаюсь, автор писала, что OpenDialog работает нормально, но ей нужен диалог выбора папки, а не файла. SelectDirectory не устраивает по интерфейсу, поэтому пришлось использовать TFileOpenDialog из VCL, с которым и проблемы. Но у меня есть подозрения, что при использовании TFileOpenDialog из VCL, SelectDirectory берется из модуля VCL.FileCtrl, а не FMX.Dialogs, из-за чего у него "устаревший" интерфейс. Для автора: попробуйте такой код, посмотрите, изменится ли внешний вид диалога procedure TForm1.Button1Click(Sender: TObject); var st: string; begin FMX.Dialogs.SelectDirectory('Открыть папку','C:\',st); end;
  9. Не совсем понятно насчет неудобного дизайна SelectDirectory (В первом сообщении темы вы пишете, что у него слишком устаревший вид) Вот выбор файла через TOpenDialog А вот выбор папки через SelectDirectory: По-моему дизайн у них один и тот же. UPD. Может быть, вы используете Vcl.FileCtrl.SelectDirectory, а не FMX.Dialogs.SelectDirectory?
  10. Возможно, проблема в том что в VCL и FMX по-разному реализована работа с окнами. Пока в голову приходят два варианта и оба касаются исходного кода компонентов TFileOpenDialog либо TOpenDialog: 1. В исходниках кода TFileOpenDialog переделать работу с контекстом родительского окна под FMX. Вместо Handle окна использовать WindowHandleToPlatform(Handle).Wnd 2. В исходниках TOpenDialog разрешить нажатие на 'ОК' без выбора файла. Для этого скопируйте в папку проекта модули, в которых реализован функционал TFileOpenDialog или TOpenDialog и поэкспериментируйте с ними.
  11. Добрый день Проверил поведение TOpenDialog в своей программе в полноэкранном режиме. При переключении на другие программы и обратно окно диалога никуда не исчезает. Сложно сказать, чем вызвано подобное поведение диалога в вашем случае. Возможно стоит проверить код в обработчиках событий формы. Также, рекомендую поиграться со свойствами формы BorderStyle, FullScreen, WindowState. В частности, попробуйте BorderStyle = None; FullScreen = true; WindowState = wsMaximized.
  12. var Player: JMediaPlayer; Единожды создаете плеер и готовите файл: Player:=TJMediaPlayer.Create; Player.setDataSource(StringToJString('Путь_к_файлу')); Player.prepare; И, когда потребуется, запускаете воспроизведение Player.start; В uses нужно добавить что-то из этого: FMX.Helpers.Android, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNI.AdMob, Androidapi.JNI.App, Androidapi.JNIBridge, FMX.Advertising, FMX.Platform.Android, Androidapi.JNI.Embarcadero Не помню уже, что именно. Ненужные уберите
  13. var ScreenService: IFMXScreenService; scale: single; begin if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then scale:=ScreenService.GetScreenScale; end; Эту фишку придумали не разработчики FireMonkey. Коэффициент масштаба экрана используется и в iOS, и в Android. Введен он для более удобного перевода ПО под новые экраны. Смысл в том, что оперируя тем же логическим размером экрана, ПО автоматически отрисовывает изображение на другом физическом разрешении.
×
×
  • Создать...