Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > label help please


Автор: muratboy31 25.2.2010, 12:28
i am trying to change label caption from xml file, i have several names in xml file and i want to show them in label caption 1 by 1 randomly... 

Код

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.Nodes['School'].ChildNodes do
  begin
  With Nodes['item']+i.ChildNodes do
    begin
    Label1.Caption := Nodes['Caption'].Text;
    end;
  end;
end;


and the xml file is like that;
Цитата

<?xml version="1.0" encoding="ISO-8859-1"?>
<School>

<item1>
<Caption>Jack</Caption>
</item1>

<item2>
<Caption>Leonard</Caption>
</item2>

<item3>
<Caption>Suzan</Caption>
</item3>

</School>

Автор: Frees 25.2.2010, 14:40
а xml создаете сами? структура у него не корректная.


зачем item1 ... item3  можно  просто  item, 

Код


<?xml version="1.0" encoding="ISO-8859-1"?>
<School>

<item Caption = "Jack">
</item>

<item Caption = "Leonard">
</item>

<item Caption = "Suzan">
</item>

</School>


но если настаиваете на вашем варианте 

то
Код

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i := 2;
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.FindNode('School').ChildNodes do
  begin
  With FindNode('item' + intToStr(i)).ChildNodes do
    begin
    Label1.Caption := FindNode('Caption').Text;
    end;
  end;
end;


Автор: muratboy31 25.2.2010, 14:58
yes i will create the xml file with every students private blog page...

example:
<?xml version="1.0" encoding="ISO-8859-1"?>
<School>
<item1>
<Caption>Jack</Caption>
<Link>www.blogger.com/Jack</Link>
</item1>

<item2>
<Caption>Leonard</Caption>
<Link>www.blogger.com/Leonard</Link>
</item2>

<item3>
<Caption>Suzan</Caption>
<Link>www.blogger.com/Suzan</Link>
</item3>
</School>

thats why i choosed item with numbers (item1, item2, item3....)

i used the code but it doesnt show anything in label object... is it because i use     XMLdoc.LoadFromFile('Names.xml');        with timer
Код

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.Nodes['School'].ChildNodes do
  begin
  With Nodes['item' + intToStr(i)].ChildNodes do
    begin
    Label1.Caption := Nodes['Caption'].Text;
    end;
  end;
end;

Автор: Frees 25.2.2010, 14:59
поправил код в посте выше

Автор: muratboy31 25.2.2010, 15:08
am i doing something wrong or it doesnt change the label text ...
i attached the project file, can you please have a look ...
thanks

Автор: Frees 25.2.2010, 15:19
Код

url: string;
....
procedure TMainForm.Label1Click(Sender: TObject);
begin
  WebBrowser1.Navigate(url);
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i := 2;
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.FindNode('School').ChildNodes do
  begin
  With FindNode('item' + intToStr(i)).ChildNodes do
    begin
    Label1.Caption := FindNode('Caption').Text;
    url := FindNode('Link').Text;
    Label1.OnClick := Label1Click;
    end;
  end;
end;


так?

Автор: muratboy31 25.2.2010, 15:29
small question is it normal that name doesnt change in the label, it always show   Leonard     item2 caption, never change...

Автор: Frees 25.2.2010, 15:34
Цитата(muratboy31 @  25.2.2010,  18:29 Найти цитируемый пост)
small question is it normal that name doesnt change in the label, it always show   Leonard     item2 caption, never change...


Код

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer;
begin
i := 2;// вот поэтому только 2 видиш



а как надо... я не пойму


Добавлено @ 15:36


Random
Код

var
i:integer;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.FindNode('School').ChildNodes do
  begin
  i := Random(Count);
  With FindNode('item' + intToStr(i)).ChildNodes do
    begin
    Label1.Caption := FindNode('Caption').Text;
    url := FindNode('Link').Text;
    Label1.OnClick := Label1Click;
    end;
  end;
end;

Автор: muratboy31 25.2.2010, 15:37
thanks

Автор: muratboy31 25.2.2010, 16:02
i am sorry again, what is that error mean ?

user posted image

Автор: Frees 25.2.2010, 20:04
Цитата(muratboy31 @  25.2.2010,  19:02 Найти цитируемый пост)
i am sorry again, what is that error mean ?

не найден item с искомым номером в файле

Автор: muratboy31 25.2.2010, 20:37
yes but i have xml items with numbers like that ;
Цитата

<?xml version="1.0" encoding="ISO-8859-1"?>
<School>
<item1>
<Caption>Jack</Caption>
<Link>www.blogger.com/Jack</Link>
</item1>

<item2>
<Caption>Leonard</Caption>
<Link>www.blogger.com/Leonard</Link>
</item2>

<item3>
<Caption>Suzan</Caption>
<Link>www.blogger.com/Suzan</Link>
</item3>
</School>


and this is the code i use;
Код

procedure TMainForm.Timer1Timer(Sender: TObject);
var
i:integer; 
begin
XMLdoc.LoadFromFile('Names.xml');
With XMLdoc.ChildNodes.FindNode('School').ChildNodes do
  begin
  i := Random(Count);
   With FindNode('item' + intToStr(i)).ChildNodes do
    begin
    Label1.Caption := FindNode('Caption').Text;
    Link := FindNode('Link').Text;
    Label1.OnClick := Label1Click;
    end;
  end;
end;


i still get the error...


Автор: Frees 25.2.2010, 21:01
возможно
Код

i := Random(Count  - 1) + 1;

Автор: muratboy31 25.2.2010, 21:54
thanks Frees
it works but it only random only between item1 and item2... no other items

Автор: Frees 25.2.2010, 22:34
еслия я вас правельно андестент то наверно надо
i := Random(Count ) + 1;

Автор: muratboy31 25.2.2010, 22:41
thanks frees
do u not think it is better to download the xml file on form create and load the item with timer ???

Автор: muratboy31 26.2.2010, 10:19
problem is in the threat below...

Автор: muratboy31 26.2.2010, 15:23
why this doesnt work ?

Код

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i:integer;
begin
XMLdoc.LoadFromFile('names.xml');
if XMLdoc.ChildNodes.FindNode('School') then begin
With XMLdoc.ChildNodes.FindNode('School').ChildNodes do
  begin
  i := Random(Count) + 1;
  if FindNode('item' + intToStr(i)) then begin
   With FindNode('item' + intToStr(i)).ChildNodes do
    begin
    Label1.Caption:= FindNode('Caption').Text;
    Link := FindNode('Link').Text;
    Label1.OnClick := Label1Click;
     end;
     end;
    end;
  end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)