Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi CopyRect - Verschiebung nach links? (https://www.delphipraxis.net/168669-copyrect-verschiebung-nach-links.html)

thechus 3. Jun 2012 10:58

CopyRect - Verschiebung nach links?
 
Liebes Forum,

ich möchte mit Hilfe von Canvas.Copy eine Gruppe von Bitmaps bewegen.
Um genau zu sein habe ich 2 "Armeen", die sich auf einander zubewegen.
Die linke Armee bewegt sich wie geplant nach rechts:

Code:
procedure TForm1.TimerArmeeRTimer(Sender: TObject);
 var x :integer;
     Ziel,Quelle :TRect;
 begin
 x := 1;
 repeat
  x := x+1;
  Sleep(60);
  Quelle := Rect(105 + x,240,184 + x,416);
  Ziel := Rect(105 + (x+1),240,184 + (x+1),416);
  canvas.CopyRect(Ziel, canvas, Quelle);
 until
  x >= 164;
 end;
Bei der zweiten Armee aber, die sich von rechts nach links zu bewegen hat, bewegt sich die Quelle bei folgender Prozedur nur ganz kurz und hört dann auf. Die Bitmaps verschwinden dann leider an dessen Grenze :

Code:
procedure TForm1.TimerAmeeGTimer(Sender: TObject);
 var x :integer;
     Ziel,Quelle :TRect;
 begin
 x := -1;
 repeat
  x := x-1;
  Sleep(40);
  Quelle := Rect(400 + (x),248,512 + (x),392);
  Ziel := Rect(400 + (x-1),248,512 + (x-1),392);
  canvas.CopyRect(Ziel, canvas, Quelle);
 until
  x <= 200;
 end;

Ich habe leider wirklich keine Ahnung, was ich da falsch mache :cry:

Ich freue mich auf eure Hilfe,

Vielen Dank und Gruß,
thechus

DeddyH 3. Jun 2012 11:43

AW: CopyRect - Verschiebung nach links?
 
Wenn x initial -1 ist und Du im ersten Schleifendurchlauf 1 subtrahierst, dann sind das nach Adam Riese -2 und damit auf jeden Fall <= 200.

himitsu 3. Jun 2012 12:02

AW: CopyRect - Verschiebung nach links?
 
Stimmen deine berechneten Positionen?
zeichne doch mal statt des CopyRect zwei unterschiedliche Rectangle.

Wie sind denn deine Armeen auf das Canvas gekommen und warum nicht nochmal genau so draufmachen?

Auf das Canvas der Form sollte man sowieso nichts zeichnen, wo es wichtig ist, daß es erhalten bleibt.
> Ein Canvas hat keinen Zwischenspeicher!

thechus 3. Jun 2012 14:42

AW: CopyRect - Verschiebung nach links?
 
AHHH!!!!
:wall::wall::mrgreen:

Man... solche Fehler bringen immer den Ganzen.......... naja egal.

Jetzt weiß ich leider nicht wie ich die Bewegung begrenzen soll :shock:
Was wäre denn eine geeignete Bedingung die Dinger anzuhalten?

Die Bitmaps habe ich selber mit dem Canvas Bildeditor erstellt.
Ich dachte, dass dies am besten passen würde.
Die Poitionen und alles stimmen. Sie bewegen sich jetzt auch nachdem ich die Bedingung auf eine positive Zahl umgeändert habe.

Nur weiß ich jetzt wie gesagt nicht wie die anhalten sollen.

Gibt es irgend einen weg, den Timer nach einer bestimmten Zeit anzuhalten? Wäre echt nett, wenn ihr mir da weiterhelfen würdet.
Ich arbeite derweil am Programm weiter und such selber nach einer Lösung.

Gruß,
thechus

thechus 3. Jun 2012 14:53

AW: CopyRect - Verschiebung nach links?
 
Hach ich habs :):)

Vielen Danke für euer Hilfe!

Hier meine Lösung, falls jemand selbes Problem hat:

Code:
procedure TForm1.TimerArmeeGTimer(Sender: TObject);
 var x, m :integer;
     Ziel,Quelle :TRect;
 begin
 x := -1;
 m := 0;
 repeat
  x := x-1;
  inc(m);
  Sleep(40);
  Quelle := Rect(400 + (x),248,512 + (x),392);
  Ziel := Rect(400 + (x-1),248,512 + (x-1),392);
  canvas.CopyRect(Ziel, canvas, Quelle);
 until
  m >= 100;
 if m >= 100 then TimerArmeeG.enabled := false;
 end;
Gruß,
thechus

himitsu 3. Jun 2012 15:22

AW: CopyRect - Verschiebung nach links?
 
PS: Du hast Timer und darin eine Schleife mit Sleep.
Wieso?

Die Variable "x" als Feld ins Private der Form auslagern und natürlich mit einem schönerem Namen.
Außerhalb der Timermethode diese Variablen initialisieren.
Dann noch die Schleife+Sleep ausbauen und die Möglichkeiten der Timer verwenden.

:angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz