Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Canvas verschwindet, wenn man mit Windowsfenster drüber geht (https://www.delphipraxis.net/37128-canvas-verschwindet-wenn-man-mit-windowsfenster-drueber-geht.html)

Delphi-Noobie 31. Dez 2004 20:13


Canvas verschwindet, wenn man mit Windowsfenster drüber geht
 
hi,

ich bin grad dabei pacman zu proggen und hab das Problem, dass wenn ich auf dem Formular irgendetwas mit canvas gezeichnet habe und ein Object(Timage) oder einfach nur nen Windowsfenster drüber schiebe und es wieder wegnehme das gemalte weg ist. Gib es irgend ein anderes Canvas wo das nich auftritt?( es muss mit bitblt(); klappen) :(

Thx schonmal

Delphi-Noobie

Dax 31. Dez 2004 20:16

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
Eine Canvas ist nur eine Zeichenfläche. Sobald irgend etwas über dieser Fläche ist, wird der darunterliegende TEil der Bildinformation überschrieben und ist damit nicht mehr vorhanden. Du müsstest entweder mit PaintBoxen arbeiten, oder dafür sorgen, das kein Fenster über deine Canvas kommen kann ;)

Joe24 31. Dez 2004 21:02

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
Jedes Object mit visueller Oberfläche ist auch für diese selbst verantwortich.
d.h. muss diese zeichnen und auch wieder herstellen.
Das geschied in einer Methode, welche auf die Nachricht WM_Paint reagiert.
Normalerweise ist das die Procedure Paint.
In dieser muss das Aussehen des Objektes je nach Zustand definiert werden.

Delphi-Noobie 31. Dez 2004 21:27

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
hmm bei paintboxen klapt das auch net :(
Code:
bitblt(paintbox1.Canvas.Handle,50,50,70,70,image1.Canvas.Handle,0,0,srccopy);
liegt das jetzt nur an bitblt oder is das generell so?

@ Joe24 WIe geht das mit WM_Paint? Und dadurch kann man das verschwinden verhindern (z.B inna paintbox?)

Joe24 31. Dez 2004 22:29

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
Die einfachste Variante:

Mal angenommen die Figuren werden direkt auf das Formular gezeichnet:

Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
begin
  [Zeichne Hintergrund]
  [Zeichne Mauer o.ä.]
  [Zeichne Figur an stelle x,y]
  ...
end;
Vorteilhafter ist es für die Figuren eine eigene Klasse zu erstellen, z.b von TCustomControl
abgeleitet, die das Aussehen sowie das Verhalten definiert.
In dieser Klasse kann ebenfalls das OnPaint-Ereignis zum Zeichnen der Figuren
verwendet werden.
Auf dem Formular erzeugst du dann je nach Bedarf beliebig viele Instanzen dieser Klasse.

Luckie 1. Jan 2005 14:35

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
Im OnPaint alles zu zeichnen ist nicht sehr sinnvoll. Grafische Ausgaben sind immer sehr langsam, zeichnest du viel wird das sehr unschön: Flackern, ausbremsen deines Programmes, ...

Warum das, was du auf dem Canvas zeichnest, wieder wge ist, nach dem ein naderes Fenster deins überdeckt hat, kannst du hier nachlesen. Am Ende vom Artikel steht auch eine Lösung deines Problems.

Delphi-Noobie 1. Jan 2005 18:48

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
oki das mit onpaint klappt aber da ich über die images mit einem gif-Bild rüber gehe sind die Ecken des Gif-Bildes nicht durchsichtig, wenn das bild nicht viereckig ist (ich verwnde die Tgifimage unit).
Gibts da auch son Befehl wie Setbkmode(); um den Rand durchsichtig zu machen?

Luckie 2. Jan 2005 10:10

Re: Canvas verschwindet, wenn man mit Windowsfenster drüber
 
Bitte öffne einen neuen Thread bei einer neuen Frage. Ixch schließe mal hier, das das Problem wohl gelöst ist.

G S C H L O S S E N


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 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