喫茶XRAYトップページ
[
スレッド全体
]
[8034]
TListViewで項目が選択されているか
返信
削除
2014/9/28 (日) 12:22:15
Mr.XRAY
> 例えば,
> [TListViewの名前列の空白箇所クリック時選択させない]
>
http://
hpcgi3.
nifty.
com/
e-
papy/
DelphiBB
S/
wwwlng.
cgi?
print+
201409/
14090009
.
txt
この質問では,TListView の項目が選択されているかどうかを,どう確認したか,
書いてありませんが,
TListView で項目(Item) が選択されているかどうかは,
TListView.ItemIndex の値で確認できます.
(TListView はコンポーネントのクラス名です.
フォームに配置した TLietView コンポの名前が ListView1 の場合は,
ListView1.ItemIndex の値のことです)
ItemIndex の値が -1 の時は,項目は選択されていません.
0 以上の時は選択されています.
TListView.SelCount の値でも確認できます.
また,Selected プロパティの値でも確認できます.
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
Controls
.
TCustomL
istContr
ol.
ItemInde
x
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
ComCtrls
.
TCustomL
istView.
SelCount
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
ComCtrls
.
TCustomL
istView.
Selected
参考までに.
[8035]
Re:TListViewで項目が選択されているか
返信
削除
2014/9/28 (日) 12:48:06
Mr.XRAY
> (TListView はコンポーネントのクラス名です.
> フォームに配置した TLietView コンポの名前が ListView1 の場合は,
> ListView1.ItemIndex の値のことです)
何故,ListView1.ItemIndex という書き方をしないかと言うと,
コンポーネントの名前は任意に変更できます.
ListView1, ListView2, あるいは LV 等も使う時があります.
そこで,クラス名を使用して,TListView.ItemIndex としておけば,
TListView というコンポーネントの ItemIndex のことであることが明確になります.
>
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
Controls
.
TCustomL
istContr
ol.
ItemInde
x
>
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
ComCtrls
.
TCustomL
istView.
SelCount
>
http://
docwiki.
embarcad
ero.
com/
Librarie
s/
XE7/
ja/
Vcl.
ComCtrls
.
TCustomL
istView.
Selected
オンラインヘルプでは TCustomListView となっています.
この TCustomListView は TListView の継承元のクラスです.
多くのコンポーネント,クラスは,この TCustomXXX と言う名前のクラスから
作成されています.
TCustomXXXX には,公開プロパティ(public や published) はありません.
この TCustomXXXX から,似たような別のコンポーネント,あるいはクラスが
作成されています.そして,必要に応じて public 等のプロパティとしています.
参考
[10-03_コンポーネントを TCustomEdit から作成する意義]
http://
mrxray.
on.
coocan.
jp/
Delphi/
plSample
s/
160_Crea
teCompon
ent.
htm#
10-
03
[8038]
TListViewの選択項目の番号と再描画問題
返信
削除
2014/9/29 (月) 19:10:36
Mr.XRAY
> TListView で項目(Item) が選択されているかどうかは,
> TListView.ItemIndex の値で確認できます.
実際にテストしてみました.
サンプルプログラム集の[790_ファイル一覧・仮想リストビュー]の
[01_ファイル一覧・仮想リストビュー (ファイル名のみ)]を使用しました.
そのサンプルで,
ListView1.RowSelect := False;
として,次のイベントのコードを追加して実行した結果です.
再描画の問題もテストしています.
最初の図では,ItemIndex の値が 2 となっていて,3 番目の項目が選択されている
ことが分かります.
次の図では -1 となっていますから,どの項目も選択されていないことが分かります.
しかし,再描画が完全でないために,描画が不自然な状態となっています.
動作確認は,Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.
procedure TForm1.ListView1Click(Sender: TObject);
var
AIndex : Integer;
begin
//図はこの再描画のコードがない場合でテストしている
//ListView1.Invalidate;
AIndex := ListView1.ItemIndex;
//フォーカス領域の枠線を描画しない場合
//図ではこのコードがない場合でテストしている
//このコードを実行すると,再描画が行われるのでListView1.Invalidate;は不要
//if AIndex < 0 then begin
// ListView1.ItemFocused := nil;
//end;
Panel1.Caption := '選択項目番号 ' + IntToStr(AIndex);
end;
[8039]
というわけで...
返信
削除
2014/9/29 (月) 21:53:50
Mr.XRAY
> 実際にテストしてみました.
というわけで,池上 彰さんの話も終わりましたので...
ではなく,ここ最近,Delphi のコミュニティの場での,主に質問内容を
取り上げてみました.
質問の内容に対しての直接の解決策ではありませんが,
こうすると,単に「うまくいきました」「解決しました」だけではなく,
いろいろな面が見えてきます.
コミュニティの場では中々,いや,間違いなくこうはいきません.
[
▼次のスレッド
]
INCM/CMT
Cyclamen v3.82