Delphi TListView の OwnerDraw で選択状態以外を自前で記述
ListView の Item に自前の文字を記述したいけど、選択状態などは元々の処理を使いたい
ListView プロパティ
OwnerData: True // アイテムを表示させない
OwnerDraw: False // Trueにすると選択状態も自前で書かなくてはなりません
AdvancedCustomDrawItem イベント
procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); var R: TRect; begin if (Stage = cdPostPaint) or (Stage = cdPostErase) then begin R := Item.DisplayRect(drBounds); Sender.Canvas.Brush.Style := bsClear; // 文字背景を透過 Sender.Canvas.Font.Color := clBlack; Sender.Canvas.Font.Style := Sender.Canvas.Font.Style + [fsBold]; Sender.Canvas.TextOut(R.Left + 1, R.Top + 1, Item.Caption); end; end;
cdPostPaint or cdPostErase 時に描画することで、選択状態等、元々の描画が終わった後に自前の文字を書き込んでいる
コメント