![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не могу обратиться к компоненту [D6, Win95/98]
Новенький в Делфи © (2002-05-19 15:23:00)Есть двумерный массив TPanel (создан програмно), соответственно у каждой панели уникальное имя.
Когда я пытаюсь изменить у какой-либо панели цвет следующим образом:
(FindComponent(NameStr) as TPanel).color:=clGray;
(namestr - имя компонента)
то мне выдаётся ошибка Access vialation что-то такое...
Но что мне не понятно больше всего, так это если я для эксперимента ставли следующие строки:
(FindComponent(NameStr) as TPanel).Free;
то ошбики не было, но собственно и компонента не исчезала с формы, а случае если написать следующее:
ShowMEssage((FindComponent(NameStr) as TPanel).Caption);
то мне показывает пустой Caption, хотя это не так.
Помогите разобраться что не так?
Новенький в Делфи (2002-05-19 22:52:00) [1]MBo Спасибо! Попробую!
MBo (2002-05-19 22:47:00) [2]Owner у тебя - не форма, а какая-то Form1.pnTable.
Она ими владеет, для НЕЕ и вызывай FindComponents.
Form1.pnTable.FindComponent...
Новенький в Делфи (2002-05-19 20:46:00) [3]в конце имелась ввиду процедура ChetClick ( обработчик нажатия на панель)
Новенький в Делфи (2002-05-19 20:41:00) [4]1) я уверен что имя панели есть.
2) для эксперемента вместо переменной ставил явное имя, всё равно не работает.
for i:=0 to High(chet1)-1 do
for j:=0 to High(chet1)-1 do
begin
Chet1[i+1,j+1]:= TPanel.Create(Form1.pnTable);
with Chet1[i+1,j+1] do
begin
Parent:=Form1.pnTable;
BevelInner:=bvRaised;
visible:=true;
Name:="p1_"+IntToStr(j+1)+"_"+IntToStr(i+1)+"_";
Caption:="";
SetBounds(SX[1]+(j*20),SY[1]+(i*20),20,20);
onCLick:= Form1.ChetClick;
Color:=clSilver;
end;
вообщем ногами не бейте, как написал так написал :)
дальше в другой процедуре
...
NameStr:= TPanel(Sender).name;
NameStr[2]:="2"; // у меня четыре массива Chet1,chet2,chet3,chet4, соответственно каждый создавался таким же кодом.
(FindComponent(NameStr) as TPanel).color:=clGray;
Lady BadnBadn (2002-05-19 18:03:00) [5]Как вы создаете компоненты? (код в студию)
Как генерите имя панелей?
И, когда находите компонент, проверяйте его на Nil(сохраняйте в промежуточную переменную).
Anatoly Podgoretsky (2002-05-19 17:38:00) [6]Ты очень самоуверен, что namestr будет обязательно найден