Главная страница
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.024 c
3-78769
VID
2003-11-03 18:09
2003.11.24
Перехват IB-ошибок в приложении...


14-79188
Думкин
2003-11-03 05:17
2003.11.24
С днем рождения! 3 ноября.


3-78857
Andrey000
2003-11-03 11:56
2003.11.24
Помогите с ADO не освобождается память


14-79173
Anton.
2003-10-30 12:14
2003.11.24
Слова благодарности


3-78819
rosl
2003-11-06 08:57
2003.11.24
fast report