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

Вниз

FindComponent   Найти похожие ветки 

 
Тохус ©   (2003-11-12 22:27) [0]

На одной форме 15 Label c именами lblCh1, lblCh2 и т.д.
На другой - 15 Трекбаров Trackbar1, Trackbar2 и т.д.
Нужно выставить положение трекбара в соответствии со значением лейбла.
Пишу так:
For i:=1 to 15 do
begin
With TLabel(FindComponent("lblCh"+IntToStr(i))) do
CH[i]:=255-StrToInt(Caption);
With TTrackbar(FindComponent("frmPult.TrackBar"+IntToStr(i))) do
position:=CH[i]; //здесь АV

end;


Вопрос, почему происходит AV?


 
Юрий Федоров ©   (2003-11-12 22:32) [1]

потому что не находится такой компонент, следовательно FindComponent возвращает nil ,указатель "вникуда"
Компонент не находится потому, что написано неправильно.
надо так :
With TTrackbar(frmPult.FindComponent("TrackBar"+IntToStr(i)))


 
Тохус ©   (2003-11-12 22:48) [2]

Все равно не пашет :((
Если прогонять по шагам, массив СH заполняется правильно, а вот
frmPult=nil
TTrackBar = symbol was eliminated by linker


 
Тохус ©   (2003-11-12 23:10) [3]

Хмм-м
Даже если указать напрямую
frmPult.TrackBar1.Position:=CH[1];
то получается AV.
Похоже туплю...
Модуль второй формы подключен, даже автозаполнение кода после
fmPult. работает...
В чем же проблема?..


 
Юрий Федоров ©   (2003-11-12 23:18) [4]

ессли бы не был подключен модуль, не откомпилиорвалось бы
frmPult=nil
вот и ответ, форма (экземпляр класса) не создаана
то есть лиибо ее нужно включить в AutoCreate список, либо создавать руками в какой-то момент


 
Тохус ©   (2003-11-12 23:26) [5]

Форма совершенно точно создана - это происходит в событии FormCreat главной формы:

Var NFPult:TfrmPult;

...

NFPult:=TfrmPult.Create(Application);
NFPult.Show;


Есть, правда одно НО: эта форма рисовалась моим коллегой, и он зачем-то сделал её на основе CLX. Возможно, загвоздка именно в этом. Хотя в других местах они вроде нормально взаимодействуют...


 
Юрий Федоров ©   (2003-11-12 23:34) [6]

загвоздка в том, что ты запоммнил указатель на создаанную форму в указателе NFPult :
NFPult:=TfrmPult.Create(Application);
а обраащааешься к ней через frmPult.
Это другой указаатель.
Напишии так

NFPult:=TfrmPult.Create(Application);
frmPult:=NFPult;
NFPult.Show;

Хотя это через одно место. И смесь CLX с VCL вв одном проекте - тоже через то самое место


 
Тохус ©   (2003-11-12 23:45) [7]

КРУТО!!!
Хоть и через одно место, а работает.
Большое спасибо.
А насчет CLX и VCL - проект уже такой большой, что я не очень знаю все его тонкости, - возможно, есть какая-то необходимость в такой смеси, а может он просто где-то нашел эту форму и ему в падлу было переделать. Хотя ComCtrls там достаточно сильно различаются. Надо будет узнать
Еще раз спасибо!



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
1-78890
OpenGL
2003-11-13 10:19
2003.11.24
Проблема, черт возьми!!!!!!!!!!!!!!!


3-78801
Yurij
2003-10-29 10:59
2003.11.24
Как импортировать данные с INI файла в базу Paradox


1-79053
Jul
2003-11-13 13:24
2003.11.24
Office_TLB


7-79200
Дмитрий П
2003-09-13 18:26
2003.11.24
Управление службами WinXP?


3-78845
tprkv
2003-11-04 08:37
2003.11.24
Как узнать - сколько строк в таблице (программно)