Na końcu programu mam umieszczone:
initialization
Randomize;
end.
Form jest wiele i w każdej z nich odwołuję się do do Randomize. Czy w głównej formie wystarczy użyć owego modułu czy też w każdej z nich przed wywołaniem random.
Na końcu programu mam umieszczone:
initialization
Randomize;
end.
Form jest wiele i w każdej z nich odwołuję się do do Randomize. Czy w głównej formie wystarczy użyć owego modułu czy też w każdej z nich przed wywołaniem random.
Procedurę Randomize
możesz umieścić gdziekolwiek w kodzie byle w takim miejscu programu aby spełniło 2 warunki:
Random
OnCreate
formy głównej, może to być właśnie sekcja initialization
jej modułu lub plik projektu (DPR) w każdym razie wywołuje się ją tylko raz niezależnie ile masz modułów to w jednym.kAzek
Mam wątpliwości co do tego czy randomize będzie ładowane na pozostałe formy, gdyż nie mam form w pliku dpr czyli
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
wywołuję pozostałe formy jak w tym przypadku dla formy2 poprzez unit1:
Unit1;
uses Unit2;
procedure wykonaj;
begin
TForm2 := TTForm2.Create(Application);
try
TForm2.ShowModal;
finally
TForm2.Free;
end;
end;
Ech, wiesz do czego służy sekcja initialization? Kod w tej sekcji wywołuje się jeszcze zanim cokolwiek się stanie. Oczywiście, jeśli w innym unicie będziesz miał w tej sekcji użyte Random(), to może to nie zadziałać, bo kolejność wywołania sekcji initialization jest raczej przypadkowa. W innym przypadku Twój kod MUSI zadziałać. I sposób tworzenia form nie ma tu żadnego znaczenia.
I powtórzę za @kAzek:
To są dwa warunki konieczne i wystarczające, żeby Random działało poprawnie.
@Bruno(M): wiesz w ogóle co robi procedura Randomize? No to patrz:
procedure Randomize();
begin
RandSeed := GetTickCount();
end;
Dużo, prawda? :]
Według mnie najlepszym miejscem na wywołanie tej procedury jest główny plik projektu, czyli plik .dpr
dla Delphi lub plik .lpr
dla Lazarusa. Głównie dlatego, że kod tego modułu wykonywany jest tylko raz, więc wywołując omawianą procedurę na jego początku (tuż po begin otwierającym główny blok kodu) ma się pewność, że wywołana zostanie tylko raz.
A w przypadku gdy nie wiemy czy procedurę tę wywołaliśmy czy nie, wystarczy kuknąć do tego modułu.