Рисование текста Юникода на холсте списка слишком медленное

Я пытаюсь отобразить новости из RSS в списке, используя следующий формат, как показано на рисунке ниже. Приложение на скриншоте было разработано в Firemonkey с помощью стилизации списка. Мне нужно отобразить то же самое в моем приложении VCL.

Требования этого макета:

Название новости должно быть выделено жирным шрифтомКраткое описание должно быть расположено внизу, и оно должно быть обернуто, если оно не помещается в одну строку (как показано на рисунке); стиль шрифта должен быть нормальнымТам должно быть изображение для каждой новости

Мой код до сих пор:

procedure TfrmDatePicker.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
  R: TRect;
begin
  ListBox1.Canvas.Font.Color := clBlack;
  ListBox1.Canvas.Font.Style := [fsBold];

  ListBox1.Canvas.Font.Size := 9;

  if Odd(Index) then ListBox1.Canvas.Brush.Color := clWhite
  else ListBox1.Canvas.Brush.Color := clBtnFace;

  ListBox1.Canvas.FillRect (Rect);
  ListBox1.Canvas.Pen.Color := clHighlight;

  if(odSelected in State) then
  begin
      ListBox1.Canvas.Font.Color := clHighlightText;
      ListBox1.Canvas.Brush.Color := clHighlight;
      ListBox1.Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
      if(odFocused in State) then DrawFocusRect(ListBox1.Canvas.Handle, Rect);
  end;

  ImageList1.Draw(ListBox1.Canvas, Rect.Left + 2,
          Rect.top + (ListBox1.ItemHeight - ImageList1.Height) div 2, Index, true);


  ListBox1.Canvas.TextOut(Rect.Left + 70, Rect.Top + 4, 'कान्तिपुर समाचारआजकोपत्रिकामाकेहिछैन');

  ListBox1.Canvas.Font.Style := ListBox1.Canvas.Font.Style - [fsBold];

  R := Rect;
  R.Left := R.Left + 70;
  R.Top := R.Top + 32;
  R.Height := 30;

  DrawText(ListBox1.Canvas.Handle, PChar(ss), Length(ss), R, DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);
  ListBox1.Canvas.TextOut(Rect.Right - 80, Rect.top + 4, '5 mins ago');
end;

Вот результат, который я получаю:

проблема

Рисование текста в Юникоде происходит слишком медленно и слишком сильно мигает при прокрутке списка или изменении размера формы.

Заметка

Шрифт был установлен на@Microsoft NeoGothicВысота элемента = 70; style = ownerdrawfixedНет проблем с отображением того же текста Unicode в приложении Firemonkey, размещенном на первом скриншоте.Приведенный выше код работает довольно хорошо для обычного английского текста и не мерцает вообще. Проблема существует только для текста Unicode.

Обновить: Кажется, проблема вDT_WORDBREAK флагDrawText метод. Всякий раз, когда я удаляю этот флаг, происходит значительное улучшение рисования текста, хотя мерцания видны.

Образец текста Unicoide

तिम्रो त्यो बोलि ले मलाई मिठो तिम्रो त्यो मलाई मलाई मलाई मलाई ह्स्द्जिः ह्स्द्जिः स हस हस हस हस स्द्फ़ स्द्फ्ग फस ग्दस्फ्ग बोलि बोलि बोलि ले सफग द्स्फग्द

Ответы на вопрос(1)

Ваш ответ на вопрос