首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用DragMode=dmAutomatic时OnClick和MouseDown不起作用

使用DragMode=dmAutomatic时OnClick和MouseDown不起作用
EN

Stack Overflow用户
提问于 2013-01-25 14:37:29
回答 2查看 5.5K关注 0票数 2

我也有一个问题,左键点击TPanel和TAdvPanel (TMS组件)。如果我设置了DragMode = dmAutomatic,那么左键单击就不起作用了。右键单击即可正常工作。

代码语言:javascript
运行
复制
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;

对我来说似乎很简单但是..。找不到如何解决此问题的方法,并在左键单击时调用过程。伙计们,有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-01-25 17:02:51

我猜现在问题已经解决了。

如果将TPanel组件DragMode设置为dmAutomatic,似乎无法触发OnClick事件。但是,当我将相同的TPanel DragMode设置为dmManual时,它甚至可以运行OnClick。

即使在我手动设置Panel_Item_01.DragMode := dmManual的情况下,几乎没有OnMouseEnter的帮助也解决了这个问题;现在它可以识别鼠标左键并保留TPanel DragDrop功能。

下面是完整的代码:

代码语言:javascript
运行
复制
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;
票数 4
EN

Stack Overflow用户

发布于 2017-01-27 06:48:28

这里有一个小窍门,用来“检查”等式。使用DragMode=TDragMode.dmAutomatic的TButton。只需检查OnMouseLeave和OnMouseEnter之间的时间距离...代码:

代码语言:javascript
运行
复制
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有时会让我发疯……

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14516629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档