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

Andrew

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

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

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

    3

Активность репутации

  1. Like
    Andrew получил реакцию от A_l_ex в И снова про ориентацию экрана. Запрет поворота экрана.   
    var   ScreenService: IFMXScreenService; begin   ScreenService:= TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService;   ScreenService.SetScreenOrientation([TScreenOrientation.Landscape]); end;
  2. Like
    Andrew получил реакцию от hippocamus в Расчет высоты объекта на основе высоты TLabel   
    При работе с Listbox мне приходится использовать RecalcSize. Вообще, для лучшего понимания проблемы вы лучше нарисуйте что хотели бы видеть и что реально получаете.
  3. Like
    Andrew получил реакцию от Alex7wrt в Выбор представления (View)   
    Для Android вычисляйте диагональ сами:
    ===================================
    Diagonal_in_Inch:= Sqrt(Sqr(DeviceMetricsService.GetDisplayMetrics.PhysicalScreenSize.Width) + Sqr(DeviceMetricsService.GetDisplayMetrics.PhysicalScreenSize.Height)) / DeviceMetricsService.GetDisplayMetrics.PixelsPerInch;
  4. Like
    Andrew отреагировална Brovin Yaroslav в Как вычислить размер текста?   
    Нужно использовать TTextLayout для этого. Это будет быстрее, чем создавать TText, TLabel, которые по сути в конечном итоге используют тот же TTextLayout.
     
    В приведенном ниже коде, нужно правильно задать требуемые настройки текста: шрифт, переносы, выравнивание и тд.
    uses FMX.TextLayout; {$R *.fmx} procedure TForm3.Button1Click(Sender: TObject); var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(Width, 1000); TextLayout.WordWrap := WordWrap; TextLayout.Font := Font; TextLayout.HorizontalAlign := TextAlign; TextLayout.VerticalAlign := VertTextAlign; finally TextLayout.EndUpdate; end; // TextLayout.TextRect; <- Здесь будет размер текста finally TextLayout.Free; end; end; Когда получите размер текста в TEdit, не забудьте, что нужно учесть размер рамки эдита и возможное наличие кнопок, что корректно задать ширину.
     
    Обновлять ширину надо в события OnChange и OnChangeTrtacking, в зависимости от требуемой вам ситуации.
  5. Like
    Andrew отреагировална asviridenkov в Внутренние гиперссылки   
    THtPanel/THtLabel
    http://delphihtmlcomponents.com/
  6. Like
    Andrew получил реакцию от zairkz в Пролистывание пальцем TabControl   
    Пока в Delphi нет такой нужной компоненты как ViewPager: http://developer.android.com/training/animation/screen-slide.html

     

  7. Like
    Andrew получил реакцию от Pax Beach в Сглаживание у TImage   
    У TImage есть свойство  DisableInterpolation
    =====================================
    Image1.DisableInterpolation:= False;
     
  8. Like
    Andrew отреагировална Brovin Yaroslav в Описание TfgToast - Быстрые уведомления   
    Описание:
    Назначение: Быстрые уведомления, появляющиеся в нижней части экрана, предназначенные для отображения короткой текстовой информации и опционно изображения Поддерживаемые платформы: Android, iOS Демо проект: Samples\ToastsDemo\ToastsDemo.dproj Доступен с версии: RX (R100) Возможности:
    Несколько быстрых способов отображения уведомления: TfgToast.Show(Message) - только текст TfgToast.Show(Message, Icon) - текст и картинка TfgToast.Show(Message, Duration)  текст + настройка длительности отображения TfgToast.Show(Message, Duration, Icon) - текст + картинка + длительность отображения Доступно редактирование цвета заднего фона (TfgToast.BackgroundColor) Доступно редактирование цвета сообщения (TfgToast.MessageColor). Возможность добавить к сообщению иконку (TfgToast.Icon) Доступно редактирование длительности отображения уведомления (TfgToast.Duration) Возможность менять глобальные параметры отображения всех тостов в рамках приложения (TfgToast.DefaultBackgroundColor, TfgToast.DefaultMessageColor и TfgToast.DefaultPadding) Примеры вызова:
    // Быстрое отображение, только текст TfgToast.Show('Message'); // Быстрое отображение, текст + картинка TfgToast.Show('Message', Bitmap); // Настраиваемое отображение var Toast: TfgToast; begin Toast := TfgToast.Create(EditToastMessage.Text, TfgToastDuration(ComboBoxDurationType.ItemIndex)); try if SwitchShowIcon.IsChecked then Toast.Icon.Assign(Image1.Bitmap); Toast.MessageColor := ColorComboBoxMessage.Color; Toast.BackgroundColor := ColorComboBoxBackground.Color; Toast.Show; finally Toast.Free; end; end; Скриншоты:


  9. Like
    Andrew отреагировална Brovin Yaroslav в Шрифт с обводкой   
    Есть в стилевых объектах специальный объект с тенью. Он называется: TStyleTextObject. Он не использует эффект тени, а делает это при помощи двойной отрисовки текста. По умолчанию он не доступен на панели инструментов, но его можно добавить установив библиотеку FGX.
  10. Like
    Andrew получил реакцию от Равиль Зарипов (ZuBy) в И снова про ориентацию экрана. Запрет поворота экрана.   
    var   ScreenService: IFMXScreenService; begin   ScreenService:= TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService;   ScreenService.SetScreenOrientation([TScreenOrientation.Landscape]); end;
  11. Like
    Andrew получил реакцию от Rusland в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета 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. Like
    Andrew получил реакцию от Brovin Yaroslav в И снова про ориентацию экрана. Запрет поворота экрана.   
    var   ScreenService: IFMXScreenService; begin   ScreenService:= TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService;   ScreenService.SetScreenOrientation([TScreenOrientation.Landscape]); end;
  13. Like
    Andrew получил реакцию от Rusland в И снова про ориентацию экрана. Запрет поворота экрана.   
    var   ScreenService: IFMXScreenService; begin   ScreenService:= TPlatformServices.Current.GetPlatformService(IFMXScreenService) as IFMXScreenService;   ScreenService.SetScreenOrientation([TScreenOrientation.Landscape]); end;
  14. Like
    Andrew отреагировална Равиль Зарипов (ZuBy) в Координаты текущего местоположения на MapView   
    ага, действительно. в коде указано что берется позиции камеры
    InvokeOnMap( procedure(Map: JGoogleMap) begin TJMapsInitializer.JavaClass.initialize(TAndroidHelper.Activity); // workaround for older version of gms FCameraPosition := Map.GetCameraPosition; end); а нужно указать
    InvokeOnMap( procedure(Map: JGoogleMap) begin TJMapsInitializer.JavaClass.initialize(TAndroidHelper.Activity); // workaround for older version of gms FCameraPosition := Map.getMyLocation; end); хорошо было бы добавить это как еще одно свойство, но пока нет времени этим заниматься
  15. Like
    Andrew получил реакцию от zairkz в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета 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.
  16. Like
    Andrew получил реакцию от krapotkin в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета 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.
  17. Like
    Andrew получил реакцию от Вячеслав в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета 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.
  18. Like
    Andrew получил реакцию от Равиль Зарипов (ZuBy) в Смещается заголовок формы на Android Intel   
    Нашел и устранил последнюю проблему планшета 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.
  19. Like
    Andrew отреагировална Brovin Yaroslav в [Android] Как отключить программную кнопку Меню?   
    Чтобы при повороте приложение не вылетало на версиях среды до XE8 включительно дополнительно нужно добавить значение screenSize для атрибута android:configChanges в манифест. Так как 14 версия требует обязательного наличия этого значения.
    Начиная с XE10 правок вносить не надо.
    Было:
    <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden" android:launchMode="singleTask"> Стало:
    <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask">
  20. Like
    Andrew отреагировална Brovin Yaroslav в Доступ из FMX к веб-камерам   
    По умолчанию такого кода нету в FireMonkey. Но вы можете самостоятельно реализовать TVideoCaptureDevice, который будет получать TBitmap с любого интересующего вас источника видеосигнала.
  21. Like
    Andrew получил реакцию от xenon54 в Как узнать сколько пикселей в 1 см?   
    Для 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". Конечно, придется следить за появлением новых устройств.
  22. Like
    Andrew получил реакцию от Brovin Yaroslav в Как узнать сколько пикселей в 1 см?   
    Для 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". Конечно, придется следить за появлением новых устройств.
  23. Like
    Andrew отреагировална Brovin Yaroslav в Как определить, какая канва сейчас используется в FireMonkey?   
    После запуска приложения. В любом месте на форме запрашиваем класс канвы:
    Canvas.ClassName Далее по классу определяем канву:
    TCanvasD2D - Direct 2D (Win) TCanvasGdiPlus - GDI + (Win) TCanvasGpu - GPU (Все платормы) TCanvasQuartz - Quartz (iOS, OSX)
  24. Like
    Andrew отреагировална Brovin Yaroslav в [TWebBrowser] [iOS] Открытие прикрепленной html страницы в TWebBrowser   
    Добрый день,
     
    Прикрепляю проект, где все загружается корректно (iOS Simulator). WebBrowserLoadLocalFile.zip
    Внимательно проверьте место назначения развертывания файла и факт того, что он задеплоился:
    Обязательно слэш в конце: "Startup\Documents\" Строка с файлом в Deployment Manager не должна быть серой!  
    Загрузка идет таким способом:
    uses System.IOUtils; procedure TForm15.FormCreate(Sender: TObject); begin WebBrowser1.URL := 'file:/' + TPath.Combine(TPath.GetDocumentsPath, 'DemoPage.html'); end; P.S. Сделано все по руководству Включение своих файлов в приложение
  25. Like
    Andrew получил реакцию от Martifan в Обновление Update1 Delphi XE8   
    Поговорив с сотрудником Embarcadero, приобрел Update Subscription. Теперь все в порядке. Просто им нужно научиться доносить информацию до своих клиентов и поставлять Allsoft.ru полный прайс-лист.
×
×
  • Создать...