Delphi 将TForm/form作为参数传递,并在其上动态创建图像

Delphi 将TForm/form作为参数传递,并在其上动态创建图像,delphi,delphi-2010,Delphi,Delphi 2010,我有一个叫做eventsobj的对象。在它的一个过程中,它在一个窗体上绘制了一些动态图像。到目前为止,它是有效的。然而,为了整洁,因为我的老师告诉我,我的目标是在一个单独的单元 理想情况下,我希望对象有一个返回TForm的函数,然后将其设置为主表单。 在我的另一个单位: Function drawNewForm(numberOfImages : integer) : TForm1; 以我的主要形式: NewForm := TForm1.create; NewForm :

我有一个叫做eventsobj的对象。在它的一个过程中,它在一个窗体上绘制了一些动态图像。到目前为止,它是有效的。然而,为了整洁,因为我的老师告诉我,我的目标是在一个单独的单元

理想情况下,我希望对象有一个返回TForm的函数,然后将其设置为主表单。 在我的另一个单位:

    Function drawNewForm(numberOfImages : integer) : TForm1;
以我的主要形式:

    NewForm := TForm1.create;
    NewForm := drawNewForm(10);
    CurrentForm := newform;
对不起,这是含糊不清的,但我需要的是原则,不一定是代码。 当我尝试这几行时,当前的表单根本没有改变


提前感谢您的帮助。

如果您只是将所有内容(包括表格)移到一个新单元,我认为您的老师不会满意。。。你也可以重新命名这个单位。呵呵

我相信你的老师的意思是,你的eventsobj类应该在另一个单元中,你应该以你的主要形式实例化它。你会有这样的想法:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, YourNewUnit;

type
    TForm1 = class(TForm)
    private
        FYourClass: TYourClass;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
    FYourClass := TYourClass.Create(Self);
    with FYourClass do begin
        Parent := Self; //If needed...
        //Other initialization stuff
    end;
end;
YourNewUnit.pas:

unit YourNewForm;

...

type
  TYourClass = class(...)

...
MainForm.pas:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, YourNewUnit;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
    with TYourClass.Create(Self) do begin
        Parent := Self; //If needed...
        //Other initialization stuff
    end;
end;
如果以后需要在代码中调用,还可以在表单上创建一个私有字段来保存对
TYourClass
实例的引用。这看起来像这样:

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, YourNewUnit;

type
    TForm1 = class(TForm)
    private
        FYourClass: TYourClass;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
    FYourClass := TYourClass.Create(Self);
    with FYourClass do begin
        Parent := Self; //If needed...
        //Other initialization stuff
    end;
end;

谢谢你的帮助。我明白为什么我现在必须使用第二个装置了。但是,我在哪里创建图像?(Main form或newunit)我之所以问这个问题,是因为我的对象应该创建images@user3457105如果我理解的很好,这些图像属于你的新对象。因此,您必须在其中创建图像。您的对象应该是自包含的。如果你想在另一种形式(甚至是另一个应用程序)中使用同一个对象,它应该可以工作。哦,我明白了。如何保存图像?TImage?@user3457105数组如果您希望图像内置在可执行文件中,您可能应该将其添加到应用程序资源中并加载到object creator上。。。这是一个不同的问题,如果你对那个部分有问题,你应该打开一个新的。好的。谢谢你的帮助,加布里埃尔!