AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Thema durchsuchen
Ansicht
Themen-Optionen

GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

Ein Thema von Jazzman_Marburg · begonnen am 14. Mai 2011 · letzter Beitrag vom 14. Mai 2011
Antwort Antwort
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 09:22
Moin Gemeinde!

Ich habe hier ein Problemchen mit GDI + (ich nutze die ansonsten vorzügliche GDIplus Library von Erik van Bilsen).
Ich lade und zeige eine Grafik mit:

Delphi-Quellcode:
Image := TGPImage.Create(Filename);
Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle);
Graphics.DrawImage(Image, 0, 0, Image.Width, Image.Height);
Das klappt auch sofort prima. Nun male ich zwei Rechtecke auf eben diese Grafik mit:

Delphi-Quellcode:
Graphics.DrawRectangle(GreenPen, ...);
Graphics.DrawRectangle(BlackPen, ...);
Diese beiden Rechtecke werden aber erst beim zweiten Aufruf der selben Procedure sichtbar. Beim rersten Aufruf ist immer nur die geladene Grafik zu sehen.
Fehlt hier irgendwas wie ein "Refresh" oder etwas Vergleichbares. (Bin neu im GDIplus Geschäft)

Wenn da vielleicht jemand eine Idee hätte?

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 09:38
Da dies nur im Speicher passiert musst Du nach änderungen immer Paint oder Refresh aufrufen, damit Deine VCL auch aktuallisiert wird.

Entweder musst Du Deine MainForm refreshen oder Graphics.Refresh aufrufen.

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 11:10
Hallo!

Da dies nur im Speicher passiert musst Du nach änderungen immer Paint oder Refresh aufrufen, damit Deine VCL auch aktuallisiert wird.

Entweder musst Du Deine MainForm refreshen oder Graphics.Refresh aufrufen.

Gruss alfold
Hmm, das funktioniert so leider nicht.
Also direkt nach dem Graphics.DrawRectangle(GreenPen, ...); rufe ich:
Delphi-Quellcode:
  Main_Form.MainImage.Refresh;
  Main_Form.MainImage.Update;
  Main_Form.MainImage.Invalidate;
Kein Unterschied: die Dinger werden erst nach dem zweiten Aufruf sichtbar.

Ein:
Graphics.Refresh Gibt es leider nicht. Das GDIplus (zumindest das von Erik van Bilsen) schitn das nicht zu haben.

Hmmm...

Danke & Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 11:36
Was ist MainImage für eine Komponente?
Ansonsten Main_Form.refresh.

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 12:30
Was ist MainImage für eine Komponente?
Ansonsten Main_Form.refresh.
MainImage := TImage;

Ich habe jetzt mal mit der Stelle rumgespielt, an der ich das Graphics erzeuge, und siehe da, wenn ich es folgendermaßen mache, wird auch beim ersten Aufruf schon korrekt gezeichent:
Delphi-Quellcode:
  Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle);
  Graphics.DrawRectangle(GreenPen, ...);
  Graphics.DrawRectangle(BlackPen, ...);
  Graphics.DrawImage(Image, 0, 0, Image.Width, Image.Height);
Wenn ich higegen:
Delphi-Quellcode:
  Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle);
  ... // Hier anderes Coding
  Graphics.DrawRectangle(GreenPen, ...);
  Graphics.DrawRectangle(BlackPen, ...);
  Graphics.DrawImage(Image, 0, 0, Image.Width, Image.Height);
dann wird erst beim zweiten Mal korrekt gekennzeichnet.

Merkwürdig -- aber es tut's erstmal.

Vielen Dank für das Zuhören

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 12:42
Na schön, dann sollte man evtl nicht nur 3Zeiler schreiben und den Rest verschweigen

Gruss
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar

  Alt 14. Mai 2011, 20:16
Na schön, dann sollte man evtl nicht nur 3Zeiler schreiben und den Rest verschweigen

Gruss
Ja, tatsächlich habe ich den eigentlich Unterschied in meinem Vorgehen verschwiegen und damit zur Verwirrung beigetragen.
Aber meine 'workaround' erklärt ja auch nichts so richtig, oder?

Jazzman
--- Delphi XE Starter, Windows 8 ---
  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 02: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