【问题标题】:Need to call onclick event when component is running mode组件运行时需要调用onclick事件
【发布时间】:2014-10-10 09:31:00
【问题描述】:

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

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

【问题讨论】:

  • 你真的想把那个面板放在一个面板里面吗?
  • 不只是例子,我想在组件运行模式时调用onclick事件。
  • 当然 Click 已经触发 OnClick。为什么不使用普通的 TPanel 并使用其现有的 OnClick?
  • 好的,但是在组件内部代码想要实现一些功能。因此,当我在运行时在表单上拖动组件时,当我单击应该调用该函数的组件时。
  • 你为什么不问这个问题?如何让用户在运行时拖动我的面板并调整其大小?

标签: delphi components firemonkey


【解决方案1】:

使用 TSelection 调整大小。

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

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

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

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多