TListViewのカスタム描画で不具合?

解決


のぶ  2020-01-17 11:56:35  No: 148450

下記TListViewのイベントでサブ3列目に画像を表示させるロジックをいれたのですが、
サブ4列目以降のテキスト表示のフォント名およびフォントサイズが
「MSゴシック」、Font.Sizeを12のような表示に変わってしまう現象が起きております。
TListViewのFont.Nameは「メイリオ」、Font.Sizeは9を設定しています。
どなたか原因が分かる方いらっしゃいますでしょうか?

procedure TfrmNotificationCtrl.lstNotificationListCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; var DefaultDraw: Boolean);
var
  R: TRect;
begin
  if SubItem = 3 then begin
    DefaultDraw := False;
    SetBkMode(lstNotificationList.Canvas.Handle, TRANSPARENT);
    ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @R);

    {重要度の表示}
    if TNotification(Item.Data).ImportantFlg then begin
      Sender.Canvas.Draw(R.Left+1, R.Top + ((R.Bottom-R.Top) - imgImportant.Height) div 2, imgImportant.Picture.Bitmap);
    end;

  end;
end;


のぶ  2020-01-17 12:21:34  No: 148451

過去の記事をいろいろと見ていたら、解決方法を見つけて、自己解決しました。

  TfrmNotificationCtrl = class(TForm)
             :
  private
    procedure OnListViewFontChange(Sender: TObject);
             :
  end;
procedure TfrmNotificationCtrl.FormShow(Sender: TObject);
begin
             :
  lstNotificationList.Font.OnChange := OnListViewFontChange;
end;

procedure TfrmNotificationCtrl.OnListViewFontChange(Sender: TObject);
begin
  TFont(Sender).Size := lstNotificationList.Font.Size;
  TFont(Sender).Name := lstNotificationList.Font.Name;
end;

procedure TfrmNotificationCtrl.lstNotificationListCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; var DefaultDraw: Boolean);
var
  R: TRect;
begin
  if SubItem = 3 then begin
    DefaultDraw := False;
    SetBkMode(lstNotificationList.Canvas.Handle, TRANSPARENT);
    ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @R);

    {重要度の表示}
    if TQCNotification(Item.Data).IMPORTANT_FLG.Boolean then begin
      Sender.Canvas.Draw(R.Left+1, R.Top + ((R.Bottom-R.Top) - imgImportant.Height) div 2, imgImportant.Picture.Bitmap);
    end;
  end;

  //追加しました
  Sender.Canvas.Font.OnChange(Sender.Canvas.Font);

end;


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加