Создание объектов любого типа
CLASSES.PAS определяет функцию с именем FindClass, возвращающую классовую
ссылку на этот класс (такую же, как и при регистрации класса). Вот пример,
который динамически создает компоненты на основе имени класса, введенного в поле
редактирования. Не забывайте при этом вызвать RegisterClasses и перечислять все
возможные классы, которые вы имеете намерение создать.
unit Unit1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Grids, DBGrids, ExtCtrls, DBCtrls, DB, DBTables;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
public
NextTop: integer;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
NewObj: TControl;
NewClass: TPersistentClass;
begin
NewClass := FindClass(Edit1.Text);
NewObj :=
TControl(TComponentClass(NewClass).Create(Self));
NewObj.Parent := Self;
NewObj.Name := NewObj.ClassName + IntToStr(NextTop);
NewObj.Top := NextTop;
NextTop := NextTop + 20;
end;
initialization
RegisterClasses([TButton, TEdit, TLabel]);
end.
|
|