Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
ВнизСсылки классов или переменные классов, как быть ? Найти похожие ветки
← →
Rule © (2004-11-11 16:49) [0]возьмем простой вариант, необходимо сдулать процедуру, в ней 2 входящий параметра: первый это класс, а второй - переменная этого класса, и процедура просто создает экземпляр этого класса ...
как в процедуре указать переменную класса в качестве входного параметра, если в делфи нет переменных класса, скажите пожалуйста как мне быть ...
всем спасибо ...
← →
Ш-К (2004-11-11 16:51) [1]
> в делфи нет переменных класса
в делфи есть переменных класса
← →
Rule © (2004-11-11 16:54) [2]Ш-К (11.11.04 16:51) [1]
хммм, получается борланд врет ?
← →
Ega23 © (2004-11-11 16:59) [3]По-моему ЮЗ когда-то кусочек кода выкладывал:
procedure TForm1.Button1Click(...);
var
FormClass:TFormClass;
begin
case UsesrType of
2 : FormClass:=TForm2;
3 : FormClass:=TForm3;
....
else
FormClass:=nil;
end;
if FormClass<>nil then
with FormClass.Create(nil) do
try
if ShowModal=mrOK then
begin
....
end
finally
Free
end
else
ShowMessage("Unknown user type")
end;
Не совсем то, что ты просишь, но около того...
← →
Ш-К (2004-11-11 17:00) [4]Rule © (11.11.04 16:54) [2]
Любой объект - переменная класса.
Вот такая процедура должна получиться:procedure Do(AClass: TClass; AObject: TObject);
Только нахрена тебе нужно передвать первый параметр.
← →
Rule © (2004-11-11 17:04) [5]Ш-К (11.11.04 17:00) [4]
ну надо сделать чтото вроде
TApplication.CreateForm
тут же один параметр это класс а второй - это переменная ....
← →
Ш-К (2004-11-11 17:04) [6]Прошу прощения, не вчитался в вопрос:
procedure Do(AClass: TClass; AObject: TObject);
begin
AObject := AClass.Create;
end;
← →
MBo © (2004-11-11 17:05) [7]посмотри на TApplication.CreateForm
← →
Rule © (2004-11-11 17:05) [8]Ш-К (11.11.04 17:04) [6]
Пробовал, только вместо AObject: TObject писал TForm, щас попробую с TObject
← →
Rule © (2004-11-11 17:06) [9]MBo © (11.11.04 17:05) [7]
это только завтра, я сегодня глянул и мне страшно стало ::))), не должно же быть все так сложно :)
← →
Rule © (2004-11-11 17:06) [10]Ega23 © (11.11.04 16:59) [3]
Спасибо, действительно чуть-чуть не то ...
← →
Rule © (2004-11-11 17:10) [11]MBo © (11.11.04 17:05) [7]
там используется метод NewInstance, а в хелпе написано Do not call NewInstance directly
← →
Rule © (2004-11-11 17:12) [12]разобрался с TApplication.CreateForm, не так все и сложно как казалось при первом взгляде :)
← →
Rule © (2004-11-11 17:18) [13]хех, все получилось :), спасибо всем за помощь ...
значит объясняю, может кому понадобится мое решени .. значит у меня MDI приложение и в нем можно открывать только по одному экземплюру каждого дочерного окна, вот и надо было сделать общую процедуру, в которую передаются класс окна и переменная этого класса, и процедура должна проверить существует ли уже такое окно, если нет, то создает, если да то далет его активным, вот кусок кода который у меня получился :
procedure TMain.CreateFormAZS(InstanceClass: TComponentClass;
var Reference);
var
i:integer;
Instance: TComponent;
begin
for i:=MDIChildCount-1 downto 0 do
if MDIChildren[i] is InstanceClass then begin
MDIChildren[i].Show;
exit;
end;
Instance := TComponent(InstanceClass.NewInstance);
TComponent(Reference) := Instance;
try
Instance.Create(Self);
except
TComponent(Reference) := nil;
raise;
end;
← →
Гаврила © (2004-11-11 18:04) [14]
> Прошу прощения, не вчитался в вопрос:
> procedure Do(AClass: TClass; AObject: TObject);
> begin
> AObject := AClass.Create;
> end;
Только
var AObject: TObject
иначе ссылка не не будет доступна снаружа
← →
jack128 © (2004-11-11 18:31) [15]Гаврила © (11.11.04 18:04) [14]
> procedure Do(AClass: TClass; AObject: TObject);
> begin
> AObject := AClass.Create;
> end;
Ну О-О-ОЧЕНЬ ограниченное применение у этой функции. Поскольку не выполняется конструктор. Вообще классовые ссылки имеет смысл использовать только в иерархияхв виртуальным конструктором. Простейший пример - компоненты.
← →
Гаврила © (2004-11-11 21:00) [16]
> [15] jack128
> Вообще классовые ссылки имеет смысл использовать только
> в иерархияхв виртуальным конструктором
Или вообще без конструкторов(кроме как от TObject или от того класса, чья классовая ссылка прислана)
← →
Rule © (2004-11-12 14:26) [17]Ш-К (11.11.04 16:51) [1]
Специально почитал Макро Кенту, потомучто у него видел что он писал и давал ссилку где написано, что вделфи нет переменных классов, но есть ссылки классов, что мы щас и использовали :)
jack128 © (11.11.04 18:31) [15]
ну почему, вот мой случай тому пример, что не только в компоеннтах используется такой подход ...
и естественно и дураку понятно что все это будет работать только когда конструкторы виртуальные иначе фигня получится ...
← →
Rule © (2004-11-12 14:28) [18]Rule © (12.11.04 14:26) [17]
извиняюсь, не уточнил виртуальные конструкторы у базового класса, в моем случае TComponentClass,и естественно у всех потомков этот конструктор должен быть перектрыт, если они хотят исползовать свой ...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.253 c