![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание классов
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]
> Т. е. структура этих классов заранее неизвестна на этапе
> разработки программы.
Массив вариантов ?