AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI und GDI+ Konfusion: Welches Canvas ist gemeint?
Thema durchsuchen
Ansicht
Themen-Optionen

GDI und GDI+ Konfusion: Welches Canvas ist gemeint?

Ein Thema von Jazzman_Marburg · begonnen am 1. Okt 2011 · letzter Beitrag vom 3. Okt 2011
Antwort Antwort
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
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#2

AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?

  Alt 2. Okt 2011, 12:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?

  Alt 3. Okt 2011, 12:55
Hallo freeway,

ach... wenns doch so einfach wäre

1te Frage
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
Das hilft leider garnicht -- und dass diese Zeilen unabhängig voneinander sein sollten, hatte ich auch gedacht, deswegen ja meine Anfrage. Ich kann ja mal demonstrieren, dass sie nicht unabhängig voneinander sind:
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:
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;
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.

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
Die Größe des GDI+Bitmaps ist tatsächlich vorgegeben -- aber wieso ist die Position auf das Schachbrett begrenzt?

Herrjeh, ich hoffe ich konnte mein Problem etwas verständlicher beschreiben.

Lieben Dank
Jazzman
Miniaturansicht angehängter Grafiken
bilder.png  
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#4

AW: GDI und GDI+ Konfusion: Welches Canvas ist gemeint?

  Alt 3. Okt 2011, 17:50
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:16 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