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

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

Динамические объекты [D6]


timekiller ©   (2007-10-03 16:44:00) 

Сутки добрые, подскажите чайнику!!
Есть код

   if FNode.selectNodes('//name').item[i].text = 'check' then
   begin
     ChBox:=TCheckBox.Create(MainFRM);
     ChBox.Parent:=MainFRM;
     ChBox.Name:=FNode.selectNodes('//proname').item[i].text;
     ChBox.Caption:=FNode.selectNodes('//data').item[i].text;
................

По этой батве создаются объекты из XMLевского файла
Тоесть читаются теги, присваивается имя чекбокса и его свойство (если =1 то не чекет например)

Объектов ChBox огромное количество, а Как сделать свойство OnClick к ОДНОМУ ОПРЕДЕЛЕННОМУ объекту из этого списка? Мне подсказали использовать Tag, но чето в теле программы он никак не вяжется .. А на процедуру Checkbox1Click реагирует только ПОСЛЕДНИЙ из всех ChBox падла!!

HELP!


timekiller   (2007-10-03 17:23:00) [1]

==================================================
ВСЁ! ТЕРЬ ЗАРАБОТАЛО
==================================================

Исправлен код:

procedure TMainFRM.CheckBox1Click(Sender: TObject);
begin
case TCheckBox(Sender).Tag of
 !!!0: ShowMessage('Первый!');
 !!!1: ShowMessage('Второй!');
end;
end;

:) Спасибы!


timekiller   (2007-10-03 17:16:00) [2]

Тфу блин , начало кода :

 for i:=0 to FNode.selectNodes('//item').length-1 do
 begin
   if FNode.selectNodes('//name').item[i].text = 'check' then
...................................


timekiller   (2007-10-03 17:12:00) [3]

Неа .. всеравно срабатывает Последний, говорит что Первый! :)))
Вот код, подскажите что не так, помогите, цел день уже глаза вкучу .....:

   if FNode.selectNodes('//name').item[i].text = 'check' then
   begin
     ChBox:=TCheckBox.Create(MainFRM);
     ChBox.Parent:=MainFRM;
     ChBox.Name:=FNode.selectNodes('//proname').item[i].text;
     ChBox.Caption:=FNode.selectNodes('//data').item[i].text;
     ChBox.Top:=StrToInt(FNode.selectNodes('//top').item[i].text);
     ChBox.Left:=StrToInt(FNode.selectNodes('//left').item[i].text);
     ChBox.Width:=StrToInt(FNode.selectNodes('//width').item[i].text);
     ChBox.Height:=StrToInt(FNode.selectNodes('//height').item[i].text);
     if FNode.selectNodes('//ch').item[i].text='0' then ChBox.Checked:=False else ChBox.Checked:=True;
     SG_Values.RowCount:=SG_Values.RowCount+1;
     SG_Values.Cells[0,i]:=('check');
     SG_Values.Cells[1,i]:=(ChBox.Name);
     SG_Values.Cells[2,i]:=(ChBox.Caption);
     SG_Values.Cells[3,i]:=(IntToStr(ChBox.Top));
     SG_Values.Cells[4,i]:=(IntToStr(ChBox.Left));
     SG_Values.Cells[5,i]:=(IntToStr(ChBox.Width));
     SG_Values.Cells[6,i]:=(IntToStr(ChBox.Height));
     SG_Values.Cells[8,i]:=(FNode.selectNodes('//ch').item[i].text);
     BoxY:=8; ChBox.Tag:=i;
     ChBox.Tag:=i;
     ChBox.OnClick:=CheckBox1Click;
   end;

procedure TMainFRM.CheckBox1Click(Sender: TObject);
begin
case TCheckBox(Sender).Tag of
  1: ShowMessage('Первый!');
  2: ShowMessage('Второй!');
end;
end;

Вот XML

 <item>
   <name>check</name>
   <proname>Check1_CHB</proname>
   <data>Клацни меня!</data>
   <top>180</top>
   <left>250</left>
   <width>200</width>
   <height>15</height>
   <ch>1</ch>
 </item>
 <item>
   <name>check</name>
   <proname>Check2_CHB</proname>
   <data>И меня!</data>
   <top>200</top>
   <left>250</left>
   <width>200</width>
   <height>15</height>
   <ch>1</ch>
 </item>


Kolan   (2007-10-03 16:55:00) [4]

Я бы в Tag положил сам объект:

ChBox.Tag := Integer(FNode.selectNodes('//name').item[i]);

procedure TForm1.CheckBoxClick(Sender: TObject);
begin
 if Sender is TCheckBox then
   TXMLNode((Sender as TCheckBox).Tag).Text := '';
end;


ЗЫ
С XML мог напутать — это только пример…


clickmaker   (2007-10-03 16:51:00) [5]

ChBox.Tag := UniqueID;
ChBox.OnClick := CheckBoxClick;

procedure TForm1.CheckBoxClick(Sender: TObject);
begin
 case TCheckBox(Sender).Tag of
   1: ...
   2: ...
 end;
end;


Наверх

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