![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли передавать класс? [D6, Win2k]
AndrewK © (2004-08-24 16:37:00)Доброго времени суток, господа!
Можно ли хранить в экземпляре класса указатель на другой класс, например
tControlItem = class
Caption : String;
Editor : CLASS;
end;
Потом в программе сделать примерно следующее:
procedure Proc(aControlItem : tControlItem);
var Edtr : class;
begin
Edtr := aControlItem.Editor.Create;
Edtr....
end;
Хм. Надеюсь правильно выразился...
Rem (2004-08-24 18:36:00) [1]Зачем:
Proc(ControlElement);
Если нужно:ControlElement.Proc;
Суслик (2004-08-24 17:21:00) [2]
> И читать про классовые ссылки (class references)
и читать ответы участников форума :))))
внимательно читать замечу
jack128 (2004-08-24 17:20:00) [3]
> tControlItem = class
> Caption : String;
> Editor : CLASS;
> end;
Нужно TClass использовать.. И читать про классовые ссылки (class references)
Ega23 (2004-08-24 17:05:00) [4]А не легче ли
type
TControlItem=class
.....
end;
TMyForm=class(TControlItem)
....
end;
......
?
AndrewK (2004-08-24 17:00:00) [5]Вот это компилиться не хочет:
tControlItem = class
Caption : String;
Editor : CLASS;
end;
В качестве класса передаются разные классы, например:
var ControlElement : tControlItem;
...
ControlElement.Caption := 'Первый редактор';
ControlElement.Editor := TForm;
Proc(ControlElement);
ControlElement.Caption := 'Второй редактор';
ControlElement.Editor := TMyForm;
Proc(ControlElement);
Суслик (2004-08-24 16:54:00) [6]автору.
еще подумай про то, что может стоит объявить конструктор виртуальным.
Юрий Зотов (2004-08-24 16:53:00) [7]> Карелин Артем © (24.08.04 16:43) [2]
> А бутон на форме класс? Класс!
Нет. Бутон не форме - это экземпляр класса.
Ega23 (2004-08-24 16:50:00) [8]Суслик © (24.08.04 16:48) [4]
А, ну если так, то да.
Суслик (2004-08-24 16:48:00) [9]
> Ega23 © (24.08.04 16:43) [3]
ты эттта, не просек чего он хочет.
на сам деле правильно так (один из вариантов)
TEditor = class
...
end;
TEditorClass = class of TEditor;
TEditor1 = class
end;
tControlItem = class
Caption : String;
Editor : TEditorClass;
end;
procedure Proc(aControlItem : tControlItem);
var Edtr : TEditor;
begin
aControlItem.Editor := TEditor1;
...
Edtr := aControlItem.Editor.Create;
Edtr....
end;
Карелин Артем (2004-08-24 16:43:00) [10]Форма это класс? Класс!
А бутон на форме класс? Класс!
А бутон хранится в форме? Да!
Так что смело делай это, но не забывай уничтожать потом ненужные экзкмпляры...
Ega23 (2004-08-24 16:43:00) [11]Хранить можно. Запросто. Только убить не забудь.
Что касается этого:
procedure Proc(aControlItem : tControlItem);
var Edtr : class;
begin
Edtr := aControlItem.Editor.Create;
Edtr....
end;
то правильно
procedure Proc(aControlItem : tControlItem);
begin
aControlItem.Editor:=CLASS.Create;
aControlItem.Editor....
end;
Суслик (2004-08-24 16:40:00) [12]можно...
вроде все верно...