Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
ВнизИнициализация объекта объектом такого-же класса в массиве Найти похожие ветки
← →
VladDD (2003-10-20 15:03) [0]TDDLProtocol = record
DisplayR: TjsCoolGauge;
....
TForm1 = class(TForm)
jsCoolGauge1: TjsCoolGauge;
...
var
Form1: TForm1;
// Описываем массив и инитим его
DDLProtocol: array[1..43] of TDDLProtocol = (
(DisplayR: Form1.jsCoolGauge1...),
Хочется чтобы DisplayR ссылался на объект jsCoolGauge1. Поскольку по сути и то и то являются типизированными указателями, попытался инициализировать один другим присвоением - фиг. Пытался явно объявлять типизированные указатели (TDDLProtocol = record DisplayR: ^TjsCoolGauge;)- тоже не прошло. Подскажите, как это можно сделать? Или только через pointer?
← →
Palladin (2003-10-20 15:06) [1]это вообще никак не возможно...
инициализация массива будет происходить на уровне компиляции, объект Form1 будет создаватся только при загрузке, соответственно реального адреса ни Form1 ни jsCoolGauge1 ты не получишь...
← →
jack128 (2003-10-20 15:16) [2]
> Поскольку по сути и то и то являются типизированными указателями,
> попытался инициализировать один другим присвоением - фиг
Ты хошь сказать, что
DLLProtocol[1].DisplayR := Form1.jsCoolGauge1; дает ошибку? невозможно!!
← →
Юрий Федоров (2003-10-20 15:21) [3]Инициализируй массив в run-time, по другому не получится, см. [1]
← →
Palladin (2003-10-20 15:28) [4]Погорячился я по поводу никак не возможно...
возможно но если ссылатся по адресу переменной Form1 а не по значению...
← →
Palladin (2003-10-20 15:30) [5]в таком виде
type
TRForm=record
form:^tform;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
arr:array [1..1] of TRForm = ( (form:@form1) );
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(arr[1].form.caption);
end;
← →
VladDD (2003-10-20 20:44) [6]Огромное спасибо за ответы и советы. А если учесть что это моя первая прога :-) на Дельфи они ценны как никогда. А то я тут уже второй день изголяюсь по всякому, казалось бы на таком простом коде. Умом понимаю что должно работать, а не работает! :-)
2Palladin
Типизированный ссылочный тип не проходит тоже (form:^tform а потом инит адресом @)
2jack128
DLLProtocol[1].DisplayR := Form1.jsCoolGauge1;
Как правильно сказал Юрий Федоров и ты это работает только в run-time, но вот на этапе объявления массива с одновременной его инициализацией не работает (ругается constant expression expected). Хотя тот-же процедурный тип проходит на ура, хотя, по большому счету, он фактически мало чем отличается по своей сути от класса...
Жаль конечно что нельзя - некрасибо получается, но лучше так, чем никак. Пойду дописывать initialization :-))
Еще раз всем большое спасибо.
← →
Palladin (2003-10-20 20:52) [7]
> VladDD (20.10.03 20:44) [6]
ну как это не проходит... я тебе реальный работающий фрагмент привел...
← →
VladDD (2003-10-21 06:30) [8]В моем случае ситуация немного другая... Ты инитишь "корневым" объектом класса, а в моем случае это субкласс. Т.е. что-то вроде этого (такая связка не работает):
type
TRForm=record
form:^t_subform;
end;
TForm1 = class(TForm)
Button1: TButton;
Subform: t_subform; // т.е. arr.form нужно инитить этим субклассом
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
arr:array [1..1] of TRForm = ( (form:@form1.t_subform;) );
← →
Palladin (2003-10-21 14:41) [9]а вот этого уже не получится...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c