Форум: "Начинающим";
Текущий архив: 2007.10.28;
Скачать: [xml.tar.bz2];
ВнизДинамические объекты Найти похожие ветки
← →
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 мог напутать — это только пример…
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c