Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
6-28973
stas kalishenko
2002-12-09 21:17
2003.02.10
POP3


8-28936
МитяЙ2
2002-10-16 16:50
2003.02.10
Графики...


3-28658
VFP
2003-01-24 07:29
2003.02.10
Логическая переменная на SQL


1-28871
Avsam
2003-01-30 14:37
2003.02.10
TeamSource


3-28600
FAS
2003-01-18 01:12
2003.02.10
откуда и как инсталировать BDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский