ListViewのセル選択


ガオー  2007-05-29 20:19:54  No: 26325

ListViewのセルを選択した時の
セルの位置はわかるのでしょうか?
(何行目の何列目というような)


Basser  2007-05-29 22:09:29  No: 26326

LVM_SUBITEMHITTEST メッセージで取得できます。


ガオー  2007-05-29 23:28:10  No: 26327

Basserさん、早速のご回答ありがとうございます。
LVM_SUBITEMHITTESTは、どうやってコーディングすればよいのでしょうか。
Delphiの関数ではないですよね。
勉強不足で申し訳ありませんが、もう少し教えてください。


Basser  2007-05-30 01:07:02  No: 26328

動作確認はしてませんが下記のような感じでいけると思います。

implementation

uses
  CommCtrl;

procedure TForm1.lvControlClick(Sender: TObject);
var
  wCtrl  : TListView;
  wStruct: TLVHitTestInfo;
begin
  // 初期化
  wCtrl:= TListView(Sender);
  FillChar(wStruct, SizeOf(TLVHitTestInfo), 0);

  // マウスカーソルの座標を取得
  GetCursorPos(wStruct.pt);
  // スクリーン座標からクライアント座標に変換
  wStruct.pt:= wCtrl.ScreenToClient(wStruct.pt);

  // 選択された項目の判定
  if wCtrl.Perform(LVM_SUBITEMHITTEST, 0, LPARAM(@wStruct)) >= 0 then
    with wStruct do ShowMessage(Format('%d行%d列目', [iItem + 1, iSubItem + 1]));
end;


ガオー  2007-05-30 01:53:00  No: 26329

Basserさん、ご丁寧なご回答ありがとうございます。
このようなことを勉強する為の参考になる書籍など
ありましたら、ご紹介していただけませんでしょうか。


Basser  2007-05-30 03:35:21  No: 26330

書籍というか Delphi の VCL の中を覗いてみたりしてはどうでしょう?
(お使いのDelphiがProffessional以上であれば)

今回の場合だとTListViewが内部でどのような処理を行っているのか覗いてみると参考になります。


ガオー  2007-05-30 19:59:29  No: 26331

Basserさん、ご回答ありがとうございます。
VCL の中ですか、早速覗いてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加