Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c