我在左键单击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;
对我来说似乎很简单,但是...无法找到解决此问题的方法,并在左键单击时调用程序。伙计们,任何想法?
答案 0 :(得分:3)
猜猜问题现在解决了。
如果将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;
答案 1 :(得分:1)
这有一个诀窍,以及#34;检查"如果是eq。 TButton使用DragMode = TDragMode.dmAutomatic。 只需检查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有时让我发狂......