-
Постов
2 517 -
Зарегистрирован
-
Посещение
-
Победитель дней
264
Активность репутации
-
Равиль Зарипов (ZuBy) отреагировална Error в [Статья] VCL, избавляемся от мерцания, раз и навсегда
Ссылка: https://habrahabr.ru/post/318876/
Автор: Error
Описание:
Delphi и C++Builder разработчики, использующие VCL не по наслышке знают о вездесущей проблеме мерцания контролов.
Мерцание происходит при перерисовке, вследствие того, что сначала отрисовываеться фон компонента, и только потом сам компонент.
И если в случае с наследниками от TWinControl частичным решением проблемы является установка свойства DoubleBuffered в True, что заставляет контрол отрисовываться в буфере(однако DoubleBuffered работает тоже не идеально, к прим.: контрол перестает быть прозрачным), то в случае с TGraphicControl решение с DoubleBuffered просто невозможно, из-за отсутствия у TGraphicControl окна, установка же DoubleBuffered в True у родителя не помогает, из-за того что отрисовка вложенных TGraphicControl-ов происходит уже после прорисовки родителя в буфере.
Обычно остается только одно — смириться с мерцанием, и максимально упростить отрисовку для минимизации эффекта, или использовать по возможности исключительно TWinControl-ы, что не всегда возможно и удобно.
Однажды намучившись с мерцанием, я не выдержал и решил решить эту проблему, раз и навсегда!
...
-
Равиль Зарипов (ZuBy) получил реакцию от Rusland в Определить тип устройства
// uses FMX.Platform, FMX.PhoneDialer function DialerSupport: boolean; var FPhoneDialerService: IFMXPhoneDialerService; begin Result := false; if TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, FPhoneDialerService) then Result := true; end;
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в Насколько хорош FMX для iOS?
вот вы часто используете нативные контролы и какие? браузер и карты не считаем, они кросс
опять же повторюсь, что у айос почти нет фрагментации по сравнению с андроид
про какие костыли вы говорите?
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в В чем смысл компонента TMultiView?
это кроссплатформенный компонент позволяющий без гемора делать "меню" на разных платформах.
достаточно выставить Mode = PlatformBehaviour и запустить на разных платформах
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в Поиск сервера
даже в теории сервер на мобиле не должен быть)
может кто пользуется (я нет) оф. приложение фейсбука и есть сервер.
в теории: 3rd party приложения общаются не с сервером (api facebook.com), а приложением установленным в телефоне через SDK.
что в реале: батарейка улетает в 0, дробление единого сервиса на несколько приложении (имхо)
-
Равиль Зарипов (ZuBy) получил реакцию от krapotkin в Насколько хорош FMX для iOS?
т.к. фрагментация у IOS небольшая в отличии от Android можно по ошибке сказать что там приложения работают лучше.
если выбрать десять девайсов на андроиде с нормальными характеристиками (процом!), то приложения будут работать +/- одинаково
ну и зависит еще от используемых технологии и компонентов. из-за неправильной архитектуры приложения, создаются костыли и темы на форуме)
-
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Описание TfgImageList
Первый набросок компонента, позволяющего организовать централизованное хранение графических ресурсов для всех платформ.
Основные особенности:
Спроектирован для использования одного экземпляра изображения во многих компонентах. Позволяет хранить все графические ресурсы любых размеров. В будущем не будет грузить картинки в память, если они не используются. А будет подгружать их из файла по мере необходимости. Тем самым будет значительно экономиться память. Хранение именованных графических ресурсов, а не по индексу. Это позволяет отразить в названии назначение картинки. Использование папок. Группировка изображений по смыслу для удобства работы с ними. Возможность загрузки разных картинок для разных устройств, или же загрузить один набор картинок для всех устройств. Удобная и быстрая загрузка изображений путем перетаскивания Хранение отступов изображения. Наглядное отображение картинки в свойствах компонентах. При изменении имени картинки, в компонентах используемых картинку идет автоматическое обновление имени картинки. В стандартном TImageList, из-за индексной структуру все картинки съезжают и при удалении картинки, компонент начинает отображать уже другую картинку.
-
Равиль Зарипов (ZuBy) отреагировална Brovin Yaroslav в Описание TfgRegularPolygon
Описание
Назначение: Компонент предназначен для отображения правильного многоугольника. Поддерживаемые платформы: Windows, OSX, iOS, Android Демо проект: Samples\RegularPolygonDemo\RegularPolygonDemo.dproj Возможности
Округление к физическим пикселям - TfgRegularPolygon.AlignToPixels Количество сторон - TfgRegularPolygon.SidesCount Настройка цвета границы - TfgRegularPolygon.Stroke Настройка заливки - TfgRegularPolygon.Fill
-
Равиль Зарипов (ZuBy) отреагировална AngryOwl в Мультиязычность в приложении
Я вот тут (с примерами) тоже предлагал свое "видение" этого вопроса.
-
Равиль Зарипов (ZuBy) отреагировална 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
-
Равиль Зарипов (ZuBy) получил реакцию от Rusland в [ListBox] загрузка картинок
@AlexG я проверил то что вы описали. в принципе работает, но для статики
почему не работает для динамической подгрузке, точней не совсем работает.
порядок действий
1) получаю с сервера список картинок
2) заполняю текстом Item'ы
3) присваиваю событие OnApplyStyleLookup для Item'а
4) в событии ItemApplyStyleLookup пишу следующее
procedure TForm13.ItemApplyStyleLookup(Sender: TObject); begin LoadBitmapFromURL((Sender as TListBoxItem).TagString, (Sender as TListBoxItem).ItemData.Bitmap); end; как видим на картинках несколько айтемов не обновились, т.к. они не могут выйти за пределы области (чтобы обнулить стиль и вызвать событие OnApplyStyleLookup)
и при таком подходе все время картинка будет скачиваться из интернета, что не есть хорошо
UPDATE: добавил проект
LB_dload.zip
-
Равиль Зарипов (ZuBy) получил реакцию от Алмаз Амангельды в VK API и Delphi
У меня на гите есть пример TRestLight и здесь на форуме тоже, через TRestClient, воспользуйтесь поиском
-
Равиль Зарипов (ZuBy) получил реакцию от Steepe_Hare в TRESTLight - облегченная версия
да, это от IE, кастомизировать нельзя его и не нужно, даже если возможно. Иначе будет недоверие пользователей к стандартному способу авторизации через OAuth
-
Равиль Зарипов (ZuBy) получил реакцию от Steepe_Hare в TRESTLight - облегченная версия
это версия ВК апи, поменяете если какой-то метод просит более новую версию
-
Равиль Зарипов (ZuBy) получил реакцию от Steepe_Hare в TRESTLight - облегченная версия
думаю можно.
при получении токена там еще отдается время до которого будет валиден токен.
пока этот токен валиден, его можно указывать в апи, как только время прошло нужно снова запросить
-
Равиль Зарипов (ZuBy) получил реакцию от Steepe_Hare в TRESTLight - облегченная версия
Доброго времени суток!
Навеяно этой темой.
Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
Решил собрать аналогичный пример, только не использовать TREST***
немного опишу, свою реализацию
uAppSettings.pas - хранит описание вашего приложения созданного в ВК FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
GitHub TRESTLight.zip
-
Равиль Зарипов (ZuBy) получил реакцию от AngryOwl в VK API и Delphi
У меня на гите есть пример TRestLight и здесь на форуме тоже, через TRestClient, воспользуйтесь поиском
-
Равиль Зарипов (ZuBy) отреагировална AngryOwl в С Наступающим Новым Годом!
Присоединяюсь!
Желаю всем здоровья, благополучия и успехов в работе и личной жизни!
С наступающим Новым Годом!
-
Равиль Зарипов (ZuBy) отреагировална krapotkin в [ListBox] загрузка картинок
думаю, листбокс не мертв, просто он предназначен для максимум - менюшку нарисовать
-
Равиль Зарипов (ZuBy) получил реакцию от egorea1999 в [ListBox] загрузка картинок
@AlexG я проверил то что вы описали. в принципе работает, но для статики
почему не работает для динамической подгрузке, точней не совсем работает.
порядок действий
1) получаю с сервера список картинок
2) заполняю текстом Item'ы
3) присваиваю событие OnApplyStyleLookup для Item'а
4) в событии ItemApplyStyleLookup пишу следующее
procedure TForm13.ItemApplyStyleLookup(Sender: TObject); begin LoadBitmapFromURL((Sender as TListBoxItem).TagString, (Sender as TListBoxItem).ItemData.Bitmap); end; как видим на картинках несколько айтемов не обновились, т.к. они не могут выйти за пределы области (чтобы обнулить стиль и вызвать событие OnApplyStyleLookup)
и при таком подходе все время картинка будет скачиваться из интернета, что не есть хорошо
UPDATE: добавил проект
LB_dload.zip
-
Равиль Зарипов (ZuBy) получил реакцию от Kitty в [ListBox] загрузка картинок
@AlexG я проверил то что вы описали. в принципе работает, но для статики
почему не работает для динамической подгрузке, точней не совсем работает.
порядок действий
1) получаю с сервера список картинок
2) заполняю текстом Item'ы
3) присваиваю событие OnApplyStyleLookup для Item'а
4) в событии ItemApplyStyleLookup пишу следующее
procedure TForm13.ItemApplyStyleLookup(Sender: TObject); begin LoadBitmapFromURL((Sender as TListBoxItem).TagString, (Sender as TListBoxItem).ItemData.Bitmap); end; как видим на картинках несколько айтемов не обновились, т.к. они не могут выйти за пределы области (чтобы обнулить стиль и вызвать событие OnApplyStyleLookup)
и при таком подходе все время картинка будет скачиваться из интернета, что не есть хорошо
UPDATE: добавил проект
LB_dload.zip
-
Равиль Зарипов (ZuBy) отреагировална #WAMACO в С Наступающим Новым Годом!
С Новым годом! Удачи, здоровья, всех благ!
-
Равиль Зарипов (ZuBy) отреагировална Kitty в С Наступающим Новым Годом!
Шарик ветром развернуло.
С Новым Годом!
-
-
Равиль Зарипов (ZuBy) отреагировална Andrey Efimov в С Наступающим Новым Годом!
Уважаемые форумчане!
Поздравляю Вас с Наступающим Новым Годом и Рождеством!
Пусть 2017 год станет новым этапом на Вашем пути и принесет успех, самореализацию и, конечно же, счастье.