![]() |
GDI und GDI+ Konfusion: Welches Canvas ist gemeint?
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 ![]()
Delphi-Quellcode:
Die unteren 5 Zeilen sollen ein rotes Rechteck mit schwarzer Umrandung zeichnen. Soweit ok.
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 ) ); ... 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 |
AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?
1te
die 3er & 5er Zeilen sollten unabhängig voneinander sein, 3er erzeugt ein Bild, 5er malt was evtl. hilft nach dem Auskommentieren nochmals das Program zu compilieren & erzeugen 2te Frage 3 Zeilen die Grösse ist vorgegeben, der Rest ist dann nicht sichtbar 5 Zeilen der (Tform) Canvas ist beliebig erweiterbar, mach mal das fenster grösser oder kleiner |
AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo freeway,
ach... wenns doch so einfach wäre :-( Zitat:
Das nachfolgende Coding erzeugt ein Bild1. Danach lösche ich Zeile 3 (Graphics.DrawImage()) und erhalten Bild2. Danach lösche ich die ersten 3 Zeilen komplett und erhalte Bild3.
Delphi-Quellcode:
Auf Bild1 sieht man den roten Rahmen unterhalb des Schachbretts -- der m.E. mit einfachen GDI Mitteln gezeichnet wurde. Und obwohl die ersten drei Zeilen (GDI+) keine Verbindung zum Canvas haben (?) sind sie doch die Voraussetzung, dass überhaupt was gezeichnet wird. Dieses Verhalten verstehe ich nicht.
procedure TMeineNeueKlasse.DrawColorBar;
var Graphics : IGPGraphics; ColorBar : IGPBitmap; begin ColorBar := TGPBitmap.Create ( 50, 50 ); Graphics := TGPGraphics.Create( Canvas.Handle ); Graphics.DrawImage( ColorBar, 0, 50 ); Canvas.Pen.Color := clRed; Canvas.Rectangle( Rect( 10, 450, 410, 465 ) ); Canvas.Refresh; end; Zitat:
Herrjeh, ich hoffe ich konnte mein Problem etwas verständlicher beschreiben. Lieben Dank Jazzman |
AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?
im ersten Teil wird ein Bild erzeugt, das dann in die Canvas kopiert wird
im zweiten Teil wird direkt auf Canvas gezeichnet ich hab mal deinen Code unter XE2 laufen lassen und deine Schritte, wie beschrieben, nachvollzogen zumindest wird bei mir in allen 3 Fällen, das rote Rechteck, immer angezeigt, von daher kann ich dir leider nicht weiterhelfen :( btw du solltest die Objecte die du generiert hast auch wieder freigeben ColorBar.Free Graphics.Free |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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