如何使用delphi在类中创建动态备忘录

时间:2017-08-15 15:47:15

标签: delphi

我有一个表单类TfrmWelcome,我希望能够动态添加 在表单的主要部分(frmWelcome.MainPanelSourceEditor)中单击按钮时的备忘录。

我对某些代码的尝试失败如下。我收到了错误 "未声明的标识符WelcomeMemo"。我怎么能让这个编译和工作?

type
  WelcomeMemo : TMemo;
  end;

implementation

procedure SetHelpWelcome;
begin
  WelcomeMemo : TMemo.Create(frmWelcome);
  with TMemo(FindComponent('WelcomeMemo')) do
  begin
    Parent := frmWelcome.MainPanelSourceEditor;

1 个答案:

答案 0 :(得分:7)

如果您要做的是在运行时向frmWelcome添加备忘录,那么更好(但仍然不是很好)的方法就是这样:

procedure SetHelpWelcome;
var
  WelcomeMemo : TMemo;
begin
  WelcomeMemo := TMemo.Create(frmWelcome);
  WelcomeMemo.Parent := frmWelcome.MainPanelSourceEditor;
  // set any other properties of WelcomeMemo here.
end;

这可以避免with(你绝不应该使用它,特别是如果你是初学者)和完全可以避免FindComponent找到你不需要在第一时间找到的东西通过赋值给WelcomeMemo局部变量。

但这仍然是做你想做的事情的一种相当简单的方法。最好将WelcomeMemo作为表单的成员,并定义表单的方法来创建和初始化它;然后,您可以从要用于创建它的按钮的OnClick处理程序中调用该方法。像(未经测试的)

之类的东西
TfrmWelcome = Class(TForm)
private
  fWelcomeMemo : TMemo;
  procedure SetUpWelcomeMemo;
[...]
 end;

procedure TfrmWelcome.SetUpWelcomeMemo;
begin
  if fWelcomeMemo <> Nil then exit;  // to avoid creating it more than once
  fWelcomeMemo := TMemo.Create(Self);
  fWelcomeMemo.Parent := Self.MainPanelSourceEditor;
  // set any other properties of WelcomeMemo here.
end;

除了其他任何内容之外,这可以避免将备忘录的所有者设置为特定的TfrmWelcome实例frmWelcome,这是一个等待发生的事故,因为它可能不是您实际想要使用的实例。

但就像@J ..说的那样,你真的需要看一下初学者的教程,如果你在使用反复试验时就像你这样听起来一样。