Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли передавать класс? [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]

можно...

вроде все верно...


Наверх

Титульная страница Поиск, карта сайта Написать письмо