我在Firemonkey中使用TPanel创建了一个组件。我的想法是在运行时单击我的组件并实现一些功能。因此,当我在表单上拖动我的组件并运行应用程序时,我点击了我的组件,那时我的功能将起作用。
这里我创建了一个Component,源代码如下:
unit Layout1;
interface
uses
FMX.controls, System.Classes,FMX.StdCtrls, FMX.Types,System.UITypes, System.SysUtils,FMX.Dialogs;
type
TTestPnl = class(TPanel) // inherit panel
private
protected
public
Pnl : TPanel;
constructor Create(AOwner : TComponent); override;
procedure Click; override;
published
end;
procedure Register;
implementation
// Creation component at run time with assigning onclick event
constructor TTestPnl .Create(AOwner: TComponent);
begin
inherited;
Pnl := TPanel.Create(Self);
with Pnl do
begin
Height := 145.000000000000000000;
Position.X := 408.000000000000000000;
Position.Y := 40.000000000000000000;
Width := 201.000000000000000000;
TabOrder := 0;
OnClick := click;
end;
// Implementing Onclick functionality for runtime
procedure TTestPnl .Click;
begin
inherited;
ShowMessage('Click Event Call');
end;
procedure Register;
begin
RegisterComponents('TestPnl', [TTestPnl]);
end;
end.
在我的代码中,当我拖动组件时,只需单击事件调用。但是我需要在拖动组件运行应用程序之后,我点击我的组件,那时我的程序将调用。
答案 0 :(得分:0)
要调整大小,请使用TSelection。
要区分点击和拖动,您需要监控OnMouseDown / OnMouseUp事件(或覆盖组件中的方法)。
在MouseDown中注意坐标并设置MouseCapture。然后监视MouseMove事件以移动组件。如果鼠标从起点移动了超过n个像素,则设置一个标记(n将取决于您想要的敏感度)。
如果已设置标志,则在MouseUp中移动组件,否则将其返回到起始位置并触发OnClick事件。