Also bei der, von jfheins genannten, Lösung kommt es scheinbar zu der von mir angesprochenen Dopplung, bei der der Timer einmal manuell und kurz darauf nochmal durch den Intervall ausgelöst wird.
Und bei der, von himitsu genannten, blick ich nicht wirklich durch:
Der Vorschlag funktioniert gut:
Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
begin
// verfehlt ... machwas, wenn danebengecklickt wird
Timer1Timer(nil);
end;
Aber deine erste Zeile verstehe ich nicht so wirklich.
Timer1Timer(nil);
und dann
if not Assigned(Sender) then
oder
if Sender = nil then
um zu prüfen, ob es "manuell" ausgelöst wurde.
Ich denke in der geht es genau um mein Problem, aber bin in Delphi noch Anfänger.
Ich probiere erst einmal ein bisschen rum und gucke ob ich nicht irgendwie dahinterkomme. ^^
EDIT: Also ich habe wirklich keine Ahnung. Alles, was ich versuche führt zu mehr Problemen. Man kann unabhängig von Start/Stop, das Spiel verlieren, gewinnen, alles anklicken. Ich weiß wirklich nicht weiter.
EDIT2:
Also ich habe es nun Folgendermaßen gemacht:
Delphi-Quellcode:
procedure TForm1.FormClick(Sender: TObject);
begin
H:=1;
Timer1Timer(nil);
end;
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
G:=0;
Timer1Timer(nil);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if F=1 then //Eine weitere Random-Variable. ^^ Sorry, ich ersetze die später.
begin
F:=0;
Exit;
end;
if Sender=nil then
begin
F:=1;
end;
if (G=0) and (H=0) then
begin
G:=1;
H:=0;
Shape1.Left:=trunc(random*(Form1.Width-64))+16;
Shape1.Top:=trunc(random*(Form1.Height-64))+64;
end
else
begin
Button1Click(Self);
end;
end;
Es funktioniert.... Danke.
Wenn ihr eine Idee habt, wie ich das besser hinkriegen könnte, könnt ihr weiter Vorschläge machen. ^^