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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

Весь контент Brovin Yaroslav

  1. Набросал вам программу для просмотра дерева стиля. StyleTreeViewer.zip Открываете файл стиля и смотрите из каких объектов он состоит и какие имена нужно присваивать узлам дерева стиля. Каждый контрол может поддерживать разные варианты реализации стилей. Поэтому используйте в качества примера тот, который вам больше подходит. Так же рекомендую использовать растровые стили. Они значительно быстрее работают на мобильных платформах.
  2. Типы координат В FIreMonkey различают три вида координат: Локальные - это координаты в системе координат контрола. Абсолютные - это координаты в системе координат клиентской части формы. Экранные - это координаты в системе координат экрана. Соответственно, если речь идет о форме, то позиция формы задается в экранных координатах. Если речь идет о контролах, то в локальных координатах своего родительского контрола. Конвертация Локальные -> Абсолютные TControl.LocalToAbsolute(TPointF): TPointF Абсолютные -> Локальные TControl.AbsoluteToLocal(TPointF): TPointF Абсолютные -> Экранные TControl.Scene.LocalToScreen(TPointF): TPointF; Экранные -> Локальные TControl.Scene.ScreenToLocal(TPointF): TPointF;
  3. Вам надо сконвертировать абсолютные координаты кнопки в экранные. О том, как это сделать ответ тут: О видах координат в FireMonkey и конвертации между ними
  4. Какие виды координат (Локальные, абсолютные, экранные и тд) существуют в FireMonkey? Как с ними работать?
  5. Что мешает самому задать для формы позицию под кнопкой?
  6. Начиная с версии RAD Studio XE6, в каждой колонке таблицы существует только один контрол. Он создается через метод: function CreateCellControl: TStyledControl; Этот контрол отображается только в текущей выделенной строке. В остальных ячейках колонка просто рисует копию изображения этого контрола. За отрисовку копии отвечает интерфейс IDrawableCell. Вам нужно подмешать этот интерфейс в ваш TSwitchCell и реализовать его методы. P.S. В качестве примера, посмотрите на то, как реализован TCheckCell. Там как раз есть пример того, как получить изображения контрола и нарисовать его на канве.
  7. У TChangeTabAction есть свойство TChangeTabAction.CustomText Оно служит для указания надписи на кнопках.
  8. У формы есть свойство FormStyle в нем нужно указать TFormStyle.Popup. В этом случае окно должно быть поверх.
  9. Все типы начинающиеся с буквы "J" - это соответствующие типы Android API. Смотрите developer.android.com Правила трансляции Android API название в Delphi названия: Добавить приставку "J" к типу. Например: Cursor (В Android API) -> JCursor (В Delphi) Если тип вложенный в другой тип, то вставить разделитель "_" между родительским типом и вложенным. Например: CallLog.Calls (В Android API) -> JCallLog_Calls (В Delphi) Аналогично в обратную сторону
  10. Добрый день, SharedActivity - это вспомогательная функция, введенная в FMX для удобного доступа к экземпляру активити. На счет алгоритма поиска соответствующего заголовочного файла - правил нету. Так как, зависимости модулей в Delphi отличаются от механизма пакетов Java. Поэтому в Delphi физически не получится сделать такое же соответствие названий юнитов, как в Java - пакеты. Поэтому пользуйтесь поиском по заголовочным файлам C++ Builder для поиска. P.S. Здесь представлены правила трансляции классов в делфовые юниты (Актуально для XE7): Ветка Unit - содержит название юнита (хедера), внутренние ветки типы из Android API, которые будут помещены в этот юнит. <units> <unit name="Androidapi.JNI.VideoView"> <class name="android.widget.VideoView" /> <class name="android.widget.MediaController$MediaPlayerControl" /> <class name="android.widget.MediaController" /> </unit> <unit name="Androidapi.JNI.Java.Security"> <class name="java.security.*" /> </unit> <unit name="Androidapi.JNI.JavaTypes"> <class name="java*" /> <class name="org*" /> </unit> <unit name="Androidapi.JNI.GraphicsContentViewText"> <class name="android.graphics*" /> <class name="android.content*" /> <class name="android.view*" /> <class name="android.text*" /> <class name="android.database*" /> </unit> <unit name="Androidapi.JNI.Os"> <class name="android.os*" /> </unit> <unit name="Androidapi.JNI.Webkit"> <class name="android.webkit*" /> </unit> <unit name="Androidapi.JNI.Telephony"> <class name="android.telephony*" /> </unit> <unit name="Androidapi.JNI.Location"> <class name="android.location*" /> </unit> <unit name="Androidapi.JNI.App"> <class name="android.app*" /> </unit> <unit name="Androidapi.JNI.Widget"> <class name="android.widget*" /> </unit> <unit name="Androidapi.JNI.Util"> <class name="android.util*" /> </unit> <unit name="Androidapi.JNI.Media"> <class name="android.media*" /> </unit> <unit name="Androidapi.JNI.Provider"> <class name="android.provider*" /> </unit> <unit name="Androidapi.JNI.Support"> <class name="android.support*" /> </unit> <unit name="Androidapi.JNI.Net"> <class name="android.net*" /> </unit> <unit name="Androidapi.JNI.Dalvik"> <class name="dalvik*" /> </unit> <unit name="Androidapi.JNI.Hardware"> <class name="android.hardware*" /> </unit> <unit name="Androidapi.JNI.InputMethodService"> <class name="android.inputmethodservice*" /> </unit> <unit name="Androidapi.JNI.Embarcadero"> <class name="com.embarcadero.firemonkey*" /> </unit> <unit name="Androidapi.JNI.OpenGL"> <class name="android.opengl*" /> </unit> <unit name="Androidapi.JNI.AdMob"> <class name="com.google.android.gms.ads.*" /> </unit> <unit name="Androidapi.JNI.PlayServices"> <class name="com.google.android.gms*" /> </unit> <unit name="Androidapi.JNI.PlayServices.GCM"> <class name="com.embarcadero.gcm*" /> </unit> <unit name="Androidapi.JNI.Analytics"> <class name="com.google.analytics*" /> </unit> <unit name="Androidapi.JNI.ApkExpansion"> <class name="com.android.vending.expansion*" /> <class name="com.google.android.vending.expansion*" /> <class name="com.embarcadero.expansion*" /> </unit> <unit name="Androidapi.JNI.Licensing"> <class name="com.google.android.vending.licensing*" /> </unit> <unit name="Androidapi.JNI.InAppBilling"> <class name="com.android.vending.billing.*" /> </unit> <unit name="Androidapi.JNI.Print"> <class name="android.print*" /> </unit> <unit name="Androidapi.JNI.Bluetooth"> <class name="android.bluetooth.*" /> </unit> </units>
  11. Как я правильно заметил, в вашем случае не был загружен стиль ваших меток. По этому вы обращались к размерам, вычисленным для настроек текста по умолчанию. А после загрузки стиля, вы уже не обновляли позицию. На Windows настройки текста по умолчанию совпадают с настройками текста в стиле. Поэтому работает так, как вы и полагаете. Решения Делать перерасчет позиции в OnApplyStyleLookup или OnResize у TLabel. Принудительно загрузить стиль: NeedApplyStyleLookup; ApplyStyleLookup;
  12. Свойства компонентов используют все те же элементы рассчета метрик текста. Поэтому нужно полностью убедиться, что стиль загружен. Попробуйте загрузить стили перед заданием позиции через вызов NeedApplyStyleLookup; ApplyStyleLookup;
  13. Важно убедиться, что стили для этих меток загружены. Так как стиль содержит настройки текста. И если вычислять размеры до загрузки стиля, то скорее всего будут использованы другие размеры текста.
  14. Добрый вечер, Для режима Custom у текста есть свойство Width, позволяющее указать ширину текста. Поэтому вам нужно указать требуемую ширину, через это свойство (При условии, что ItemAppearance.ItemAppearance = Custom): ItemObjects.Text.Width Для того, чтобы корректировать ширину области вывода текста на разных устройствах, я рекомендую использовать событие TListView.OnResize. Которое вызывается в момент изменения размера контрола. И в нем основываясь на ширине TListView вычислить размер области текста.
  15. Прикрепите проект. Поскольку на чистом проекте с одним компонентом, я не вижу, описанной вами, проблемы. На счет редактирования стиля "listboxitemstyle". Этот стиль используется для дней в календаре. Поэтому при изменении размера текста, он соответственно изменился для дней в календаре.
  16. Добрый день, Получить доступ к пикселям битмапа: Доступ к пикселям Получив доступ, изменить требуемые пиксели (в том числе прозрачность) Записать измененные данные обратно, используя функцию Unmap var Data: TBitmapData; Bitmap: TBitmap; begin Bitmap := Image1.Bitmap; if Bitmap.Map(TMapAccess.ReadWrite, Data) then try Data.SetPixel(10, 10, TAlphaColorRec.null); finally Bitmap.Unmap(Data); end; end;
  17. Добрый день, Рабочее решение - это задавать позицию компонентов в дизайнере, используя свойств инспектора объектов: Position, Size, Align, Anchors. В этом случае у вас есть возможность перемещать компоненты в стиле.
  18. Посмотрел, это не ошибка, у TListView есть специальное событие OnDelete. Которое вызывается в момент удаления элемента.
  19. Это ошибка, я завел багу во внутреннем трекере. А пока пользуйтесь вариантом от Estra.
  20. Добрый вечер, На сколько я вижу исходники, могу сказать, что это актуально только для Android платформы. Поэтому на других нужно использовать старый подход с ShowModal без параметров.
  21. Да, масштабирование дизайнера была бы полезная фича. Я попробую предложить. Поясните по подробнее на счет границ контролов. Я не до конца понял. Что требуется именно, для чего и в подробных примерах.
  22. Если вы хотите, использовать режим Native для DropDownKind, то лучше рассмотрите переопределение сервиса пиккеров FMX.PickersIFMXPickerService. Возьмите за основу нашу реализацию, отнаследуйтесь и добавьте требуемое поведение. Либо можете сделать свой вариант реализации пикеров. iOS: List Picker: UIPickerView Date/Time Picker: UIDatePicker Android: List Picker: DialogFragment Date Picker: DatePickerDialog Time Picker: TimePickerDialog
×
×
  • Создать...