Ich hab mal wieder was vor und hab dabei Random(x) gefunden.
Ist auch eine lustige Sache... ausser es komm 6-stellige Zahlen raus, wo ich eigendlich nur von 0 - 30 will.
Ich will eine Art Glücksrad für Hausarbeit machen
Kann mir jemand sagen wie ich dem diese Grenze klar machen kann?
Wobei ich langsam glaube das ich das mit Random falsch begriffen habe...
Danke im vorraus.
Die Welt besteht aus Zahlen, also ist alles möglich.
Kommt drauf an was/wieviel du noch damit vor hast. Bei zwei Zeilen ist das ja noch übersichtlich. Du könntest dir eine Prozedur schreiben der du dein Objekt übergibst, die Prozedur positioniert dein Objekt dann zufällig. Dann musst du nur die Prozedur ändern (min, max ,etc.).
Jochen hat geschrieben:Kommt drauf an was/wieviel du noch damit vor hast. Bei zwei Zeilen ist das ja noch übersichtlich. Du könntest dir eine Prozedur schreiben der du dein Objekt übergibst, die Prozedur positioniert dein Objekt dann zufällig. Dann musst du nur die Prozedur ändern (min, max ,etc.).
Ich habs ja in einer Prozedur
Aber ich weiss das es auch funktionen gibt, hab aber glaube noch nie eine gemacht oder hinbekommen
Die Welt besteht aus Zahlen, also ist alles möglich.
// zufälliger Rückgabewert zwischen min und max
function RandomMinMax(min, max: integer): integer;
begin
Result := min + Random(max - min + 1); // +1 wegen oberer Schranke von Random
end;
//Button zwischen min und max positionieren
procedure RandomPos(btn: TButton);
begin
Randomize;
btn.Left := RandomMinMax(10, 100);
btn.Top := RandomMinMax(10, 100);
btn.Caption := IntToStr(btn.left) + ' ' + IntToStr(btn.top);
end;
{ TForm1 }
// neue Position bei klick
procedure TForm1.Button1Click(Sender: TObject);
begin
RandomPos(Sender as TButton);
end;
Jakane hat geschrieben:
Und wie bekomm ich da das Ergebnis in ein Button?
einfach:
Button auf
Ergebnis rein
Button zu.
nein, was meinst du genau?
WIllst du das ergebnis ausgeben oder willst du die funktion aufrufen ? oder nochwas anderes ??
Ergebnis ausgeben hat Ecliption schon gezeigt.
Aufrufen hat er eigentlich auch schon gezeigt: du gehst in den objektinspektor erstellst ein onClick ereignis und schreibst den Code von Ecliption rein...
// zufälliger Rückgabewert zwischen min und max
function RandomMinMax: integer;
begin
Randomize;
Result := Random(31); // +1 wegen oberer Schranke von Random
end;
// neue ButtonText bei klick
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Caption:= IntToStr(RandomButton);
end;
Eclipticon hat geschrieben:Wobei man Randomize eventuell separat initialisieren sollte, wenn diese Funktion haeufig aufgerufen wird
ist meiner Meinung nach Überflüssig. Result nimmt schon von haus aus den Rückgabewert der Funtion an. egal, ob char, Byte oder einen Selbst geschriebener Typ.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache und der Kreis Segeberg meine LIEBE
Also wenn ich das richtig verstanden habe existiert in dem Form das Bild eines Glücksrades mit 30 Feldern. Es soll dann zufälig ausgewählt werden auf welchem Feld der Button erscheint, um zusätzliche Informationen zu der zu verrichtenden Arbeit abzurufen. In dem Fall würde ich das ganze etwa so umsetzen:
var: Aufgaben: array [1..30,1..2] of integer;
Aufgabe: byte;
begin
for y:=1 to 30 do
begin
Aufgaben[y,1]:=Feldy.Left;
Aufgaben[y,2]:=Feldy.Top;
end;
Aufgabe:=random(30)+1;
Button1.Left:=Aufgaben[Aufgabe,1];
Button1.Top:=Aufgaben[Aufgabe,2];
end;
So ungefähr hab ich das aus der Anfrage heraus verstanden
Ansonsten würde ichs auch so wie die anderen schon beschrieben haben machen.
Eclipticon hat geschrieben:Wobei man Randomize eventuell separat initialisieren sollte, wenn diese Funktion haeufig aufgerufen wird
ist meiner Meinung nach Überflüssig. Result nimmt schon von haus aus den Rückgabewert der Funtion an. egal, ob char, Byte oder einen Selbst geschriebener Typ.
1.) Randomize <> Result
2.) In deinem Code heisst die function RandomMinMax, wird aber als RandomButton aufgerufen.
Zuletzt geändert von Eclipticon am Fr 22. Apr 2011, 21:08, insgesamt 1-mal geändert.