下記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;
過去の記事をいろいろと見ていたら、解決方法を見つけて、自己解決しました。
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;