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

Brovin Yaroslav

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

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav отреагировална konung в Как использовать Toast уведомления?   
    Чую ща вас заругают за оформление...
     
    Однако по теме(ам)...
     
    Та самая строчка называется Toast. и насколько я понял стандартного компонента для работы с ней - нет. Народ в сети предлагает воспользоваться вот этим: FMX Toast Component
     
    Для обработки нажатия кнопки меню - юзайте стандартно событие OnKeyUp, где Key искать равный 18 или vkMenu из System.UITypes. Стандартного меню, опять же, как я понял - нет. Однако можно обработав нажатие сделать что-нить своё.
     
    Что до прочей инфы - искать стоит на оф. сайте, в хелпе, в демках. Хотя далеко не всё что хотелось бы там есть. Ряд вопросов я для себя разобрал роясь здесь, в stackoverflow, тут http://delphifmandroid.blogspot.ru (в частности вот, про диалоговое окно с едитом http://delphifmandroid.blogspot.ru/2014/02/blog-post.html). В целом - инфа есть, но мало и разрозненно.
  2. Like
    Brovin Yaroslav отреагировална cezif в Существует ли способ растягивания видео до нужных размеров под Windows?   
    Спасибо за подсказку, в вообщем-то получилось. Сделал так:
     
    Создал отдельный каталог, скопировал туда модуль FMX.Media.Win.pas, FMX.Controls.Win.res, FMX.Filter.res (без последних двух проект не компилировался) Внес каталог в Tools - Options - Library - Library path В модуле FMX.Media.Win.pas в процедуре TWindowsMedia.UpdateMediaFromControl первой строкой в коде добавил добавление масштабирования: procedure TWindowsMedia.UpdateMediaFromControl; var P: TPointF; R: TRect; Bounds: TRectF; Form: TCommonCustomForm; begin FVMRWindowlessControl.SetAspectRatioMode(VMR9ARMode_LetterBox); // <-- Добавить if FWnd <> 0 then .... далее в коде закомментировал строку:
    Bounds := TRectF.Create(0, 0, P.X, P.Y); вместо P.X и P.Y (Ширина и высота видео) - ввел ширину и высоту контрола:
    Bounds := TRectF.Create(0, 0, Control.AbsoluteWidth, Control.AbsoluteHeight); После этих манипуляций видео стало растягивать под контрол.
  3. Like
    Brovin Yaroslav получил реакцию от petyaas в Как правильно удалять контролы в RunTime?   
    Добрый вечер,
     
    Главное, что нужно помнить по теме время жизни объектов - это то, что в мобильных платформах (Android и iOS) процесс удаления объектов отличается от поведения на настольных платформах (Windows и OSX). В мобильных платформах появился механизм ARC (Automatic Reference Counting - автоматический подсчет ссылок). Почитать описание (на английском), как это работает можно тут: Apple Developer. Для нас же, это означает, что все объекты имеют поле - счетчик ссылок (RefCount). Когда счетчик ссылок равен нулю, объект автоматически удаляется. Если кто-то присваивает ссылку на объект, то счетчик автоматически увеличивается на 1.
    property RefCount: Integer read FRefCount; // Свойство TObject Можно ошибочно подумать, что это связано со сборщиком мусора. Однако, это не так. При компиляции, компилятор автоматически вставляет в код служебные команды по увеличению и уменьшению счетчика ссылок. Поэтому объект физически уничтожится в тот момент, когда счетчик ссылок станет равным 0. В то время как сборщик мусора, удаляет объекты по своему внутреннему расписанию.
     
    Теперь о вашем вопросе. Когда вы создаете объект и указываете ему родителя, автоматически ваш объект попадает как минимум в список дочерних объектов TabItem1. А значит, автоматически счетчик ссылок на TCircle будет увеличен. Когда вы сохраняете ваш объект в массиве, это опять же автоматически увеличивает счетчик ссылок. Поэтому, чтобы удалить объект есть два способа:
     
    1. Вызвать метод TObject.DisposeOf. Это форсирует вызов деструктора, но не очищает память выделенную под объект. Это означает, что выполниться код деструктора, TCircle будет удален из списков, все ресурсы, которые окружность захватила будут распущены. Но сама память, которая была выделена из кучи под его хранение будет распущена, только в момент, когда больше не будет ни одной ссылки. Например, так:
    c[r].DisposeOf; c[r] := nil; 2. Убрать все ссылки, которые указывают на ваш объект. Это приведет к автоматическому удалению объекта. Убрать объект из структуры объектов, путем удаления удаления его из родительcкого контроkа Parent = nil, и затем вызывать Free и занилилить уже ссылку на объект в массиве. 
    c[r].Parent := nil; c[r].Free; c[r] := nil; // Или FreeAndNil(c[r]), в зависимости от типа c. Если больше ссылок на ваш объект нету, то данный код автоматически удалит объект c[r].
    Дополнение от RAD Studio XE6. В этой версии компилятор автоматически после вызова метода Free очистит указатель на объект. По этой причине дополнительно присваивание nil указателю на объект не требуется на мобильных платформах
    var A: TObject; begin A := TObject.Create; A.Free; // В этом месте A = nil на мобильных платформах. // На настольных платформах: A указывает на мусор end;  Чтобы осталась совместимость с настольными платформами, лучше использовать второй подход.
     
    P.S. Никогда не вызывайте деструктор напрямую, вызовом метода Destroy.
  4. Like
    Brovin Yaroslav получил реакцию от Kitty в FGX. Индикация хода выполнения длительных операций, виртуальная клавиатура и ActionSheet   
    Добавлена новая версия расширения компонентов FireMonkey. Новый пакет поддерживается только для XE6. 
     
    Список возможностей:
    Progress Dialog - Добавлены события OnShow, OnHide. Progress Dialog - Исправлены утечки памяти на Андроид и IOS TfgProgressDialog - Добавлен метод для немедленного сброса прогресса без анимации ResetProgress. TfgActionSheet - Добавлена поддержка действий TAction. Так же теперь можно указать только по одной кнопке деструктивного и отменного типа. TfgColorsPanel - Добавлен новый контрол для выбора цветов из готовых пресетов. Поддерживает следующие наборы цветов: WebSafe, X11. Позволяет указывать свои наборы цветов. TfgGradientEdit - Добавлен новый контрол для задания градиента. TfgLinkedLabel - Добавлен новый контрол - метка со ссылкой. Открывает указанную ссылку в стандартном браузере. Поддерживает все платформы. Добавлены и улучшены примеры каждых контролов. Добавлен набор хелперов И другие улучшения на уровне кода. TfgActivityDialog
    Работа под iOS:

    Работа под Андроид (Выше, чем GingerBread 2.3):

    Работа под Андроид (GingerBread 2.3):

    TfgProgressDialog
    Работа под iOS:

    Работа под Андроид (Выше, чем GingerBread 2.3):

    Работа под Андроид (GingerBread 2.3):
    TfgActionSheet


    TfgColorsPanel

    TfgLinkedLabel

  5. Like
    Brovin Yaroslav получил реакцию от Ra72 в Редактирование стиля, как добавить "TStyleObject", "TActiveStyleObject" и т.п.?   
    По умолчанию эти объекты стиля и другие не зарегистрированы в палитре инструментов.
    Эти объекты используются только в стилях для:
    Упрощение создания стиля за счет композиции контролов для достижения наиболее часто используемых функций (смена изображений по триггеру в зависимости от состояния контрола  - кнопка с тремя состояниями, Текст с тенью) Увеличения производительности работы стиля за счет композиции контролов. Уменьшение размера стиля за счет повторного использования одного исходного изображения в однотипных контролах (TButton, TSpeedButton и тд). То есть вместо загрузки по отдельности каждого изображения в стиль каждого контрола, можно использовать изображения по ссылке. Чтобы их использовать, нужно их зарегистрировать в среде IDE RAD Studio.
    Это делает вот этот пакет: 
    RAD Studio XE5 - FMX Style Objects.zip RAD Studio XE6 - FMX Style Objects (XE6).zip После установки пакета в палитре инструментов появится вкладка "Style Object", в которой будут находится все служебные стилевые объекты среды RAD Studio XE5.
     
    Список добавляемых стилевых объектов: 
    TStyleObject - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TSubImage - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TActiveStyleObject - Объект для смены одного изображения на другое с указанным типом анимации и указанным триггером. TTabStyleObject - специальный объект для быстрого создания стиля вкладки TTabControl TCheckStyleObject - специальный упрощенный объект для создания стиля TCheckBox TButtonStyleObject - упрощенный объект стиля кнопки с поддержкой загрузки отдельных изображений на каждое состоянии кнопки (нормальное, фокус, под мышкой, нажатое) TSystemButtonObject - стиль системной кнопки. То же, что и TButtonStyleObject, только с дополнительным состоянием - неактивная кнопка TStyleTextObject - объект для быстрого создания стиля текст с тенью. TStyleTextAnimation - объект анимации для смены цвета и тени текста  TActiveStyleTextObject - объект стиля для создания текста с тенью и переключению цвета текста и тени на другой по анимации и триггеру. TTabStyleTextObject - объект стиля для создания вкладки с текстом для TTabControl. TButtonStyleTextObject - объект стиля для создания стиля кнопки с текстом. TActiveOpacityObject - объект для смены прозрачности контрола. TBrushObject - объект хранящий кисть TBrush TBitmapObject - объект хранящий изображение TBitmap TFontObject - хранение шрифта TFont TPathObject - хранение SVG пути TPath TColorObject - хранение цвета TAlphaColor
  6. Like
    Brovin Yaroslav получил реакцию от rareMax в [iOS] Как сделать цветную обводку кнопки в iOS?   
    Теперь в RAD Studio XE6 для iOS и Андроид появилась поддержка Tint эффекта, который позволяет прямо в дизайнере менять цвет фона, обводки и заливки иконок кнопки.
     
    Этот эффект позволяет легко менять оттенок фона и контура кнопки. Примеры для Андроид и iOS изображены ниже.
    Смена фона кнопки на Android:

    Быстрая смена заливки кнопок с иконками на iOS:

    Быстрая смена контура кнопки, если он поддерживается стилем:

     
    Обратите внимание, что поддержка данного эффекта зависит от стиля. Если стиль поддерживает его, то в дизайнере появятся свойства редактирования цвета. Если стиль не поддерживает, то свойства Tint будут скрыты.
  7. Like
    Brovin Yaroslav получил реакцию от rareMax в Компонент рекламы   
    В RAD Studio XE6 появился новый компонент TBannerAd, который позволяет встраивать контекстную рекламу в ваше приложение. Компонент поддерживает все мобильные платформы (iOS, Android).
     
    Компонент добавлен в раздел "Additional" панели палитры инструментов.
  8. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Поддержка соединения устройств по Bluetooth   
    В RAD Studio XE6 появилась поддержка передачи данных по беспроводной сети Wi-FI. Поддержка сети Bluethooth запланирована на будущие версии.
     
    Компоненты взаимодействия приложений называются: "Application Tethering Components". Они позволяют легко осуществить взаимодействие ваших приложений друг с другом, написанных для разных платформ. 
     
    Подробнее о новых компонентах тут: Using App Tethering
  9. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Компонент рекламы   
    В RAD Studio XE6 появился новый компонент TBannerAd, который позволяет встраивать контекстную рекламу в ваше приложение. Компонент поддерживает все мобильные платформы (iOS, Android).
     
    Компонент добавлен в раздел "Additional" панели палитры инструментов.
  10. Like
    Brovin Yaroslav получил реакцию от Равиль Зарипов (ZuBy) в Редактирование стиля, как добавить "TStyleObject", "TActiveStyleObject" и т.п.?   
    По умолчанию эти объекты стиля и другие не зарегистрированы в палитре инструментов.
    Эти объекты используются только в стилях для:
    Упрощение создания стиля за счет композиции контролов для достижения наиболее часто используемых функций (смена изображений по триггеру в зависимости от состояния контрола  - кнопка с тремя состояниями, Текст с тенью) Увеличения производительности работы стиля за счет композиции контролов. Уменьшение размера стиля за счет повторного использования одного исходного изображения в однотипных контролах (TButton, TSpeedButton и тд). То есть вместо загрузки по отдельности каждого изображения в стиль каждого контрола, можно использовать изображения по ссылке. Чтобы их использовать, нужно их зарегистрировать в среде IDE RAD Studio.
    Это делает вот этот пакет: 
    RAD Studio XE5 - FMX Style Objects.zip RAD Studio XE6 - FMX Style Objects (XE6).zip После установки пакета в палитре инструментов появится вкладка "Style Object", в которой будут находится все служебные стилевые объекты среды RAD Studio XE5.
     
    Список добавляемых стилевых объектов: 
    TStyleObject - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TSubImage - Использование изображения по ссылке на оригинал и области в этом изображении. Не загружает повторно объект. TActiveStyleObject - Объект для смены одного изображения на другое с указанным типом анимации и указанным триггером. TTabStyleObject - специальный объект для быстрого создания стиля вкладки TTabControl TCheckStyleObject - специальный упрощенный объект для создания стиля TCheckBox TButtonStyleObject - упрощенный объект стиля кнопки с поддержкой загрузки отдельных изображений на каждое состоянии кнопки (нормальное, фокус, под мышкой, нажатое) TSystemButtonObject - стиль системной кнопки. То же, что и TButtonStyleObject, только с дополнительным состоянием - неактивная кнопка TStyleTextObject - объект для быстрого создания стиля текст с тенью. TStyleTextAnimation - объект анимации для смены цвета и тени текста  TActiveStyleTextObject - объект стиля для создания текста с тенью и переключению цвета текста и тени на другой по анимации и триггеру. TTabStyleTextObject - объект стиля для создания вкладки с текстом для TTabControl. TButtonStyleTextObject - объект стиля для создания стиля кнопки с текстом. TActiveOpacityObject - объект для смены прозрачности контрола. TBrushObject - объект хранящий кисть TBrush TBitmapObject - объект хранящий изображение TBitmap TFontObject - хранение шрифта TFont TPathObject - хранение SVG пути TPath TColorObject - хранение цвета TAlphaColor
  11. Like
    Brovin Yaroslav отреагировална vladimi-r в Существуют ли готовые решения TFontDialog для Win и Mac?   
    Сделал модуль вызова нативных FontDialog для Win и Mac OSX. Может кому еще пригодится.
     
    Не знаю только как на Маке получить цвет и атрибуты (bold, italic) шрифта.
    FontDialog.zip
  12. Like
    Brovin Yaroslav получил реакцию от Morfi в Возможно ли создать свои тригеры для запуска анимации?   
    Возможно. Для этого нужно две вещи:
    Иметь опубликованное свойство триггера (published) Инициировать запуск триггера можно командами: procedure StartTriggerAnimation(const AInstance: TFmxObject; const ATrigger: string); procedure StartTriggerAnimationWait(const AInstance: TFmxObject; const ATrigger: string); procedure ApplyTriggerEffect(const AInstance: TFmxObject; const ATrigger: string); Метод выбирается в зависимости от того, что должен триггер стартовать: анимацию или эффекты переходов (Transition Effects).
  13. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Возможно ли создать свои тригеры для запуска анимации?   
    Возможно. Для этого нужно две вещи:
    Иметь опубликованное свойство триггера (published) Инициировать запуск триггера можно командами: procedure StartTriggerAnimation(const AInstance: TFmxObject; const ATrigger: string); procedure StartTriggerAnimationWait(const AInstance: TFmxObject; const ATrigger: string); procedure ApplyTriggerEffect(const AInstance: TFmxObject; const ATrigger: string); Метод выбирается в зависимости от того, что должен триггер стартовать: анимацию или эффекты переходов (Transition Effects).
  14. Like
    Brovin Yaroslav отреагировална Morfi в [Отклонение] Hardware-кнопки   
    Есть некоторая особенность. Событие в программе при нажатии на кнопку "меню" реагирует только со второго раза, всегда.
     
    Ставлю breakpoint на событие TForm.FormKeyUp.
     

     
    Точка срабатывает только каждый второй раз на нажатие кнопки меню.
     
    Это баг?! Можно ли исправить?!
     
    Среда разработки: XE5 up1
    Версия android: 4.4.2 (CM11)
    Устройство: Huawei U8860
  15. Like
    Brovin Yaroslav отреагировална Andrey Efimov в [Отклонение] Hardware-кнопки   
    Покопался в QC, рапортов о подобном баге не нашёл. В связи с этим, советую вам отрапортовать о баге в QC(http://qc.embarcadero.com/wc/qcmain.aspx?da=5631).
  16. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в [Отклонение] Приложения с SQLite не запускаются на Android 2.3.6   
    Проверил в  XE6 бета ошибка на сниппете не воспроизводится. Видимо QC уже исправили.
  17. Like
    Brovin Yaroslav получил реакцию от Владимир в [TTabControl] Красивое 3D переключение вкладок в TabControl   
    Можно сделать так:
    Делаем поворот TTabControl на от 0 до 90 градусов, чтобы он повернулся к пользователю ребром. По окончании первой анимации меняем активную вкладку в TTabControl. Делаем поворот TTabControl еще на 90 градусов от 270 до 360. В итоге TTabControl поворачивается к нам уже новой вкладкой.  Видео эффекта в действии: 

     
    Проект: TTabControl_3DRotationDemo.zip
  18. Like
    Brovin Yaroslav получил реакцию от AngryOwl в [TTabControl] Красивое 3D переключение вкладок в TabControl   
    Можно сделать так:
    Делаем поворот TTabControl на от 0 до 90 градусов, чтобы он повернулся к пользователю ребром. По окончании первой анимации меняем активную вкладку в TTabControl. Делаем поворот TTabControl еще на 90 градусов от 270 до 360. В итоге TTabControl поворачивается к нам уже новой вкладкой.  Видео эффекта в действии: 

     
    Проект: TTabControl_3DRotationDemo.zip
  19. Like
    Brovin Yaroslav получил реакцию от Morfi в Проблема с отображением изображения подгруженного в run-time   
    Morfi, когда вы меняете режим WrapMode на TImageWrapMode.iwStretch, по сути вы теряете качество изображения. По скольку, судя по описанному поведению, на вашем устройстве логический пиксель не соответствует физическому. А значит, картинка физически у вас имеет размер 256 на 256. А в логических координатах меньше. Потому что на вашем устройстве коэффициент масштабирования отличается от 1. Поэтому на экране с повышенной плотностью точек, 256 будет реально меньше, чем размер вашего TImage.
     
    Решение: нужно сделать несколько вариантов карты под экраны с разной плотностью пикселей. Прочитайте статьи по ссылкам Андрея. + дополнительно прочитайте статью на Android SDK - Iconography 
  20. Like
    Brovin Yaroslav получил реакцию от Nix0N в Как изменить стиль по умолчанию для андроида?   
    Если задача стоит просто изменить стандартный платформенный стиль. То, чтобы измененный стиль не занимал дополнительное место в приложении, нужно им заменить стандартный.
     
    Я писал давно статью на эту тему тут: FMX 2.0. Глобальная замена платформенного стиля по умолчанию без TStyleBook
     
    Идея простая, заменить ресурс стандартного стиля на ваш.
     
    Дополнение для названия ресурсов в приложении. Вначале указано название ресурса в приложении, затем платформа
    iphonestyle - iPhone iOS < 7.0  ipadstyle -  iPad iOS < 7.0 iphonepadstyle_Modern - iOS >= 7.0 androidstyle - Android win7style -  WIndows 7 win8style - Windows 8 lionstyle - OSX Если же вы создаете новые стили (кастомный стиль итемов и тд), то их нужно грузить обычным способом через стиль бук. И поскольку они новые, ваши, то они включаются в ресурсы формы и увеличивают размер приложения.
  21. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Проблема с отображением изображения подгруженного в run-time   
    Почитайте эти темы, в них  вы найдёте ответы на многие вопросы, связанные с картинками, включая ваш:
    Получаем разрешение экрана устройства, логические и физические размеры экрана в FireMonkey Как использовать иконки разного качества для экранов с разным DPI?
  22. Like
    Brovin Yaroslav отреагировална Morfi в Проблема с отображением изображения подгруженного в run-time   
    Есть проблема. Я динамически создаю несколько TImage. Размеры их все одинаковы 256х256. Подгружаю в них изображения с такими же размерами 256х256. Но, отображаются как на скрине ниже. 
     

     

     
    А должны, по идее заполнить весь TImage, ведь размеры одинаковы. 
     

     
    Обращу внимание, что тот же код создание динамических TImage и подгрузки в них изображений на декстопной версии выполняется правильно. 
     

     
    Помогите разобраться, в чем может быть проблема!? Повторюсь, код в декстопной версии и в мобильной полностью идентичен!!!
     
    Возможно вопрос очень похож на один из уже решенных тут. Но я никак не могу понять, почему код один и тот же, а поведение разное?!
  23. Like
    Brovin Yaroslav отреагировална Andrey Efimov в Как изменить стиль по умолчанию для андроида?   
    Подключать разные стили к вашему проекту можно при помощи TStyleBook.
    Вносить изменения в стиль можно при помощи Bitmap Style Designer или TStyleBook.
    На форуме, в этом же разделе, достаточно тем про это:
    Где взять стандартный стиль в FireMonkey для iOS и Android, используемый по умолчанию? Как поменять цвет выделенного итема в ListBox для андроид стиля?
  24. Like
    Brovin Yaroslav отреагировална Andrey Efimov в TOpenDialog для Android   
    Я вижу только одно решение, создать свой собственный "TOpenDialog". Т.е. будет открываться либо вкладка со списком директорий и файлов, либо всплывающая форма с тем же списком. Сложного в реализации ни чего нет, т.к. в Delphi уже всё готово (System.IOUtils).
  25. Like
    Brovin Yaroslav получил реакцию от Pax Beach в Как сделать автоматическое изменение высоты TListBoxItem под содержимое текста?   
    Ответ косвенно был дан в теме Автоматический переход на вторую строку TLabel
     
    Поэтому на базе этого ответа его легко модифицировать для этой задачи. Идея простая в момент загрузки стиля и изменения размеров TListBoxItem, вычислять высоту занимаемого текста и на основании этих данных переопределять высоту итема.
     
    Практика
    1. Для определения размеров текст используем TTextLayout. Лучше создавать объект этого класса один раз. Поскольку в нашем случае он будет использоваться часто.
    procedure TForm1.FormCreate(Sender: TObject); begin // FTextLyout: TTextLayout - поле формы FTextLyout := TTextLayoutManager.DefaultTextLayout.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin FreeAndNil(FTextLyout); end;  2. Пишем свой обработчик, который мы будем вызывать по достижению двух событий:
    Изменение размера TListBoxItem. В этом случае нужно перевычислить высоту итема. При загрузки нового стиля итема, нам нужно заново вычислить высоту итема. Поскольку стиль может содержать новые настройки отображения текста (шрифт, размер и тд.) Я назвал это событие CalculateItemHeght:
    procedure TForm1.CalculateItemHeight(Sender: TObject); var ListItem: TListBoxItem; begin if Sender is TListBoxItem then begin ListItem := Sender as TListBoxItem; FTextLyout.BeginUpdate; try // Инициализируем текстовый слой для корректного вычисления // размеров отображаемого текста FTextLyout.Text := ListItem.Text; FTextLyout.MaxSize := TPointF.Create(ListItem.Width, 1000); FTextLyout.WordWrap := ListItem.WordWrap; FTextLyout.Font := ListItem.Font; FTextLyout.HorizontalAlign := ListItem.TextAlign; FTextLyout.VerticalAlign := ListItem.VertTextAlign; finally FTextLyout.EndUpdate; end; // Получаем высоту текста при текущих настройках итема ListItem.Height := FTextLyout.Height; end; end; Обратите внимание, что этот код работает для горизонтальной ориентации TListBoxItem и обычного TListBoxItem итема без картинок. Поэтому я для упрощения понимания кода, принимаю за ширину текста ширину самого итема. Но как вы понимаете, текст в итеме имеет еще свои отступы и может располагаться, например, справа от изображения. В этом случае этот в этот код нужно будет добавить определение текущих размеров стилевого объекта текста, отвечающего за вывод текста в TListBoxItem.
     
    Но в вашем примере этого не нужно.
     
    3. Вешаем наш обработчик на два события каждого итема TListBoxItem.OnResize и TListBoxItem.OnApplyStyleLookup.
     
    Результат

     
×
×
  • Создать...