Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
7-79192
p
2003-09-15 12:43
2003.11.24
Как програмно выключить копьютер


1-79036
Sveta
2003-11-13 15:51
2003.11.24
Работа с txt-файлами


6-79072
aj_ua
2003-09-30 15:17
2003.11.24
Разрыв Dial-up соединения под Windows 2000


1-78918
SergP
2003-11-12 09:33
2003.11.24
TDatetime.


3-78772
Liavik
2003-11-04 12:41
2003.11.24
DBNavigator.




   Наверх