AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

CopyRect - Verschiebung nach links?

Ein Thema von thechus · begonnen am 3. Jun 2012 · letzter Beitrag vom 3. Jun 2012
Antwort Antwort
thechus

Registriert seit: 18. Dez 2011
30 Beiträge
 
#1

CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 11:58
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

Ich freue mich auf eure Hilfe,

Vielen Dank und Gruß,
thechus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.083 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 12:43
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.886 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 13:02
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!
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
thechus

Registriert seit: 18. Dez 2011
30 Beiträge
 
#4

AW: CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 15:42
AHHH!!!!


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

Jetzt weiß ich leider nicht wie ich die Bewegung begrenzen soll
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
  Mit Zitat antworten Zitat
thechus

Registriert seit: 18. Dez 2011
30 Beiträge
 
#5

AW: CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 15:53
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.886 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: CopyRect - Verschiebung nach links?

  Alt 3. Jun 2012, 16:22
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.

Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf