オーナードローっていうのは描画処理をWindowsに任せることなくプログラム側が行うことを指す。
要するに自前の処理でメニューやリストの描画を行うことが出来るわけ。
で、ListViewでオーナードローを行うなら、まずOwnerDrawプロパティをTrueにするのが定石だけど、
CheckboxesプロパティがTrueの場合チェックボックスも自分で書かなきゃならないので面倒。
チェックボックスだけをWindowsに描画させ、その他のアイテムをオーナードローにするにはOnCustomDrawSubItemイベントを使う。
OnCustomDrawSubItemイベントはOwnerDrawプロパティがFalseでも発生する。
このイベントハンドラ内にSubItemについての描画処理を記述すれば、
チェックボックスのみWindowsに描画されSubItemは自前の描画処理が行われる。
ただし、Captionの描画はWindowsによって行われるため、
Captionを空にして、チェックボックスのみにしなければならないのが欠点。
とりあえず以下に例を示す。
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin //選択中は太字 if Item.Selected = True then begin ListView1.Canvas.Font.Style:= [fsBold]; ListView1.Canvas.Brush.Color:= clHighlight; ListView1.Canvas.Font.Color:= clHighlightText; end else begin //チェック項目は赤、その他は黒 if Item.Checked = True then begin ListView1.Canvas.Font.Style:= []; ListView1.Canvas.Brush.Color:= clWhite; ListView1.Canvas.Font.Color:= clRed; end else begin ListView1.Canvas.Font.Style:= []; ListView1.Canvas.Brush.Color:= clWhite; ListView1.Canvas.Font.Color:= clBlack; end; end; end;
選択中のアイテムは太字で反転表示され、
チェック付きのアイテムは文字色が赤、
その他のアイテムは文字色が黒で表示されるはず。