hmm ok, zu lange her das ichs genutzt habe war ja auch nur ein Beispiel.
@Delph.Narium: Du hast einen kleinen Fehler in deinem Beispiel:
Image1.Left := Image1.Left + Random(iRandom);
Image2.Left := Image2.Left + Random(iRandom);
Image3.Left := Image
2.Left + Random(iRandom);
Das mit der Bedingung der Schleifen Nutzung hatte ich garnicht gesehen. Die Schleifen hatte halt den Nachteil das immer Bild 1 als Erstes bewegt wird (evtl. daher im Vorteil bzw. es könnten mehrere gleichzeitig das Ziel erreichen).
Hier mal dasBeispiel von Delphi.Narium etwas erweitert.
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Vcl.Imaging.pngimage,
Vcl.ExtCtrls;
type
TForm1 =
class(TForm)
Image1: TImage;
Button1: TButton;
Image2: TImage;
Image3: TImage;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
iSleep : Integer;
iRandom : Integer;
sMoveImage :
String;
begin
Image1.Left := 0;
//
Image2.Left := Image1.Left;
//setz die Position der Images zurück um einen neuen Durchlauf starten zu können
Image3.Left := Image1.Left;
//
iSleep := 10;
// Wertebereich für die Pausen per Sleep, eventuell anpassen.
// Die Pausen werden dadurch unterschiedlich lang.
iRandom := 5;
// Wertebereich für die zufällige Verschiebung der Bilder, eventuell anpassen.
// Die Anzahl der Pixel, um die verschoben wird, ändert sich je Schleifendurchlauf und je Bild.
if (Image1.Left < 400)
and (Image2.left < 400)
and (Image3.left < 400)
then begin
begin
repeat
sMoveImage := '
Image' + inttostr(random(3) + 1);
//Zufällige Auswahl welches Bild bewegt werden soll.
TImage(Form1.FindComponent(sMoveImage)).Left := TImage(Form1.FindComponent(sMoveImage)).Left + Random(iRandom);
Application.ProcessMessages;
Sleep(Random(iSleep));
until (image1.left>399)
or (Image2.Left>=399)
or (Image3.Left>=399);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
// Je nach Delphiversion (insbesondere bei älteren) erforderlich.
// Sollte aber nur einmal aufgerufen werden, daher ins FormCreate verschieben.
end;
end.