Slym

Пользователи
  • Публикаций

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

  • Посещение

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

    5

Slym стал победителем дня 5 февраля

Slym имел наиболее популярный контент!

Информация о Slym

  • Звание
    Пользователь

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Slym

    Как работать с Z-order в Delphi 10.3 RIO

    основное решение: оставить основной поток для gui... все что тормозит основной поток должно из него уйти в доп потоки или таски - и там "зависайте" сколько угодно. асинхронное выполнение с калбеками...
  2. Slym

    Отображение картинок в ListView

    procedure TForm1.LoadImage(const AItem: TListViewItem; const AListItemImage : TListItemImage); Var AAsyncResult : IAsyncResult; begin if Not Assigned(AItem) or Not Assigned(AListItemImage) then exit; if AItem.Data['ImageState'].AsInteger <> ListViewItemImageEmpy then exit; if AItem.Data['ImageURL'].AsString.IsEmpty then exit; AItem.Data['ImageState']:=ListViewItemImageLoading; if not assigned(FHTTPClient) then exit; TMonitor.Enter(listview1); try AItem.TagObject:= FHTTPClient.BeginGet( procedure (const ASyncResult: IAsyncResult) Var AHTTPResponse : IHTTPResponse; begin if assigned(AItem.TagObject) then begin TMonitor.Enter(listview1); try AItem.TagObject:=nil; finally TMonitor.exit(listview1); end; end; if ASyncResult.IsCancelled then exit; AHTTPResponse:=THTTPClient.EndAsyncHTTP(ASyncResult); if AHTTPResponse.StatusCode <> 200 then exit; TThread.Queue(nil, procedure begin if Not Assigned(AItem) or Not Assigned(AListItemImage) then exit; AListItemImage.BeginUpdate; AListItemImage.Bitmap:=TBitmap.Create; AListItemImage.Bitmap.LoadFromStream(AHTTPResponse.ContentStream); AListItemImage.EndUpdate; AItem.Data['ImageState']:=ListViewItemImageLoaded; end); end, AItem.Data['ImageURL'].AsString) as TBaseAsyncResult; finally TMonitor.Exit(listview1); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i:integer; IResult:IAsyncResult; begin TMonitor.Enter(listview1); try for i:=0 to listview1.Items.Count-1 do if assigned(listview1.Items[i].TagObject) then (listview1.Items[i].TagObject as TBaseAsyncResult).Cancel; finally TMonitor.Exit(listview1); end; TMonitor.Enter(listview1); try for i:=0 to listview1.Items.Count-1 do if assigned(listview1.Items[i].TagObject) then begin IResult:=TBaseAsyncResult(listview1.Items[i].TagObject) as IAsyncResult; TMonitor.Exit(listview1); try THTTPClient.EndAsyncHTTP(IResult); except end; TMonitor.Enter(listview1); end; finally TMonitor.Exit(listview1); end; end;
  3. Slym

    Отображение картинок в ListView

    Логика асинхронности принимает на вход анонимную процедуру для обработки результата, анонимная процедура захватывает переменные в зоне своего определения, а там хоть итем, хоть индекс, хоть блэкджек с простихоспаде чем попало...
  4. Slym

    Отображение картинок в ListView

    умрет потому что используется TThread.CreateAnonymousThread, 500 потоков это не шутка... переделать на TTask. TTask плодит ограниченное кол-во потоков. или вовсе отказаться от собственных потоков и отдать на откуп асинхронному запросу THTTPClient 1 экземпляр THTTPClient может одновременно обслуживать несколько асинхронных запросов (4-8) HTTPClient.BeginGet
  5. Slym

    Nox: в приложении произошла ошибка

    nox это x86, а надо Arm
  6. Slym

    Custom Font

    https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/nf-wingdi-addfontresourcea Minimum supported client Windows 2000 Professional [desktop apps only] Minimum supported server Windows 2000 Server [desktop apps only]
  7. Slym

    Custom Font

    AddFontResource
  8. Боролись как-то с артефактами отображения (мы их прозвали "крокодилами" из-за сходства на первом скриншоте с этим багом)... Могли отображаться также левые спрайты, или обрезки скролившихся контролов... Коллега выяснил что не надо трогать Form.Fill, из-за переключения в недрах FMX нативной и не нативной канвы: если нужен фон - брось Rect по контенту и в нем делай заливку...
  9. 1. для упрощения кода работы с JSON давно можно использовать сложные пути ABase64:=JSON.GetValue<string>('body.nextStep.pdf'); 2. ну нельзя так: AStreamSource.WriteBuffer(Pointer(ABase64)^, Length(ABase64) * 2); так безопасней AStreamSource:=TBytesStream.Create(TEncoding.UTF8.GetBytes(ABase64)); 3. И сохранять лучше сразу в TFileStream - меньше расход памяти 4. не забываем finally Free (их выше нету)... хоть оно и может AUTOREFCOUNT (а может и нет!), но правила хорошего тона никто не отменял
  10. FStylesData в strict private - имхо никак не клонировать
  11. Проблема в том что есть 2 TScrollContent, один в FMX.Layouts, другой в FMX.ScrollBox... поскольку пользуете TPresentedScrollBox, то разворачивайте неймспейс вручную и пишите if (Parent is FMX.ScrollBox.TScrollContent) then
  12. я на подсознательном уровне понимаю что анимашки вшитые в TButtonStyleTextObject - в моем проекте это лишний CPU и mem... но все встроенные стили активно ими пользуются... и трудно мотивировать что "не как у всех" будет быстрее... тут мне говорили что вырезать из TBitmapLinks чуть ли не быстрее чем менять Fill.Color в ColorAnimation - но я то не дурак, чтоб на слово верить, да и чушь это полная чтоб Bitmap выиграл у Fill.Color попробую тест накидать...
  13. Мда... один я беспокоюсь за производительность кода... еще вброс: то быстрее и менее накладно по ресурсам на мобильной платформе (при условии статичности цвета шрифта, все цвета одинаковы, и без использования Shadow): TButtonStyleTextObject или TLabel / TText
  14. Как реализовать "притягивание" скрола, т.е. скрол останавливается не где угодно, а в определенных местах, например по середине контрола находящегося в середине скрола по типу TScrollBox в стиле 'барабана' из iOS Другими словами чтоб контрол центрировался. Как то добавлять нужный Target в AniCalculations.OnStart или как то дотягивать в AniCalculations.OnStop?