OK, hab mal noch 'ne Umwandlung zwischen Integer und Cardinal reingemacht ... die "unsigned"-Warnung sollte nun weg sein (tja, das kommt davon, wenn
ASM bei sowas nicht meckert -.-'')
Delphi-Quellcode:
Function Random(Range: LongInt): LongInt;
Begin
RandSeed := RandSeed * 134775813 + LongInt(((GetTickCount and 3) or 1);
//Result := Int64(Range) * Int64(LongWord(RandSeed)) div Int64($100000000);
Result := Int64(Int64(Range) * Int64(LongWord(RandSeed))) shr 32;
End;
Baue diese Funktion am Besten nicht direkt in TForm1 ein ... einfach nur vor die ersten Funktionen (nach "implementation")
Die anderen Fehler scheinen mir daran zu liegen, daß du nur die Funktion in TForm1 definiert, aber die Funktion selber nicht richtig, oder garnicht im Implementations-Abschnitt eingebaut wurde.
PS: in Delphi selber sind die Funktionen etwa so in der System-
Unit definiert.
Delphi-Quellcode:
Var RandSeed: LongInt;
Procedure Randomize;
Var Count: LargeInt;
Begin
If QueryPerformanceCounter(Count) Then RandSeed := Count
Else RandSeed := GetTickCount;
End;
Function Random(Range: LongInt): LongInt; Overload;
// Borland Delphi v7.0 Build 4453
Begin
RandSeed := RandSeed * 134775813 + 1;
//Result := LargeInt(Range) * LongWord(RandSeed) div LargeInt($100000000);
Result := TLargeIntRec(LargeInt(Range) * LongWord(RandSeed)).Hi;
End;
Function Random: Extended; Overload;
// Borland Delphi v7.0 Build 4453
Begin
RandSeed := RandSeed * 134775813 + 1;
//Result := 1.0 * LongWord(RandSeed) / LargeInt($100000000);
Result := LongWord(RandSeed) / LargeInt($100000000);
End;
Wenn du dort genau hinsieht, dann wird du bemerken, daß beim Aufruf von Random der Wert rein mathematisch erechnet wird und somit in Wirklichkeit auch wieder eine fest definierte Zahlenreihe entsteht,
auch wenn diese Reihe durch den Aufruf von Randomize immer mal an 'ner anderen Stelle beginnt.