掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
カラムドラッグ後のOnColumnClickイベントについて (ID:220)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
確かにずれてしまうようです。 そこで、いろいろ試してみました。 TListViewの、CN_NOTIFYメッセージに、LVN_COLUMNCLICKが飛んできます。 このときの、iSubItemの値は正常でした。 フォームにボタンを貼り付け、Column[Index].Captionの中身も正常でした。 なぜか、LVN_COLUMNCLICKの処理中、Column[PNMListView(NMHdr)^.iSubItem]の値がおかしくなっています。 # おかしくといっても、きちんとした規則で LVN_COLUMNCLICKを処理しているところで、iSubItemを返すようなイベントを埋め込めば、正常に処理できるようになります。 # ただし、イベントでColumn[Index]を使うとずれます。 たとえば、TListViewを派生(例ではTTestListView)させ、クラス定義の前に TColumnClickEvent2 = procedure(Sender: TObject; Index: Integer) of object; を用意。 Privateな変数に、 FOnColumnClick2: TColumnClickEvent2; を用意。 Proctectedなプロシージャを用意。 procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; procedure ColClick2(Index: Integer); publishedなプロパティ(イベント)を用意。 property OnColumnClick2: TColumnClickEvent2 read FOnColumnClick2 write FOnColumnClick2; プロシージャの中身は次のようになります。 procedure TTestListView.CNNotify(var Message: TWMNotify); var iSubItem: Integer; begin with Message do case NMHdr^.code of LVN_COLUMNCLICK: begin iSubItem := PNMListView(NMHdr)^.iSubItem; ColClick2(iSubItem); end; else inherited; end; end; procedure TTestListView.ColClick2(Index: Integer); begin if Assigned(OnColumnClick2) then OnColumnClick2(Self, Index); end; これで、OnColumnClick2イベントができるので、この中で、 procedure TForm1.ColumnClick2(Sender: TObject; Index: Integer); var col: TLVColumn; buf: array[0..255] of Char; begin if ListView_GetColumn( TestListView.Handle, Index, col ) then begin ShowMessage( String(buf) ); end; end; とすれば、クリックした位置のキャプションが帰ってきます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.