Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.10;
Скачать: CL | DM;

Вниз

Как зная только имя класс в Run-Time создать объект этого класса?   Найти похожие ветки 

 
Oleon ©   (2003-01-31 13:04) [0]

Как зная только имя класса в Run-Time создать объект этого класса?

т.е. я передаю имя класса в процедуру, а она там внутри создает объект этого класса?

спасибо...


 
MBo ©   (2003-01-31 13:08) [1]

см. GetСlass, FindClass, RegisterClasses
вчера был пример


 
REA ©   (2003-01-31 13:08) [2]

Top 10 rated question - надо в FAQ

MyObject := FindClass("ClassName").Create;

Класс наследник TPersistent и должен быть зарегистрирован


 
Oleon ©   (2003-01-31 13:31) [3]

У меня класс T_EditForm
есть много наследников от него, например T_PrihodNaklForm...

у T_editForm есть abstract методы...

мне нужно например в рантайме создать наследник от T_EditForm и описать вызов методов, но чтобы он запускал методы наследника а не методы T_EditForm... по-моему понятно...

Т.е. я сделал так ..

TEditClass = class of T_editForm;
......
......

procedure T_TreeGridForm.Add_Record(AQuery: TZMsSqlQuery;
ASubQUery: TZMsSqlQuery; ASProc: TZMsSqlStoredProc; AClassName: String);
var
AeditForm : TEditClass;
fc : TformClass;
begin
AEditForm := TeditCLass(GetClass(AclassName));
with AEditForm.Create(self) do
Begin
try
MainQuery := AQuery;
SubQuery := ASubQuery;
StoredProc := ASProc;
TypeUpdate := 1;
ShowModal;
finally
free();
end;
End;
end;

Так вот как мне создать Экземпляр T_PrihodNaklForm, а не T_EditForm...

заранее неизвестно. какой из наследников я хочу создать если...

ну, блин, попробуйте понять, что мне надо плиз....

потому что в этом случае он пытается запустить абстрактные методы продителя, а не те которые я ovveride сделал в наследниках...



 
Mike_Goblin ©   (2003-01-31 14:11) [4]

unit Unit1;

interface

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

type
TEditClass = class of TForm;


TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function CloseQuery:boolean;override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
AEditForm : TEditClass;
Form:TForm;
begin
try
AEditForm := TEditCLass(FindClass(Edit1.Text));
except
ShowMessage("


 
Mike_Goblin ©   (2003-01-31 14:12) [5]

CloseQuery перекрыт у наследника, чтобы показать вызов overrride методов


 
Oleon ©   (2003-01-31 15:16) [6]

У меня в наследнике метод EDitList; Она описана в Родителе как
Procedure editlist; virtual; abstract;


в наследнике он переопределен... так вот мне нужно чтобы вызвался метод наследника. а если так писать как написано, то вызывается метод родителя, а он abstract;


 
Mike_Goblin ©   (2003-01-31 16:11) [7]

В приведенном примере при запуске проекта в строку ввода введи TForm1 и нажми кнопку Button1. Будет создан и показан новый экземпляр TForm1. Закрой его, чей метод OnCloseQuery будет вызыван в этом случае? Родителя(TForm) или потомка(TForm1)

PS возможно ты просто в переопределнном методе вызываешь
inherited


 
Oleon ©   (2003-01-31 19:30) [8]

Я дебил. вместо Override написал именно к procedure EditList
Overload.... , а ко всем другим нормально написал Override;так долго мучаться по такому пустяку..(((

обидно так лажаться...



Страницы: 1 вся ветка

Текущий архив: 2003.02.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
1-28781
Алекс_Админ
2003-02-01 16:54
2003.02.10
Файловые операции в Boot-Time


1-28792
waterfoll
2003-01-29 12:47
2003.02.10
Есть программа с двумя формами, Form1 и Form2, в Form1 на


3-28630
Snake
2003-01-23 12:49
2003.02.10
Глюки в FastReport


6-28975
Klaz
2002-12-17 08:21
2003.02.10
Как узнать IP-адрес???


1-28830
mate
2003-02-02 12:37
2003.02.10
String , Upper и Lower