Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tag-Benutzung in einer Schleife (https://www.delphipraxis.net/53831-tag-benutzung-einer-schleife.html)

Nikolas 23. Sep 2005 12:49


Tag-Benutzung in einer Schleife
 
Hi,

Ich habe folgendes Problem:
In einer Funktion will ich etwas in eine Zeile eines Stringgrids schreiben. Diese Funktion rufe ich mehrmals hintereinander in einer for-Schleife auf. Um mir zu merken, in welche Zeile die Funktion schreiben soll, erhöhe ich nach dem die Funktion in eine Zeile geschrieben hat, den Tag des Grids.

Der Code sieht etwa so aus:

Delphi-Quellcode:
Procedure schreiben(var sg: tStringgrid);
var
tag: byte;
i: byte;
begin

i:= random(5);

tag:= sg.tag;

 with sg do
 begin
 foo;
 cells[0,tag]:= inttostr(i);
 end;

sg.tag := sg.tag+1;
{sleep(50});

end;

// Der Aufruf:

for i:=0 to 5 do
begin
schreiben(sg1);
{showmessage(inttostr(i))};
end;
Wenn ich diesen Code ausführe, stehen immer die gleichen Zahlen in den verschiedenen Zellen (kein Zufall). Führe ich das showmessage aus, sind es unterschiedliche Zahlen.
Lasse ich nur das sleep ausführen, steht von sleep(0) bis sleep(20) die gleiche Zahl in den Zellen, ab sleep(50) wieder unterschiedliche.

Kann mir da jemand helfen? Irgendwie sieht es so aus, als ob das Erhöhen des Tags nur verzögert oder gar nicht wirkt...

marabu 23. Sep 2005 13:04

Re: Tag-Benutzung in einer Schleife
 
Hi,

es gibt bestimmt eine bessere Lösung für die Zeilenaddressierung, aber dein Code funktioniert auch mehr als einmal, wenn du eine zusätzliche Zeile einfügst:

Delphi-Quellcode:
// Der Aufruf:
sg1.tag := 0;
for i := 0 to 5 do
begin
  schreiben(sg1);
  {showmessage(inttostr(i))};
end;
Grüße vom marabu

Nikolas 23. Sep 2005 13:07

Re: Tag-Benutzung in einer Schleife
 
Darüber wollte ich mir später Gedanken machen. Mir gehr es primär um die Erhöhung des Tags. Das einfachste wäre natürlich eine globale Variable, aber ich glaube die sind nicht so beliebt hier...

Icarus666 23. Sep 2005 13:15

Re: Tag-Benutzung in einer Schleife
 
Ohne jetzt den Quellcode näher betrachtet zu haben, würde ich sagen, du hast vergessen

Delphi-Quellcode:
randomize;
aufzurufen, bevor du die Zufallszahl benutzt.

marabu 23. Sep 2005 13:21

Re: Tag-Benutzung in einer Schleife
 
Zitat:

Zitat von Toxman
Mir gehr es primär um die Erhöhung des Tags.

Zwischen meinen Zeilen darfst du lesen, dass dein Code in Ordnung ist. Wenn etwas schief geht, dann in der Prozedur Foo!!

Zitat:

Zitat von Toxman
Das einfachste wäre natürlich eine globale Variable, aber ich glaube die sind nicht so beliebt hier...

Lass dich nicht einschüchtern. Wenn du weißt, was du tust, dann darfst du alles.

Grüße vom marabu


@icarus666:

Randomize() sorgt lediglich dafür, dass der Generator für die Zufallswerte neu initialisiert wird. Auch ohne diese Prozedur werden Werte in pseudo-zufälliger Folge erzeugt, allerdings immer die gleiche Folge nach jedem Programmstart - gut für Tests.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz