Форум: "Основная";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];
ВнизКак зная только имя класс в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c