组件运行模式时需要调用onclick事件

时间:2014-08-17 06:39:42

标签: delphi components firemonkey

我在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.

在我的代码中,当我拖动组件时,只需单击事件调用。但是我需要在拖动组件运行应用程序之后,我点击我的组件,那时我的程序将调用。

1 个答案:

答案 0 :(得分:0)

要调整大小,请使用TSelection。

要区分点击和拖动,您需要监控OnMouseDown / OnMouseUp事件(或覆盖组件中的方法)。

在MouseDown中注意坐标并设置MouseCapture。然后监视MouseMove事件以移动组件。如果鼠标从起点移动了超过n个像素,则设置一个标记(n将取决于您想要的敏感度)。

如果已设置标志,则在MouseUp中移动组件,否则将其返回到起始位置并触发OnClick事件。