![]() |
GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
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:
Das klappt auch sofort prima. Nun male ich zwei Rechtecke auf eben diese Grafik mit:
Image := TGPImage.Create(Filename);
Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle); Graphics.DrawImage(Image, 0, 0, Image.Width, Image.Height);
Delphi-Quellcode:
Diese beiden Rechtecke werden aber erst beim zweiten Aufruf der selben Procedure sichtbar. Beim rersten Aufruf ist immer nur die geladene Grafik zu sehen.
Graphics.DrawRectangle(GreenPen, ...);
Graphics.DrawRectangle(BlackPen, ...); 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 |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
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 |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Hallo!
Zitat:
Also direkt nach dem Graphics.DrawRectangle(GreenPen, ...); rufe ich:
Delphi-Quellcode:
Kein Unterschied: die Dinger werden erst nach dem zweiten Aufruf sichtbar.
Main_Form.MainImage.Refresh;
Main_Form.MainImage.Update; Main_Form.MainImage.Invalidate; Ein:
Delphi-Quellcode:
Gibt es leider nicht. Das GDIplus (zumindest das von Erik van Bilsen) schitn das nicht zu haben.
Graphics.Refresh
Hmmm... Danke & Gruß Jazzman |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Was ist MainImage für eine Komponente?
Ansonsten Main_Form.refresh. Gruss alfold |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Zitat:
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:
Wenn ich higegen:
Graphics := TGPGraphics.Create(Main_Form.MainImage.Canvas.Handle);
Graphics.DrawRectangle(GreenPen, ...); Graphics.DrawRectangle(BlackPen, ...); Graphics.DrawImage(Image, 0, 0, Image.Width, Image.Height);
Delphi-Quellcode:
dann wird erst beim zweiten Mal korrekt gekennzeichnet.
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); Merkwürdig -- aber es tut's erstmal. Vielen Dank für das Zuhören :-D Gruß Jazzman |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Na schön, dann sollte man evtl nicht nur 3Zeiler schreiben und den Rest verschweigen:wink:
Gruss |
AW: GDI+ : DrawRectangle erst beim 2. Aufruf sichtbar
Zitat:
Aber meine 'workaround' erklärt ja auch nichts so richtig, oder? Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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