Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-98750
Александр-И
2003-06-29 02:12
2003.10.30
Как узнать длительность mp3 файла ?


3-98523
nortsov
2003-10-08 08:50
2003.10.30
проблема, update для обновления записей в связанных таблицах


14-98791
Zn
2003-10-13 15:50
2003.10.30
Как подключить quikview в Office 2000?


14-98834
PHPAsker
2003-10-08 03:52
2003.10.30
Телефонная книжка


1-98624
Raptorus
2003-10-17 15:58
2003.10.30
Уважаемые, Мастера. Подскажите как можно скопировать запси из





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский