Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用delphi在类中制作动态备忘录_Delphi - Fatal编程技术网

如何使用delphi在类中制作动态备忘录

如何使用delphi在类中制作动态备忘录,delphi,Delphi,我有一个表单类TfrmWelcome,我希望能够动态添加 当在表单的主要部分(frmWelcome.MainPanelSourceEditor)中单击按钮时,会显示一个备忘录 下面是我对某些代码的失败尝试。我得到了错误 “未声明的标识符”。我怎样才能让它编译并工作 type WelcomeMemo : TMemo; end; implementation procedure SetHelpWelcome; begin WelcomeMemo : TMemo.Create(frmW

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

下面是我对某些代码的失败尝试。我得到了错误 “未声明的标识符”。我怎样才能让它编译并工作

type
  WelcomeMemo : TMemo;
  end;

implementation

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

如果您试图在运行时向frmWelcome添加备忘录,那么更好(但仍然不是很好)的方法如下:

procedure SetHelpWelcome;
var
  WelcomeMemo : TMemo;
begin
  WelcomeMemo := TMemo.Create(frmWelcome);
  WelcomeMemo.Parent := frmWelcome.MainPanelSourceEditor;
  // set any other properties of WelcomeMemo here.
end;
这就避免了使用
(尤其是初学者不应该使用)以及完全可以避免的
FindComponent
,如果通过对
WelcomeMemo
局部变量的赋值来捕获某个您不需要首先查找的内容

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

TfrmWelcome=Class(TForm)
私有的
fWelcomeMemo:TMemo;
程序备忘录;
[...]
终止
程序TfrmWelcome.SetUpWelcomeMemo;
开始
如果fWelcomeMemo Nil,则退出;//避免多次创建它
fWelcomeMemo:=TMemo.Create(Self);
fWelcomeMemo.Parent:=Self.MainPanelSourceEditor;
//在此处设置WelcomeMemo的任何其他属性。
终止
除此之外,这避免了将备忘录的所有者设置为特定的TfrmWelcome实例
frmWelcome
,这是一个等待发生的意外,因为它可能不是您实际想要使用的实例


但是像@J。。说,如果你像听起来那样胡乱地使用试错法,你真的需要看看初学者教程。

“我真的不知道这行代码是干什么的,我只是把它放在那里看看它是否能工作”,这可能是个问题。这段代码完全是胡说八道。这一切都毫无意义。把它扔掉,从一些教程开始。@Jerryd道奇:确实如此,但我个人认为这些SA学生从Delphi(我想是D7)开始应该受到鼓励。所以,在让他们去寻找教程之前,我试着给他们一些有用的东西。@martyna应该鼓励他们提出对其他人有用的好问题。应该鼓励他们这样发帖。投反对票是正确的反应。我的意思是,我可以看到对这个问题投赞成票。那有什么用?这怎么解释呢,非常感谢你们@我会感谢杰瑞道奇的you@MissMassey嗯,不客气吗?@MissMassey:顺便说一句,如果这个答案对你有帮助,请点击左上角的勾号图标,接受它。是的,是的@马蒂娜
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;