![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические объекты [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;