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

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

Динамическое создание классов


qTorus ©   (2006-06-29 15:14:00) 

Возникла проблема нестандартного типа: необходимо создавать новые классы во время выполнения программы. Т. е. структура этих классов заранее неизвестна на этапе разработки программы. В хелпе ничего не нашёл. И вообще у меня возникают смутные сомнения насчёт наличия такой возможности.

Где-то слышал, что это можно сделать через интерфейсы. Сам ничего не знаю, так как с интерфейсами не работал.


Игорь Шевченко   (2006-06-29 16:40:00) [1]

procedure TForm1.Button1Click(Sender: TObject);
var
 V: Variant;
begin
 TVarData(V).VType := varByRef;
 TVarData(V).VPointer := Self;
 ShowMessageFmt ('%d', [VarType(V)]);
end;


qTorus   (2006-06-29 16:15:00) [2]


> > 1. Переменной типа Variant нельзя присвоить указатель
> или
> > экземпляр класса
>
>
> Можно

Компилятор пишет: E2010 Incompatible types: 'Variant' and 'Pointer'


Игорь Шевченко   (2006-06-29 16:03:00) [3]

qTorus   (29.06.06 16:01) [4]


> 1. Переменной типа Variant нельзя присвоить указатель или
> экземпляр класса


Можно


> 2. Каждая переменная типа Variant "весит" 20 байт, что приводит
> к неэкономному использованию памяти


Это есть. Ты хочешь предложить другой способ ?


qTorus   (2006-06-29 16:01:00) [4]

Недостатки такого подхода:
1. Переменной типа Variant нельзя присвоить указатель или экземпляр класса
2. Каждая переменная типа Variant "весит" 20 байт, что приводит к неэкономному использованию памяти


Игорь Шевченко   (2006-06-29 15:56:00) [5]

qTorus   (29.06.06 15:29) [2]

Можно и так. Можно и без класса


qTorus   (2006-06-29 15:29:00) [6]


> Массив вариантов ?

Если я правильно понял, то можно сделать так:

type TMyClass = class
 Fields: array of Variant;
end;


Игорь Шевченко   (2006-06-29 15:21:00) [7]


> Т. е. структура этих классов заранее неизвестна на этапе
> разработки программы.


Массив вариантов ?


Наверх

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