掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TListViewのvsReport形式でチェックボックスをチェックなし、あり、不可(グレー)にしたい (ID:38112)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして。 Delphi&Windowsプログラミング歴10日目で右も左も分かりませんが、よろしくお願いします。 TListViewのvsReport形式を使い、CheckBoxesをTrueにしています。 チェックボックスを「チェックなし」、「チェックあり」、「チェック不可(グレー色)」に したいと考えました。 サンプルを探しても見つからなかったので、難しい方法しかないのかとあきらめかけてましたが、 ImageListをStateImagesに設定し、StateIndexを操作すれば可能なことを知り、やってみました。 表示された自作画像のチェックボックスをクリックすると、チェックなし→ありと変化して、 成功したように見えたんですが…大問題が。クリックしても、チェックの状態変化がおかしいのです。 正常なら Item.Checked=False、True、False、True、…と変化するはずですが、 なぜか False、True、True、True、False、True、True、True、False、True、…となります。 表示だけの問題か、チェックに制限を設けている部分の問題かと思いましたが、分かりませんでした。 そもそも無理な使い方をしているのでしょうか。でも一応クリックに反応はするんですよね…。 以下がソースの抜粋です。実際には他の処理も入ってます。 Const ResultSII=3; // ステータスを格納するSubItemのIndex M_kanou='可能'; // ステータスの各表示内容 M_huka= '不可'; // procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin // SubItemの数がResultSIIまで達していないItemはグレーに if Item.SubItems.Count<ResultSII+1 then begin Item.StateIndex:=2; exit; end; // SubItems[ResultSII]が「可能」のItemはStateIndexをCheckedに合わせ、それ以外はグレーに if Item.SubItems[ResultSII]=M_kanou then if Item.Checked then Item.StateIndex:=1 else Item.StateIndex:=0 else Item.StateIndex:=2; end; procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); begin // SubItemの数がResultSIIまで達していないItemは無条件でChecked:=False if Item.SubItems.Count<ResultSII+1 then Item.Checked:=False else //SubItems[ResultSII]が「可能」以外のItemは、Checked=Trueにさせない if Item.SubItems[ResultSII]<>M_kanou then Item.Checked:=False; end; TListViewのvsReport形式でチェックボックスの状態を ・ 「チェックなし」、「チェックあり」、「チェック不可(グレー色)」 または、 ・ 「チェックなし」、「チェックあり」、「チェック不可(グレー色)」、「チェック強制(グレー色)」 のようにしたいという需要は結構あると思うのですが、検索した限りでは見つかりませんでした。 どのようにすれば良いのか、教えていただければ幸いです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.