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. |
[000483]