Dieser Code sollte eigentlich eine Blaue Kugel zu dem Punkt auf den man gecklikt hat über ein Image bewegen, es gibt auch keine Fehler, aber es funktionirt nicht
wisst ihr warum?
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ap.x:=0; ap.y:=0;
with image1 do
begin
for i:=ap.x to x do begin canvas.Draw(ap.x,ap.y,kugel); sleep(20); end;
for i:=ap.y to y do begin canvas.Draw(ap.x,ap.y,kugel); sleep(20); end;
end;
end;
Zuletzt geändert von felix96 am Do 15. Apr 2010, 21:45, insgesamt 1-mal geändert.
Danke schonmal für eure Antworten it´s not a bug, it´s a feature!
Du veränderst zwar das Image im Speicher, allerdings erfolgt die Ausgabe auf den Bildschirm erst, wenn deine schleife vorüber ist, und die Message-Loop deiner Anwendung wieder Kontrolle hat (weil die MessageLoop den Code für die Bildschirmausgabe aufruft).
Du kanns
Application.ProcessMessages for jedem "sleep" einfügen. Das ruft dann auch die MessageLoop auf.
Aber Achtung:
Wenn der Benutzer zweimal klickt, dann gibt es auch 2 mal MouseUp. Das 2te Mouse-up wird dann während ProcessMessages verarbeitet.
=> Das bedeutet, das Image1MouseUp ein zweites Mal aufgerufen wird, während es noch im ersten Durchlauf ist....
Besser als eine Schleife mit Sleep, wäre ein Timer, der regelmäßig deine Methode aufruft. Dann must du natuerlich die letzten Koordinaten im Object, und nicht lokal speichern.
Mit Aplication.possesmessages funktionirt es auch nicht, nicht mal zum schluss sieht man einen Punkt.
Es erscheint einfach nichts , so als hätte man ncht geklickt
Danke schonmal für eure Antworten it´s not a bug, it´s a feature!
Du zeichnest auf den Canvas des Image. Solange das Bild selbst nicht gezeichnet wird, siehst du gar nichts.
Vielleicht willst du auch über ein TShape mit dem Style stCircle nachdenken.
20 ms ist so gut wie nichts, erhöhe den Wert mal auf 40 oder 60. Wenn du bei diesem Ansatz bleiben möchtest. Bessere wäre wie schon erwähnt ein TImage zu nehmen oder einfach OnMouseDown. Das ins OnMouseUp zu packen ist sehr ungewöhnlich.
Scotty hat geschrieben:Du zeichnest auf den Canvas des Image. Solange das Bild selbst nicht gezeichnet wird, siehst du gar nichts.
Wie habe ich dass zu verstehen?
soll ich nach dem Aufruf image1.refresh aufrufen?
Und wenn ich´s ins OnMouseDown schreibe, passiert genau das gleiche: nix.
Danke schonmal für eure Antworten it´s not a bug, it´s a feature!