いつもお世話になっています。
TListView でアイテムの上で右クリックしたり
MultiSelect=False の場合にアイテム外でクリックした場合に
MouseUp イベントが発生しないようで困っています。
MouseDown MouseUp
Left Item=nil ○ not MultiSelect
Right Item=nil ○ not MultiSelect
Left Item<>nil ○ ○
Right Item<>nil ○ X
これは逃れることの出来ない仕様なのでしょうか?
さらに RowSelect=True にするとまた範囲が広がってくるのでどうにか対処したいのです。
今まで気になることはなかったのですが、ポップアップとドラッグ開始の切り分けに
MouseDown/MouseUp の組み合わせが必要になりここで行き詰まってしまいました。
今取りかかっているものでは、恐らく他の要素が加わり
右クリックでの MouseUp はアイテム外でしか発生していません(yoy)
MouseUpが発生しないときは
MouseDown の inherited; を抜けるのがUPした後みたいなので
TListView = class(Vcl.ComCtrls.TListView)
protected
procedure WMRButtonDown(var Message: TWMRButtonDown); message WM_RBUTTONDOWN;
end;
procedure TListView.WMRButtonDown(var Message: TWMLButtonDown);
var
MouseDown: TMouseEvent;
begin
if Assigned(OnMouseDown) = True then
begin
OnMouseDown(Self , mbRight , [] , Message.XPos , Message.YPos);
MouseDown := OnMouseDown;
OnMouseDown := nil;
inherited;
OnMouseDown := MouseDown;
end
else
begin
inherited;
end;
if (Assigned(Selected) = True) or (MultiSelect = True) then
begin
if Assigned(OnMouseUp) = True then
begin
OnMouseUp(Self , mbRight , [] , Message.XPos , Message.YPos);
end;
end;
end;
AAAAA さん、ありがとうございます。
無事イベントが発生しました。
家宝にしたいと思います。
ツイート | ![]() |