ListViewのセルを選択した時の
セルの位置はわかるのでしょうか?
(何行目の何列目というような)
LVM_SUBITEMHITTEST メッセージで取得できます。
Basserさん、早速のご回答ありがとうございます。
LVM_SUBITEMHITTESTは、どうやってコーディングすればよいのでしょうか。
Delphiの関数ではないですよね。
勉強不足で申し訳ありませんが、もう少し教えてください。
動作確認はしてませんが下記のような感じでいけると思います。
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;
Basserさん、ご丁寧なご回答ありがとうございます。
このようなことを勉強する為の参考になる書籍など
ありましたら、ご紹介していただけませんでしょうか。
書籍というか Delphi の VCL の中を覗いてみたりしてはどうでしょう?
(お使いのDelphiがProffessional以上であれば)
今回の場合だとTListViewが内部でどのような処理を行っているのか覗いてみると参考になります。
Basserさん、ご回答ありがとうございます。
VCL の中ですか、早速覗いてみます。
ツイート | ![]() |