AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme beim Debuggen

Ein Thema von Kurt Wallander · begonnen am 17. Mär 2022 · letzter Beitrag vom 23. Mär 2022
Antwort Antwort
BerndS
Online

Registriert seit: 8. Mär 2006
Ort: Jüterbog
498 Beiträge
 
Delphi 12 Athens
 
#1

AW: Probleme beim Debuggen

  Alt 18. Mär 2022, 07:21
Das Verhalten in OnPaint und Textout ist bei mir auch komisch. Aber das ist auch bei DX10.4 so.

Wenn ich was neues per Canvas.Textout(...) ausgeben will reicht es nicht das in OnPaint zu machen.
Hat sich was geändert, muss Form.Invalidate oder Form.Paint aufgerufen werden. Dann wird OnPaint aufgerufen un die Ausgabe von Canvas.TextOut ist sofort sichtbar.

Ohne Invalidate/Paint wird der geänderter String im OnPaint nicht ausgegeben.
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
261 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Probleme beim Debuggen

  Alt 18. Mär 2022, 07:44
Die Ausgabe über GDI erfolgt manchmal verzögert.
Mit GdiFlush erzwingt man die sofortige Aushabe
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
BerndS
Online

Registriert seit: 8. Mär 2006
Ort: Jüterbog
498 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme beim Debuggen

  Alt 18. Mär 2022, 08:18
Wann sollte den GdiFlush aufgerufen werden?
Nach dem Canvas.TextOut bewirkt das im OnPaint nichts.
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
261 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Probleme beim Debuggen

  Alt 18. Mär 2022, 11:04
Eigentlich funktioniert GdiFlush bei einer synchronen Ausgabe.
Im OnPaint ist es meines Erachtens überflüssig, denn hier bist Du in der Windows message loop. Die Frage ist auch, auf welche Canvas Du da gerade zeichnest. Die könnte auch gepuffert sein.

Kleiner Test:

Code:
var i : Integer;
begin
  for i := 0 to 100 do
  begin
    PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width,PaintBox1.Height));
    PaintBox1.Canvas.TextOut(10,10, IntToStr(i));
    GdiFlush;
    Sleep(10);
  end;
end;
Probier mal mit und ohne GdiFlush.

Das geht auch ohne PaintBox

Code:
var i : Integer;
    dc : TControlCanvas;
begin
  dc := TControlCanvas.Create;
  dc.Control := Panel2;
  for i := 0 to 100 do
  begin
    dc.FillRect(Rect(0,0,100,100));
    dc.TextOut(10,10, IntToStr(i));
   // GdiFlush;
    Sleep(10);
  end;
  dc.Free;
end;
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  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 14:23 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