Probleme beim Debuggen
Hallo Delphianer,
ich habe beim Debuggen meiner eigenen Vcl-Programme folgende Probleme: Problem : 1 Ich habe zwei Monitore und schiebe beim Debuggen das Fenster für die überwachten Variablen und das Fenst für die lokalen Variablen auf den 2. Monitor. Um das nicht jedesmal per Hand tun zu müssen, habe ich das Debug-Fenster über "Ansicht"-"Desktop"-"Debug-Desktop" automatisiert. Die Fenster sind jedoch eingefroren. Das Fenster für die lokalen Variablen muß ich nach jedem Übersetzunslauf per Hand killen und mit <Strg><Alt><L> jedesmal neu starten. Das Fenster für die überwachten Variablen zeigt nur statisch die Wertr der Variablen im Moment der Aufnahme in das Fenster für die überwachten Variablen an. Eine Änderung wird mir nur angezeigt wenn ich in der Checkbox, die im Fenster vor der Variablen steht, die Variable aus- und dann wieder einschalte. Das Ganze ist ziemlich nervig. Problem 2: In einem anderen Programm schreibe ich direkt auf die Canvas der Form kurzen Text mit "Textout". nun entscheidet Windows (oder der liebe Gott), wann die Ausgabe auf dem Bildschirm erfolgt. Es wird offensichtlich erst ein Buffer gefüllt. Bei anderen Controls kann ich durch repaint, refresh oder invalidate eine sofortige Ausgabe erzwingen. Für Textout scheint dies aber nicht zu geben. Weiß jemand einen Trick? Mit lieben Grüßen und heißem Dank Kurt Wallander |
AW: Probleme beim Debuggen
Was spricht dagegen für die Textausgaben Label zu verwenden? Oder ein Memo (falls es nur für Debug ist)
|
AW: Probleme beim Debuggen
Statt des TextOut kannst Du auch die API SendDebugMessage verwenden, die melung erscheint dann in der IDE.
|
AW: Probleme beim Debuggen
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. |
AW: Probleme beim Debuggen
Die Ausgabe über GDI erfolgt manchmal verzögert.
Mit GdiFlush erzwingt man die sofortige Aushabe |
AW: Probleme beim Debuggen
Wann sollte den GdiFlush aufgerufen werden?
Nach dem Canvas.TextOut bewirkt das im OnPaint nichts. |
AW: Probleme beim Debuggen
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:
Probier mal mit und ohne GdiFlush.
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; 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; |
AW: Probleme beim Debuggen
Zitat:
Korrekt wäre: Deinen Buffer aktualisieren, Invalidate aufrufen, im OnPaint deinen Buffer auf das Canvas des Formulars oder der Paintbox zeichnen. |
AW: Probleme beim Debuggen
Zitat:
...oder CodeSite benutzen, die Lite Version reicht für die meisten Dinge und ist gratis in GetIt zu finden... |
AW: Probleme beim Debuggen
Hallo Leute,
vielen Dank für die zahlreichen Zuschriften. Sie betreffen alle mein Problem 2. Aber z. Z. sitzt mir mein Problem 1 mehr im Nacken, so daß ich mich etwa später zur Lösung des Problems 2 äußern werde. Also ein klein wenig Geduld. Die Verteilung des Zuschriften verrät mir, daß nur wenige mit mehreren Bildschirmen arbeiten. Ein schönes Restwochenende wünscht Kurt Wallander |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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