我正在开发具有输入字段的应用程序,每当用户输入控件时,就会通过按钮生成额外的面板。

这些按钮的标题代表特殊的符号,例如度数,希腊符号。

当按下按钮时,应在输入字段TEdit现有文本中添加相应的特殊字符。

表单上有许多输入字段。因此,在TEdit的每个OnEnter事件上,它将生成特殊符号选择面板,而OnExit事件将释放该面板。

我想以某种方式告诉一个按钮,当他被按下时,他应该将符号添加到哪个TEdit中。

procedure TForm1.SpecSimboliai(Parent: TWinControl; Edit: TEdit);
var
    pSpec: TPanel;
    oClose: TPanelEx;
    sTekstas: TLabel;
    oButton: TPanelEx;
begin
    pSpec := TPanel.Create(Self);
    pSpec.Parent := Parent;
    pSpec.Align := alBottom;
    pSpec.Height := 38;
    pSpec.Name := 'spec';
    pSpec.Caption := '';
    pSpec.ParentBackground := false;

    sTekstas := TLabel.Create(Self);
    sTekstas.Parent := pSpec;
    sTekstas.Left := 10;
    sTekstas.Top := 12;
    sTekstas.Caption := 'Specialūs simboliai:';

    oClose := TPanelEx.Create(Self);
    oClose.Parent := pSpec;
    ...
    oClose.Top := 2;
    oClose.Anchors := [akTop,akRight];
    oClose.OnClick := UzdarytiSpec;

    oButton := TPanelEx.Create(Self);
    oButton.Parent := pSpec;
    oButton.Width := 14;
    oButton.Height := 14;
    oButton.CenterText := true;
    oButton.Caption := #$00B0;
    oButton.OnClick := AddSpecSymbol;

    ... //several other buttons
end;


此过程在TEdit.OnEnter事件上运行,该事件看起来像

..InputEnter(Sender: TObject);
begin
    SpecSimboliai(TEdit(Sender).Parent,TEdit(Sender));
end;


因此,在上面的代码中创建了面板,标签,关闭按钮和度数符号按钮。

我想将Edit参数传递给按钮,这样他就知道他正在使用哪个控件,但是我不知道该怎么做,因为oButton.OnClick事件只需要一个参数,即Sender: TObject

我想我想要的是这样的:

oButton.OnClick := AddSpecSymbol(Edit);


因此听起来像:oButton.OnClick(Sender: TObject)AddSpecSymbol(Sender: TObject; Edit: TEdit)具有相同的参数Sender,它们在事件发生时使用,但是参数Edit是额外的参数,它已经由人工分配,应该由AddSpecSymbol使用。

好的,我希望我写的所有内容都能让您理解,如果没有,请告诉我,我将尝试进行编辑。

谢谢

最佳答案

您可以以指定当前TEdit的形式引入一个字段。输入字段时将其设置为TEdit(Sender),离开字段时将其设置为nil。然后,OnClick事件可以使用此字段来访问适当的TEdit。

10-08 01:50