我也有一个问题,左键点击TPanel和TAdvPanel (TMS组件)。如果我设置了DragMode = dmAutomatic,那么左键单击就不起作用了。右键单击即可正常工作。
procedure TMain_Form.Panel_Item_01MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
{ whatever I type here nothing happen, even showmessage wont popup - no effect}
end;
if Button = mbRight then
begin
{ here code works fine }
end;
end;对我来说似乎很简单但是..。找不到如何解决此问题的方法,并在左键单击时调用过程。伙计们,有什么想法吗?
发布于 2013-01-25 17:02:51
我猜现在问题已经解决了。
如果将TPanel组件DragMode设置为dmAutomatic,似乎无法触发OnClick事件。但是,当我将相同的TPanel DragMode设置为dmManual时,它甚至可以运行OnClick。
即使在我手动设置Panel_Item_01.DragMode := dmManual的情况下,几乎没有OnMouseEnter的帮助也解决了这个问题;现在它可以识别鼠标左键并保留TPanel DragDrop功能。
下面是完整的代码:
procedure TMain_Form.Panel_Item_01MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
Panel_Item_01.DragMode := dmManual;
{ ..rest of code.. }
end;
if Button = mbRight then
begin
Panel_Item_01.DragMode := dmAutomatic;
{ ..rest of code.. }
end;
end;
procedure TMain_Form.Panel_Item_01MouseEnter(Sender: TObject);
begin
Panel_Item_01.DragMode := dmManual;
end;
procedure TMain_Form.Panel_Item_01MouseLeave(Sender: TObject);
begin
Panel_Item_01.DragMode := dmAutomatic;
end;发布于 2017-01-27 06:48:28
这里有一个小窍门,用来“检查”等式。使用DragMode=TDragMode.dmAutomatic的TButton。只需检查OnMouseLeave和OnMouseEnter之间的时间距离...代码:
uses DateUtils;
var Time1:TDateTime;
procedure TForm4.Button2MouseLeave(Sender: TObject);
begin
Memo1.Lines.Add('OnMouseLeave');
Time1:=Now;
end;
procedure TForm4.Button2MouseEnter(Sender: TObject);
var
A:Integer;
begin
A:=MillisecondsBetween(Time1,Now);
Memo1.Lines.Add('OnMouseEnter '+IntToStr(A));
end;然后可以看到,通过单击TButton,时间距离始终为0。另一个事件的结果具有较大的时间距离。
我知道这不是一个解决这个问题的明确方法,但Embarcadero有时会让我发疯……
https://stackoverflow.com/questions/14516629
复制相似问题