Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Probleme beim Debuggen (https://www.delphipraxis.net/210212-probleme-beim-debuggen.html)

Kurt Wallander 17. Mär 2022 17:51

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

Sinspin 18. Mär 2022 05:49

AW: Probleme beim Debuggen
 
Was spricht dagegen für die Textausgaben Label zu verwenden? Oder ein Memo (falls es nur für Debug ist)

jziersch 18. Mär 2022 07:01

AW: Probleme beim Debuggen
 
Statt des TextOut kannst Du auch die API SendDebugMessage verwenden, die melung erscheint dann in der IDE.

BerndS 18. Mär 2022 07:21

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.

jziersch 18. Mär 2022 07:44

AW: Probleme beim Debuggen
 
Die Ausgabe über GDI erfolgt manchmal verzögert.
Mit GdiFlush erzwingt man die sofortige Aushabe

BerndS 18. Mär 2022 08:18

AW: Probleme beim Debuggen
 
Wann sollte den GdiFlush aufgerufen werden?
Nach dem Canvas.TextOut bewirkt das im OnPaint nichts.

jziersch 18. Mär 2022 11:04

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:
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;

jaenicke 18. Mär 2022 17:12

AW: Probleme beim Debuggen
 
Zitat:

Zitat von Kurt Wallander (Beitrag 1503560)
Bei anderen Controls kann ich durch repaint, refresh oder invalidate eine sofortige Ausgabe erzwingen. Für Textout scheint dies aber nicht zu geben.

Verwendest du denn auch OnPaint? Denn alles, was du außerhalb dessen auf das Formular schreibst, kann auch sofort wieder überzeichnet werden.
Korrekt wäre:
Deinen Buffer aktualisieren, Invalidate aufrufen, im OnPaint deinen Buffer auf das Canvas des Formulars oder der Paintbox zeichnen.

TurboMagic 19. Mär 2022 08:46

AW: Probleme beim Debuggen
 
Zitat:

Zitat von jziersch (Beitrag 1503572)
Statt des TextOut kannst Du auch die API SendDebugMessage verwenden, die melung erscheint dann in der IDE.

Alternativ: OutputDebugString...
...oder CodeSite benutzen, die Lite Version reicht für die meisten Dinge und ist gratis in GetIt zu finden...

Kurt Wallander 20. Mär 2022 14:32

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.
Seite 1 von 2  1 2      

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