Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.28;
Скачать: CL | DM;

Вниз

Динамические объекты   Найти похожие ветки 

 
timekiller ©   (2007-10-03 16:44) [0]

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

   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!


 
clickmaker ©   (2007-10-03 16:51) [1]

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

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


 
Kolan ©   (2007-10-03 16:55) [2]

Я бы в 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 мог напутать — это только пример&#133


 
timekiller ©   (2007-10-03 17:12) [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>


 
timekiller ©   (2007-10-03 17:16) [4]

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

 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:23) [5]

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

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

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

:) Спасибы!



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
1-1186031887
Раф
2007-08-02 09:18
2007.10.28
Как в чужом приложение на MessageDlg нажать Да


2-1191594115
Pacific
2007-10-05 18:21
2007.10.28
Что не так?


11-1174917530
ElectriC
2007-03-26 17:58
2007.10.28
RichEdit XP


15-1190408875
Kostafey
2007-09-22 01:07
2007.10.28
С днем рождения ! 22 сентября


11-1175237504
Trible
2007-03-30 10:51
2007.10.28
PaintBox и GRushPanel