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

AngryOwl

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

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

  • Посещение

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

    45

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

  1. Like
    AngryOwl отреагировална rakhmet в Определение кнопок   
    Решил так:
    procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if Key = vkMenu then ... end;  
  2. Like
    AngryOwl отреагировална Error в Перспективы RAD   
    Мое решение, все тоже - жду год, смотрю что происходит. Сейчас я стараюсь "доводить" свои наработки в OpenSource и выкладывать в бесплатном или нет варианте, делиться опытом, который есть в виде статей и заметок, чтобы оно не сгинуло если что...
  3. Like
    AngryOwl отреагировална Brovin Yaroslav в Перспективы RAD   
    Читать интересно
    Наверное вернулся только при том, что я действительно буду понимать, что компания выбрала правильный путь развития и очень сильно заинтересована в этом
  4. Like
    AngryOwl получил реакцию от Ingalime в [ListBox] загрузка картинок   
    1. Создайте свой стиль для ListBoxItem, например 'listboxitemMystyle', скопировав стандартный и переобозвав его. В своем стиле Итемов просто сделайте невидимым Detail. Или, что еще лучше, - храните Ваши ссылки в TagString Итема.
    2. В Style Designer, при редактировании Вашего listboxitemMystyle, вставьте TImage задайте ему необходимые свойства: выравнивание, размеры, отступы и т.д. (не забудьте сделать "растягивание" или что там Вам требуется - просто проверьте в дизайнере). И задайте Вашему TImage имя, например, 'myimagestyle'.
    3. При загрузке изображения я бы рекомендовал сначала загрузить изображение в созданный TBitmap, а потом уже грузить его в наш 'myimagestyle'. А самое оптимальное решение - загрузка изображений в "контейнер", в фоновом режиме, а при окончании загрузки, по событию, - отрисовка уже в самом итеме. В любом случае - сначала в битмап, а потом этот битмап в Итем. Иначе, вероятность того что битмап отрисуется в вашем случае - практически нулевая.
    4. Далее, при создании итемов:
    procedure ContactList_AddItem(Sender: TObject); var newItem : TListBoxItem; newBitmap : TBitmap; begin newItem := TListBoxItem.Create(nil); newItem.StyleLooup := 'listboxitemMystyle'; // хотя будет проще не писать этого, а прописать в ListBox1.DefaultItemStyles.ItemStyle newItem.Text := 'текст'; newItem.TagString := тут может быть Ваша ссылка newBitmap := TBitmap.Create; newBitmap.LoadFrom ....... // грузим картинку newItem.TagObject := newBitmap; newItem.OnApplyStyleLookup := MyItemApplyStyle; ListBox1.AddObject(newItem); end; procedure MyItemApplyStyle(Sender: TObject); var LI : TListBoxItem; tmpBitmap : TBitmap; begin LI := Sender as TListBoxItem; if Assigned(LI) then try LI.BeginUpdate; tmpBitmap := LI.TagObject as TBitmap; if Assigned(tmpBitmap) then LI.StylesData['myimagestyle.bitmap'] := tmpBitmap; // тут вообще можно обновлять все что угодно в этом Итеме finally LI.EndUpdate; end; end; Собственно все.
    Сорри если что не понятно -  писал "от руки", без проверки. Но вроде все просто.
  5. Like
    AngryOwl отреагировална Error в [Статья] VCL, избавляемся от мерцания, раз и навсегда   
    Ссылка: https://habrahabr.ru/post/318876/
    Автор: Error
    Описание:
    Delphi и C++Builder разработчики, использующие VCL не по наслышке знают о вездесущей проблеме мерцания контролов.
    Мерцание происходит при перерисовке, вследствие того, что сначала отрисовываеться фон компонента, и только потом сам компонент.
    И если в случае с наследниками от TWinControl частичным решением проблемы является установка свойства DoubleBuffered в True, что заставляет контрол отрисовываться в буфере(однако DoubleBuffered работает тоже не идеально, к прим.: контрол перестает быть прозрачным), то в случае с TGraphicControl решение с DoubleBuffered просто невозможно, из-за отсутствия у TGraphicControl окна, установка же DoubleBuffered в True у родителя не помогает, из-за того что отрисовка вложенных TGraphicControl-ов происходит уже после прорисовки родителя в буфере.
    Обычно остается только одно — смириться с мерцанием, и максимально упростить отрисовку для минимизации эффекта, или использовать по возможности исключительно TWinControl-ы, что не всегда возможно и удобно.
    Однажды намучившись с мерцанием, я не выдержал и решил решить эту проблему, раз и навсегда!
    ...
  6. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в Мультиязычность в приложении   
    Я вот тут (с примерами) тоже предлагал свое "видение" этого вопроса.
  7. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgRegularPolygon   
    Описание
    Назначение: Компонент предназначен для отображения правильного многоугольника.  Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\RegularPolygonDemo\RegularPolygonDemo.dproj Возможности
    Округление к физическим пикселям - TfgRegularPolygon.AlignToPixels Количество сторон - TfgRegularPolygon.SidesCount Настройка цвета границы - TfgRegularPolygon.Stroke Настройка заливки - TfgRegularPolygon.Fill
  8. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgRatingBar   
    Описание
    Назначение: Компонент предназначен для отображения и ввода голоса. Поддерживает стилизацию.  Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\RatingBarDemo\RatingBarDemo.dproj  
    Возможности
    Стилизация через указание двух картинок отображающих голос и пустой голос Общее количество "звезд" - TfgRatingBar.TotalCount Текущее значение голоса - TfgRatingBar.Rating Возможность указывать дробное значение голоса Возможность указать шаг изменения голоса TfgRatingBar.StepSize Поддержка Tint эффекта - TfgRatingBar.TintColor Автоматический размер - TfgRatingBar.AutoSize Режим только отображения - TfgRatingBar.ReadOnly Событие окончательного изменения рейтинга (отжатие пальца от экрана или кнопки мышки) - TfgRatingBar.OnChange Событие в процессе изменения рейтинга - TfgRatingBar.OnChanging
     
  9. Like
    AngryOwl получил реакцию от Rusland в Мультиязычность в приложении   
    Я вот тут (с примерами) тоже предлагал свое "видение" этого вопроса.
  10. Like
    AngryOwl получил реакцию от Steepe_Hare в Мультиязычность в андроиде   
    [janovskis] "а если текст состоит из нескольких кусков каждый из которых должен бытъ переведен отдельно?"
    ну так просто создайте в файлах перевода строки (типа):
    в lang.ru
    1000=Страна:
    1001=Россия
    1002=Англия
    в lang.en
    1000=Country:
    1001=Russia
    1002=England
    а в программе пишите (допустим компонент на который надо вывести надпись label1 = TLabel):
    label1 := Format('%s %s', [GetValue(1000, 'Страна:'), GetValue(1001, 'Россия')]); // ну или другой код страны ...
    // ну можно чуть проще)) label1 := Format('%s %s', [GetValue(1000), GetValue(1001)]);
    и все...
    З.Ы. и никакой "четкой привязки"... любые тексты, выводить можно куда угодно и как угодно...
  11. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgRectangle   
    Описание
    Назначение: Компонент предназначен для отображения прямоугольника. Главное отличие от стандартного TRectangle - это возможность округления позиции и размера прямоугольника для избежания размытия границ. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\ShapesDemo\ShapesDemo.dproj Возможности
    Одной из проблем графических примитивов в FMX - это размытие границ, вызванное отсутствием привязки изображения к физическим пикселям экрана. Поэтому любое смещении координат прямоугольника на дробную часть приводит к размытию границы. Это хорошо видно на скриншоте ниже (Граница самого нижнего прямоугольника размыта, по сравнению с прямоугольниками выше)
     
    Округление к физическим пикселям - TfgRectnalge.AlignToPixels Настройка отображения углов - TfgRectangle.Corners Настройка закругления внешних углов - Corners.RadiusX, Corners.RadiusY Настройка способа вывода угла - Corners.CornerType Указание какие углы выводить - Corners.Corners Настройка цвета границы - TfgRectangle.Stroke Настройка заливки - TfgRectangle.Fill
     
  12. Like
    AngryOwl отреагировална Brovin Yaroslav в Описание TfgImageList   
    Первый набросок компонента, позволяющего организовать централизованное хранение графических ресурсов для всех платформ.
    Основные особенности:
    Спроектирован для использования одного экземпляра изображения во многих компонентах. Позволяет хранить все графические ресурсы любых размеров. В будущем не будет грузить картинки в память, если они не используются. А будет подгружать их из файла по мере необходимости. Тем самым будет значительно экономиться память. Хранение именованных графических ресурсов, а не по индексу. Это позволяет отразить в названии назначение картинки. Использование папок. Группировка изображений по смыслу для удобства работы с ними. Возможность загрузки разных картинок для разных устройств, или же загрузить один набор картинок для всех устройств. Удобная и быстрая загрузка изображений путем перетаскивания Хранение отступов изображения.  Наглядное отображение картинки в свойствах компонентах. При изменении имени картинки, в компонентах используемых картинку идет автоматическое обновление имени картинки. В стандартном TImageList, из-за индексной структуру все картинки съезжают и при удалении картинки, компонент начинает отображать уже другую картинку.


  13. Like
    AngryOwl получил реакцию от egorea1999 в [ListBox] загрузка картинок   
    1. Создайте свой стиль для ListBoxItem, например 'listboxitemMystyle', скопировав стандартный и переобозвав его. В своем стиле Итемов просто сделайте невидимым Detail. Или, что еще лучше, - храните Ваши ссылки в TagString Итема.
    2. В Style Designer, при редактировании Вашего listboxitemMystyle, вставьте TImage задайте ему необходимые свойства: выравнивание, размеры, отступы и т.д. (не забудьте сделать "растягивание" или что там Вам требуется - просто проверьте в дизайнере). И задайте Вашему TImage имя, например, 'myimagestyle'.
    3. При загрузке изображения я бы рекомендовал сначала загрузить изображение в созданный TBitmap, а потом уже грузить его в наш 'myimagestyle'. А самое оптимальное решение - загрузка изображений в "контейнер", в фоновом режиме, а при окончании загрузки, по событию, - отрисовка уже в самом итеме. В любом случае - сначала в битмап, а потом этот битмап в Итем. Иначе, вероятность того что битмап отрисуется в вашем случае - практически нулевая.
    4. Далее, при создании итемов:
    procedure ContactList_AddItem(Sender: TObject); var newItem : TListBoxItem; newBitmap : TBitmap; begin newItem := TListBoxItem.Create(nil); newItem.StyleLooup := 'listboxitemMystyle'; // хотя будет проще не писать этого, а прописать в ListBox1.DefaultItemStyles.ItemStyle newItem.Text := 'текст'; newItem.TagString := тут может быть Ваша ссылка newBitmap := TBitmap.Create; newBitmap.LoadFrom ....... // грузим картинку newItem.TagObject := newBitmap; newItem.OnApplyStyleLookup := MyItemApplyStyle; ListBox1.AddObject(newItem); end; procedure MyItemApplyStyle(Sender: TObject); var LI : TListBoxItem; tmpBitmap : TBitmap; begin LI := Sender as TListBoxItem; if Assigned(LI) then try LI.BeginUpdate; tmpBitmap := LI.TagObject as TBitmap; if Assigned(tmpBitmap) then LI.StylesData['myimagestyle.bitmap'] := tmpBitmap; // тут вообще можно обновлять все что угодно в этом Итеме finally LI.EndUpdate; end; end; Собственно все.
    Сорри если что не понятно -  писал "от руки", без проверки. Но вроде все просто.
  14. Like
    AngryOwl получил реакцию от Kitty в [ListBox] загрузка картинок   
    1. Создайте свой стиль для ListBoxItem, например 'listboxitemMystyle', скопировав стандартный и переобозвав его. В своем стиле Итемов просто сделайте невидимым Detail. Или, что еще лучше, - храните Ваши ссылки в TagString Итема.
    2. В Style Designer, при редактировании Вашего listboxitemMystyle, вставьте TImage задайте ему необходимые свойства: выравнивание, размеры, отступы и т.д. (не забудьте сделать "растягивание" или что там Вам требуется - просто проверьте в дизайнере). И задайте Вашему TImage имя, например, 'myimagestyle'.
    3. При загрузке изображения я бы рекомендовал сначала загрузить изображение в созданный TBitmap, а потом уже грузить его в наш 'myimagestyle'. А самое оптимальное решение - загрузка изображений в "контейнер", в фоновом режиме, а при окончании загрузки, по событию, - отрисовка уже в самом итеме. В любом случае - сначала в битмап, а потом этот битмап в Итем. Иначе, вероятность того что битмап отрисуется в вашем случае - практически нулевая.
    4. Далее, при создании итемов:
    procedure ContactList_AddItem(Sender: TObject); var newItem : TListBoxItem; newBitmap : TBitmap; begin newItem := TListBoxItem.Create(nil); newItem.StyleLooup := 'listboxitemMystyle'; // хотя будет проще не писать этого, а прописать в ListBox1.DefaultItemStyles.ItemStyle newItem.Text := 'текст'; newItem.TagString := тут может быть Ваша ссылка newBitmap := TBitmap.Create; newBitmap.LoadFrom ....... // грузим картинку newItem.TagObject := newBitmap; newItem.OnApplyStyleLookup := MyItemApplyStyle; ListBox1.AddObject(newItem); end; procedure MyItemApplyStyle(Sender: TObject); var LI : TListBoxItem; tmpBitmap : TBitmap; begin LI := Sender as TListBoxItem; if Assigned(LI) then try LI.BeginUpdate; tmpBitmap := LI.TagObject as TBitmap; if Assigned(tmpBitmap) then LI.StylesData['myimagestyle.bitmap'] := tmpBitmap; // тут вообще можно обновлять все что угодно в этом Итеме finally LI.EndUpdate; end; end; Собственно все.
    Сорри если что не понятно -  писал "от руки", без проверки. Но вроде все просто.
  15. Like
    AngryOwl получил реакцию от Rusland в С Наступающим Новым Годом!   
    Присоединяюсь!
    Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
    С наступающим Новым Годом!
  16. Like
    AngryOwl получил реакцию от Rusland в [ListBox] загрузка картинок   
    Я [ZuBy] уважаю! Но не слушайте его, в данном случае! ))))
    Я с ним не согласен. Точнее - не совсем.
    У TListBox есть ряд свои преимуществ! Причем, зачастую, довольно существенных. Которые никакие TListView не перекрывают. По крайне мере пока.
    Во-первых - если речь идет о Винде, то это возможность плавного скроллинга. Чего нет у TListView. Не знаю кому как из разрабов, а рядового пользователя это часто бесит - прокрутка "рывками".
    Во-вторых - TListBox и его TListBoxItem'ы все же намного проще "рисовать". В смысле - создание своего шаблона пока еще намного проще чем у TListView. Вы можете для TListBox очень просто создавать свои элементы списка.
    Несмотря на то, что TListBox существенно "тормознее" TListView, часто его скорости вполне достаточно.
    Все, разумеется, зависит от Ваших конечных целей.
    А что касается картинок в Итемах TListBox, то нужно просто переопределить ApplyStyle.
    Создайте свою процедуру, например ItemApplyStyle;
    Присвойте, при создании Итема, свой обработчик. Например
    newItem.OnApplyStyleLookup := ItemApplyStyle;
    А в ItemApplyStyle сделайте обновление картинки. Типа так:
    procedure TContactActions.ItemApplyStyle(Sender: TObject); var StyleObject: TFmxObject; lbx : TListBox; LI : TListBoxItem; begin LI := Sender as TListBoxItem; LI.BeginUpdate; try StyleObject := LI.FindStyleResource('picture') as TCircle; if Assigned(StyleObject) then begin TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.BeginScene(); try TCircle(StyleObject).Fill.Bitmap.Bitmap := ____тут_ваш_битмап__; finally TCircle(StyleObject).Fill.Bitmap.Bitmap.Canvas.EndScene; end; end; finally LI.EndUpdate; end; end; Разумеется, все проверки и прочее - это уж Вы сами. И в моем примере это TCircle, а у Вас что - сами решите.
    Ну и можно для краткости (если там просто TImage) не писать все через StyleObject, а покороче, через StylesData['_имя_.bitmap'] и т.д.
    Ну и что на Delphi - не обессудьте! ) Смысл тут простой.
    Думаю, что в целом идея ясна.
  17. Like
    AngryOwl получил реакцию от Kitty в [ListBox] загрузка картинок   
    Под Андроид, все зависит от того - какая именно задача стоит? Цели этого "списка". Исходя из моего опыта, в некоторых случаях не обойтись без TListView (это не значит, что нельзя TListBox, просто у него ряд своих ограничений, и не только по скорости. Например - не очень "адекватная" работа с Touch. В смысле - прокрутка пальцем списка у TListBox не очень оптимизирована...)
    Поэтому - если Ваш список имеет не сложные элементы - я бы порекомендовал бы, наверное, переделать его на TListView. Покажите, или более подробно объясните - какие вообще элементы в каждом Итеме? Какие события обрабатываются? Прокрутка, нажатия, и т.д. В каждом Итеме картинки в каком виде? Их размер и положение? Они прямоугольные? И т.д.
    Чем больше деталей Вы предоставите - тем что-то более конкретное можно советовать в Вашем случае. Или даже помочь с кодом (в смысле - с примером реализации).
    Списки контактов в своей программе я делал - для Винды и Мака - TListBox, а для Андроида - TListView. И разница в коде - была всего в 4 десятка строк в общей сложности.
    Повторюсь - у каждого из этих компонентов есть свои преимущества и свои недостатки. Например: TListView - скорость работы, TListBox - более "гибкий" в плане создания любого Итема.
  18. Like
    AngryOwl получил реакцию от zairkz в С Наступающим Новым Годом!   
    Присоединяюсь!
    Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
    С наступающим Новым Годом!
  19. Like
    AngryOwl отреагировална krapotkin в Кодировка строки. Delphi -> PHP Передача строки-кириллицы через IdHTTP1.Get   
    предполагаю, что строка из делфи уходит в юникоде. хотя за инди не скажу точно. используйте THttpClient для определенности
    так что все преобразования - на стороне сервера
  20. Like
    AngryOwl отреагировална Равиль Зарипов (ZuBy) в VK API и Delphi   
    У меня на гите есть пример TRestLight и здесь на форуме тоже, через TRestClient, воспользуйтесь поиском
  21. Like
    AngryOwl получил реакцию от Равиль Зарипов (ZuBy) в С Наступающим Новым Годом!   
    Присоединяюсь!
    Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
    С наступающим Новым Годом!
  22. Like
    AngryOwl получил реакцию от Kitty в [ListBox] загрузка картинок   
    Да еклмн - да хоть 100 элементов, хоть 500 - каждый со своей картинкой! Пишите аккуратно и грамотно - и "да прибудет с Вами "сила" (с)
    Ничего не тормозит, не глючит, все рисуется замечательно (что касается TListBox)!
    Я уже показывал пример. там речь не об этом, но везде TListBox - и в списке контактов и в сообщениях. Потому-что они намнооооого сложнее того (те итемы, с которыми я работаю), что видно. И их реализация на TListView возможна, но она сложнее на порядок.
    И еще момент! Скажите - как у Вас называется (в стиле) тот элемент в TListBoxItem, в котором содержится картинка? Не Icon ли случаем? Не помню точно какое название там по умолчанию, а смотреть сейчас лень, но сделайте свое наименование этого TImage, например 'myiconstyle' или еще как, и обновляйте через свой обработчик OnApplyStyleLookup.
    З.Ы. И я так понимаю - Вы делаете приложение именно под Win?
    З.З.Ы. И ничего переделывать не надо. Просто дайте скрин, или фрагмент скрина вашего приложения, если такое возможно. Визуально увидеть "проблему" - многого стоит. А если сделаете видео - совсем будет ясно. Хотя я и так понимаю - в чем у Вас проблема. И предложенное мной решение - работает.
    Не знаю - что там говорил Ярослав, но применение OnApplyStyleLookup - очень простое! Куда проще-то?
  23. Like
    AngryOwl получил реакцию от Kitty в [ListBox] загрузка картинок   
    Битмап нужно где-то хранить.
    При вызове OnApplyStyleLookup просто обновляйте его. Как в моем примере. Только в Вашем случае это будет TImage (как понимаю).
    var StyleObject: TFmxObject; ........ StyleObject := FindStyleResource('picturechat') as TImage; if Assigned(StyleObject) then try TImage(StyleObject).Visible := // TRUE/FALSE TImage(StyleObject).OnClick := // Ваш обработчик, если надо if not MBitmap.IsEmpty then try if not GlobalUseGPUCanvas then TImage(StyleObject).Bitmap.Canvas.BeginScene; TImage(StyleObject).Bitmap := MBitmap; // ваш битмап finally if not GlobalUseGPUCanvas then TImage(StyleObject).Bitmap.Canvas.EndScene; end; finally end; типа того.
    'picturechat' - ваша картинка в стиле Итема
    а хранить изображения можно как контейнерах, так и читать из файлов (все достаточно быстро по скорости!)
    а вот с подгрузкой из инета - не знаю - Вам самим решать. Оптимально, думаю, загружать в контейнер, предварительно изменив размер до минимально необходимого.
    P.S. Забыл про StylesData
    можно так:
    вместо всего что написано выше, записать просто
    StylesData['picturechat.bitmap'] := MBitmap;  
  24. Like
    AngryOwl получил реакцию от Kitty в С Наступающим Новым Годом!   
    Присоединяюсь!
    Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
    С наступающим Новым Годом!
  25. Like
    AngryOwl получил реакцию от Andrey Efimov в С Наступающим Новым Годом!   
    Присоединяюсь!
    Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
    С наступающим Новым Годом!
×
×
  • Создать...