2

我也有左键单击 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;

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

4

2 回答 2

4

猜猜问题现在解决了。

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

即使我手动设置 Panel_Item_01.DragMode := dmManual; 现在它可以识别鼠标左键并保留 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;
于 2013-01-25T09:02:50.823 回答
1

有一个技巧可以“检查” eq。带有 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 有时会让我发疯......

于 2017-01-26T22:48:27.640 回答