TListViewでカスタム描画イベントを使用するとコードの書き方によっては項目の文字が妙にでかくなるバグがあります。フォームにリストビューを貼りつけて下記の二つのイベントをそれぞれセットしてプログラムを実行してみてください。文字がでかくなると思います。
procedure TForm1.FormCreate(Sender: TObject);
//FormのOnCreateイベント
var
I: Integer;
begin
//項目を作成する
with ListView1.Items do
for I := 1 to 100 do
Add.Caption := FormatFloat('"項目"000', I);
end;
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
//ListViewののOnCustomDrawItemイベント
var
RC: TRect;
begin
RC := Item.DisplayRect(drIcon);
Frame3D(Sender.Canvas, RC, clBlue, clNavy, 2);
end;
この現象にはしばらく悩まされたのですが、以下のようにフォントの変更イベントを生成することで解決できました。
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
//ListViewののOnCustomDrawItemイベント
var
RC: TRect;
begin
RC := Item.DisplayRect(drIcon);
Frame3D(Sender.Canvas, RC, clBlue, clNavy, 2);
{ フォントの変更イベントを作ってやれば文字が大きくならない }
with Sender.Canvas do
if Assigned(Font.OnChange) then
Font.OnChange(Canvas.Font);
end;
|