Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу обратиться к компоненту [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 будет обязательно найден


Наверх

Титульная страница Поиск, карта сайта Написать письмо