掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TListViewのvsReport形式でチェックボックスをチェックなし、あり、不可(グレー)にしたい (ID:38126)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>私の変てこりんな「ResultSII」も考慮していただいて、本当に感謝感激です。 個人的には [ResultSII] があまり良くないので...こんなのはどうかなと unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, ComCtrls, CommCtrl, StdCtrls; type TListItem = class(ComCtrls.TListItem) private protected function GetChecked: Boolean; procedure SetChecked(Value: Boolean); function GetEnabled: Boolean; procedure SetEnabled(Value: Boolean); function GetStateIndex: Integer; procedure SetStateIndex(Value: Integer); public published property Checked: Boolean read GetChecked write SetChecked; property Enabled: Boolean read GetEnabled write SetEnabled; property StateIndex: Integer read GetStateIndex write SetStateIndex; end; TListView = class(ComCtrls.TListView); TForm2 = class(TForm) ListView1: TListView; ImageList1: TImageList; Button1: TButton; Button2: TButton; procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState); procedure FormCreate(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form2: TForm2; implementation {$R *.dfm} function TListItem.GetStateIndex; begin Result := inherited StateIndex; end; procedure TListItem.SetStateIndex(Value: Integer); begin inherited StateIndex := Value; if Value and 1 = 0 then begin inherited Checked := False; end else begin inherited Checked := True; end; end; function TListItem.GetEnabled: Boolean; begin if StateIndex and 2 = 0 then Result := False else Result := True; end; procedure TListItem.SetEnabled(Value: Boolean); begin if Value = True then begin if StateIndex = -1 then begin StateIndex := 2; end else begin StateIndex := StateIndex or 2; end; end else begin if StateIndex = -1 then begin StateIndex := 0; end else begin StateIndex := StateIndex and (255-2); end; end; end; function TListItem.GetChecked: Boolean; begin Result := inherited Checked; end; procedure TListItem.SetChecked(Value: Boolean); begin inherited Checked := Value; if Checked = True then begin if StateIndex = -1 then begin StateIndex := 1 end else begin StateIndex := StateIndex or 1; end; end else begin if StateIndex = -1 then begin StateIndex := 0; end else begin StateIndex := StateIndex and (255-1); end; end; end; procedure TForm2.FormCreate(Sender: TObject); var ListItem: TListItem; begin ListItem := TListItem(ListView1.Items.Add); ListItem.Caption := 'NO 1'; ListItem.Checked := False; ListItem.Enabled := False; ListItem := TListItem(ListView1.Items.Add); ListItem.Caption := 'NO 2'; ListItem.Checked := True; ListItem.Enabled := False; ListItem := TListItem(ListView1.Items.Add); ListItem.Caption := 'NO 4'; ListItem.Enabled := True; ListItem.Checked := True; ListItem := TListItem(ListView1.Items.Add); ListItem.Caption := 'NO 3'; ListItem.Checked := False; ListItem.Enabled := True; ListView1.OwnerDraw := True; ListView1.ViewStyle := vsReport; end; procedure TForm2.ListView1DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState); var Bitmap: TBitmap; begin if Item.Enabled = False then begin ListView1.Canvas.Font.Color := clGray; end; Bitmap := TBitmap.Create; Bitmap.PixelFormat := pf32bit; Bitmap.SetSize(16,16); ImageList1.GetBitmap(Item.StateIndex,Bitmap); Sender.Canvas.TextRect(Rect,Rect.Left+20,Rect.Top,Item.Caption); Sender.Canvas.Draw(Rect.Left,Rect.Top,Bitmap); Bitmap.Free; end; procedure TForm2.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ListItem: TListItem; begin ListItem := TListItem(ListView1.GetItemAt(X,Y)); if Assigned(ListItem) = True then begin if htOnStateIcon in ListView1.GetHitTestInfoAt(X, Y) then begin if ListItem.Enabled = True then begin ListItem.Checked := not ListItem.Checked; end; end; end; Exit; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.