![]() |
Canvas.CopyRect ?¿?
Moin an die DelphiPriester(kappiert->Priester, Orakel^^)
Ich habe eine Frage zu einem Abschnitt in meine Buch(Delphi für Kids) Ich bin grad bei dem Kapitel über Canvas. Hier wird beschrieben wie man eine Zeichnung von Canvas erzeugt, bewegt und löscht. Hier der Code:
Delphi-Quellcode:
Meine Frage bezieht sich nur auf die Bewegung, alles andere ist ja nicht wirklich schwer.
//Angaben der Variablen
procedure TForm1.FormCreate(Sender: TObject); begin x := 30; y := 30; Dicke := 180; end; //Erzeugung der Zeichnung procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Ellipse(x,y,x+Dicke,y+Dicke); end; //Bewegung procedure TForm1.Button2Click(Sender: TObject); var i: Integer; Quelle, Ziel: TRect; begin for i := x-5 to ClientWidth - Dicke - x - 5 do begin Quelle := Rect(i, y-5, i+Dicke+5, y+Dicke+5); Ziel := Rect(i+1, y-5, i+Dicke+6, y+Dicke+5); Canvas.CopyRect(Ziel,Canvas,Quelle); sleep(10); end; end; Was zum Teufel bedeutet das: Quelle := Rect(i, y-5, i+Dicke+5, y+Dicke+5); Ziel := Rect(i+1, y-5, i+Dicke+6, y+Dicke+5); Ich versteh das so, dass die Quelle und das Ziel angebgen werden. Doch warum verschoben(y-5...)? Könnt ihr mir das erklären? Und wenn ich den Code ohne diese Verschiebung ausführe bekomme ich son dummen Streifen hinter den sich bewegenden Kreis. [edit=Christian Seehase]Delhpi-Tags gesetzt. Bitte künftig selber machen. Mfg, Christian Seehase[/edit] |
Re: Canvas.CopyRect ?¿?
Ich denke, der Rand soll die alte Ellipse überdecken, denn mit CopyRect bleibt das alte Bild ja bestehen.
PS: Bitte benutze für Code die [delphi]-Tags, dann wird es um einiges lesbarer. |
Re: Canvas.CopyRect ?¿?
ja aber warum wird die quelle auch verschoben?
ich denk dran das nächste mal die tags zu nutzen |
Re: Canvas.CopyRect ?¿?
Die Quelle muss ja verschoben sein, damit ein Streifen weiße Pixel mitkopiert wird. Das Ziel hat dann einfach die gleichen Ausmaße.
|
Re: Canvas.CopyRect ?¿?
axo jetzt versteh ich es.
danke! |
Re: Canvas.CopyRect ?¿?
noch ne frage:
ich versuche die einen balken mit hilfe des timers hin und herz zu bewegen wenn ich auf die pfeiltasten drücke. aber ich krieg das irgendwie nicht gebackn:
Code:
eigentlich sollte der timer die prozdeur wiederholen und dann die canvas zeichnung immer neu zeichnene solange vk_up gedrückt ist...tut er aber nicht.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x,y,Breite, Hoehe,i, z: Integer; oben, unten: Boolean; Quelle, Ziel: TRect; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin x := 30; y := 180; Breite := 15; Hoehe := 100; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = vk_Space then begin Canvas.Brush.Color := clGreen; Canvas.Rectangle(x,y,x+Breite,y+Hoehe); end; if key = vk_Up then begin oben := true; end; if key = vk_Down then unten := true; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key = vk_Up then oben := false; if key = vk_Down then unten := false; end; procedure TForm1.Timer1Timer(Sender: TObject); begin if oben then begin Canvas.Rectangle(x,y-10,x+Breite,y+Hoehe-10); end; if unten then begin Canvas.Rectangle(x,y+10,x+Breite,y+Hoehe+10); end; end; end. und da ist noch ein problem. habt ihr eine idee, wie ich es hinkriege, dass die zeichnung, die vorher da war, verschwindet? vllt habe ihr ja ne bessere idee als das mit dem timer... evtl könnt ihr auch was mit Canvas.CopyRect anfangen, aber ich schaff das damit nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz