掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TListViewのvsReport形式でチェックボックスをチェックなし、あり、不可(グレー)にしたい (ID:38122)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
手元にD7以下が無いのでD7で動作確認しました。 これで動作しますかね? ListViewはOSのバージョンの制約を受けます、 ご自分でチェックイメージを作成するなら、もう少し簡単かもしれません。 今時間が無いのでコメントは読んでません、また後で来ます。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, CommCtrl; type TForm1 = class(TForm) ListView1: TListView; procedure FormCreate(Sender: TObject); procedure ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); private { Private 宣言 } procedure ListViewWindowProcEx(var Message: TMessage) ; procedure ListView1ItemChecked(Item: TListItem); public { Public 宣言 } end; var Form1: TForm1; OriginalListViewWindowProc:TWndMethod; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i,p: Integer; str:string; item:TListItem; begin OriginalListViewWindowProc := ListView1.WindowProc; ListView1.WindowProc := ListViewWindowProcEx; ListView1.Checkboxes:=True; for i := 0 to 10 - 1 do begin item := ListView1.Items.Add; p := i mod 4; case p of 0:str:='未チェック'; 1:str:='チェック'; 2:str:='絶対未チェック'; 3:str:='絶対チェック'; end; item.Caption := str + IntToStr(i); Item.StateIndex := p; item.Checked := not Item.Checked; //ここがミソ item.Checked := not Item.Checked; //ここがミソ end; end; procedure TForm1.ListView1ItemChecked(Item: TListItem); begin if item=nil then Exit; if item.StateIndex >= 2 then item.Checked := (item.StateIndex mod 2 = 1); end; //This code was copyed from... //http://delphi.about.com/od/delphitips2007/qt/listviewchecked.htm procedure TForm1.ListViewWindowProcEx(var Message: TMessage) ; var listItem : TListItem; begin if Message.Msg = CN_NOTIFY then begin if PNMHdr(Message.LParam)^.Code = LVN_ITEMCHANGED then begin with PNMListView(Message.LParam)^ do begin if (uChanged and LVIF_STATE) <> 0 then begin if ((uNewState and LVIS_STATEIMAGEMASK) shr 12) <> ((uOldState and LVIS_STATEIMAGEMASK) shr 12) then begin listItem := listView1.Items[iItem]; if listItem.StateIndex >= 2 then ListView1ItemChecked(listItem); end; end; end; end; end; //original ListView message handling OriginalListViewWindowProc(Message) ; end; procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage; var DefaultDraw: Boolean); begin if item.StateIndex >= 2 then ListView1.Canvas.Font.Color := clRed; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.