Einzelnen Beitrag anzeigen

Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

GDI und GDI+ Konfusion: Welches Canvas ist gemeint?

  Alt 1. Okt 2011, 19:07
Hallo Gemeinde!
Es ist zum Haareraufen -- ich versteh einfach nicht, wie ich mir folgendes Verhalten erklären soll:
Ich leite von einer Basis-Klasse (TGraphicControl) eine neue Klasse ab. Dort möchte ich mit GDI und GDI+ (Lib von Erik van Bilsen) etwas auf dem Canvas zeichnen. Die Verwirrung entsteht nun an folgender Stelle:
Delphi-Quellcode:
procedure TNeueKlasse.DrawColorBar;

var ColorBar : IGPBitmap;
...

Colorbar := TGPBitmap.Create( 450, 80);
Graphics := TGPGraphics.Create( Canvas.Handle );
Graphics.DrawImage( ColorBar, 0, 300 );

Canvas.Brush.Style := bsSolid;
Canvas.Brush.Color := clWhite;
Canvas.FillRect( Rect( 10, 450, 410, 465 ) );
Canvas.Pen.Color := clBlack;
Canvas.Rectangle( Rect( 10, 450, 410, 465 ) );
...
Die unteren 5 Zeilen sollen ein rotes Rechteck mit schwarzer Umrandung zeichnen. Soweit ok.
Aber: Sobald ich die ersten 3 Zeilen auskommentiere sehe ich kein rotes Rechteck mehr!
Dabei haben diese drei Zeilen doch garnichts (?) mit den unteren Zeilen zu tun, oder doch?
In diesen oberen drei Zeilen bereite ich das GDI+ Zeichnen vor -- da ich es an dieser Stelle aber doch nicht benötige, habe ich es mal auskommentiert und war verbrlüfft, dass auch das normale GDI Zeichnen nicht mehr wollte. Es wird schlicht nichts gezeichnet.
Kann das jemand erklären?

Vielleicht nocht eine kleine Zusatzfrage:
Betrachten wir nur mal die ersten drei Zeilen. Damit kann ich auf dem Canvas, wo die Basisklasse schon etwas gezeichnet hat, zeichnen -- aber nicht darüberhinaus! Also ich kann kein Rechteck außerhalb dieses Canvas's zeichnen.
Mit den unteren 5 Zeilen hingegen kann ich locker auch darüberhinaus zeichnen. D.h. das GDI+ ist auf das Canvas der Basisklasse beschränkt, das normal GDI hingegen nicht. Das ist doch sehr merkwürdig.

Kann mir jemand meine Verwirrung ein wenig helfen zu entwirren?

Lieben Dank & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat