Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.30;
Скачать: CL | DM;

Вниз

Инициализация объекта объектом такого-же класса в массиве   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-98566
DreadAngel
2003-10-19 14:32
2003.10.30
Проблема с печатью!!!!


1-98609
kukuikar
2003-10-14 18:08
2003.10.30
Как WinAmp


1-98567
Saturn
2003-10-20 12:32
2003.10.30
Хелп плиз!!!


7-98888
Карелин Артем
2003-08-20 14:26
2003.10.30
Не найдено описание для события с кодом ( 1 ) в источнике ( ...)


1-98560
Rradion
2003-10-21 14:47
2003.10.30
Что-то он сортировать не хочет...