Delphi in Lazarus-Projekt umwandeln

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

Und wieder ich, mit der nächsten Frage.
Ich habe ein TStringGrid mit werten gefüllt, die Größe der Tabelle ist dynamisch, das Füllen der Tabelle funktioniert auch.
Mit dem Fenster "Liste der überwachten Ausdrücke, habe ich ein Problem, habe dort 3 Werte hinzugefügt, bei zweien davon, steht im Wert "Error", was mache ich falsch?
Habe hierzu ein Screenshot angehängt.
Dateianhänge
Lister der überwachten Ausdruecke.PNG
Lister der überwachten Ausdruecke.PNG (13.19 KiB) 165 mal betrachtet
Gruß Christopher

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1079
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von fliegermichl »

Das Tool kann keine Properties anzeigen, deren Werte über Setter bzw Getter Methoden gesetzt bzw. gelesen werden. Da musst du dir leider einen Umweg über lokale Variablen basteln oder auf den Feldwert der Property direkt prüfen.
Beispiel:

Code: Alles auswählen

type
 TTest = class 
 private
  fFeld : string;
  procedure SetFeld(Value : string);
  function GetFeld : string;
 public
  property Feld : string read GetFeld write SetFeld;
 end;
Wenn du jetzt in der watchlist ttest.feld anzeigen lassen willst, kommt die Fehlermeldung. Lässt du dir hingegen fFeld anzeigen, geht es.

Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

fliegermichl hat geschrieben:
Do 23. Jun 2022, 08:56
Das Tool kann keine Properties anzeigen, deren Werte über Setter bzw Getter Methoden gesetzt bzw. gelesen werden. Da musst du dir leider einen Umweg über lokale Variablen basteln oder auf den Feldwert der Property direkt prüfen.
Danke für die schnelle Antwort, hatte es befürchtet
Gruß Christopher

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von theo »

stoffel_hessen hat geschrieben:
Do 23. Jun 2022, 09:08
Danke für die schnelle Antwort, hatte es befürchtet
Ich erinnere mich, dass mich das damals auch gestört hat.
Aber mittlerweile benutze ich den Debugger fast ausschliesslich zum Steppen etc.
Wenn ich Werte ansehen will, schreibe ich einfach ein Writeln in den Code.
In deinem Fall z.B.

Code: Alles auswählen

Writeln('Rowcount: ',StringGrid1.RowCount);
Writeln('Cells [1,1]: ',StringGrid1.Cells[1,1]);      
Ansehen kann man den Output z.B mit "Ansicht" -> "Debuggerfenster" -> "Console In/Output".
Ich empfinde das sogar als übersichtlicher, weniger umständlich und besser konfigurierbar, aber das ist sicher Geschmackssache.

Es gibt auch noch anderes, z.B.
https://wiki.freepascal.org/LazLogger

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von wp_xyz »

fliegermichl hat geschrieben:
Do 23. Jun 2022, 08:56
Das Tool kann keine Properties anzeigen, deren Werte über Setter bzw Getter Methoden gesetzt bzw. gelesen werden.
Manchmal sind die Getter aber sehr einfach aufgebaut. Bei TCustomGrid.GetRowCount finde ich z.B. im Quellcode:

Code: Alles auswählen

function TCustomGrid.GetRowCount: Integer;
begin
  Result:=FRows.Count;
end; 
Auf diese interne Struktur kannst du im Prinzip im Debugger zugreifen, wobei auch "private" Felder verfügbar sind. Daher kannst du für die Watch einfach den Eintrag "SGCPE_im_Ring.FRows.Count" verwenden (beim gdb musst du auch das "Count" noch auflösen und "...FCount" schreiben).

Bei .Cells ist der Ausdruck wesentlich komplizierter, da ist die WriteLn-Methode sicherlich einfacher. Ein Hinweis aber noch: Falls du unter Windows bist, erhältst du einen Laufzeitfehler, wenn die Box "Win32 gui application" in den Projekt-Optionen NICHT markiert ist (was der Standard ist). Statt WriteLn kannst du auch die Unit LazLogger verwenden und WriteLn durch DebugLn ersetzen. Dann entfällt der Laufzeitfehler (du musst die Checkbox aber trotzdem abwählen, sonst erscheint die Ausgabekonsole nicht).
Zuletzt geändert von wp_xyz am Do 23. Jun 2022, 12:46, insgesamt 1-mal geändert.

Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

wp_xyz hat geschrieben:
Do 23. Jun 2022, 11:36

Ein Hinweis aber noch: Falls du unter Windows bist, erhältst du einen Laufzeitfehler, wenn die Box "Win32 gui application" in den Projekt-Optionen NICHT markiert ist (was der Standard ist). Statt WriteLn kannst du auch die Unit LazLogger verwenden und WriteLn durch DebugLn ersetzen. Dann entfällt der Laufzeitfehler (du musst die Checkbox aber trotzdem markieren, sonst erscheint die Ausgabekonsole nicht).
Bei mir ist der Haken "Win32 gui application" gesetzt, aber trotzdem bekomme ich unter Win 10 eine Laufzeitfehler "Exception-Klasse >>EInOutError<< ausgelöst mit der Meldung: File not open
writeln ('Tabelle.RowCount: ', Talelle.RowCount);
Gruß Christopher

Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

Die Ausgabeconsole sehe ich übrigens auch nicht und kann diese auch nicht auswählen
Dateianhänge
Debbugerfenster.PNG
Debbugerfenster.PNG (18.66 KiB) 137 mal betrachtet
Gruß Christopher

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5097
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von af0815 »

Ich würde folgendes machen:

a) Unter Windows den Haken bei Win32GUI wegmachen, dann erscheint automatisch eine Konsole

b) Das Paket LazLogger verwenden - siehe https://wiki.freepascal.org/LazLogger

Mit dem LazLogger kann man bequem Logging betreiben und sieht auf der Konsole was. Ausserdem stört dem nicht falls keine Konsole vorhanden ist. Über Eigenschaften kann man den Output auch in Dateien oder Memos umleiten.
Noch dazu wird der LazLogger auch selbst von den Entwicklern von Lazarus verwendet. Entsprechend stabil ist das Tool. Es gibt noch weitere Logger, wenn man will.

Zu den fehlenden Debuggingmöglichkeiten - Bei Lazarus ist das ganze ja zwischen der IDE (Lazarus) und dem Compiler (fpc) getrennt. Das Debugging ist nochmals getrennt, da es ja auf (fast) allen Plattformen möglich sein soll. Das bedingt das nicht alles was unter Delphi geht auch hier funktioniert. Es wird aber sehr stark daran gearbeitet (in der Freizeit !! von den Entwicklern - nicht vergessen) und auch erweitert.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von theo »

stoffel_hessen hat geschrieben:
Do 23. Jun 2022, 12:16
Die Ausgabeconsole sehe ich übrigens auch nicht und kann diese auch nicht auswählen
Ja, sorry. Ich glaube, das gibt es nur unter Linux.

Auf Windows kannst du in den Projekteinstellungen unter "Konfiguration und Ziele" -> "Win32-GUI-Anwendung" den Haken entfernen, dann siehst du ein Konsolenfenster beim Start.

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von wp_xyz »

stoffel_hessen hat geschrieben:
Do 23. Jun 2022, 12:13
wp_xyz hat geschrieben:
Do 23. Jun 2022, 11:36

Ein Hinweis aber noch: Falls du unter Windows bist, erhältst du einen Laufzeitfehler, wenn die Box "Win32 gui application" in den Projekt-Optionen NICHT markiert ist (was der Standard ist). Statt WriteLn kannst du auch die Unit LazLogger verwenden und WriteLn durch DebugLn ersetzen. Dann entfällt der Laufzeitfehler (du musst die Checkbox aber trotzdem markieren, sonst erscheint die Ausgabekonsole nicht).
Bei mir ist der Haken "Win32 gui application" gesetzt, aber trotzdem bekomme ich unter Win 10 eine Laufzeitfehler "Exception-Klasse >>EInOutError<< ausgelöst mit der Meldung: File not open
writeln ('Tabelle.RowCount: ', Talelle.RowCount);
Sorry, ich hatte den Text vor dem Abschicken nochmals editiert, und dabei offenbar übersehen, das "NICHT" zu löschen. Richtig ist es so:
- Haken gesetzt (Default-Einstellung) --> Laufzeitfehler wegen WriteLn, kein Konsolen-Fenster
- Haken nicht gesetzt --> kein Laufzeitfehler, Konsolen-Fenster wird angezeigt.

Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

wp_xyz hat geschrieben:
Do 23. Jun 2022, 12:43
Sorry, ich hatte den Text vor dem Abschicken nochmals editiert, und dabei offenbar übersehen, das "NICHT" zu löschen. Richtig ist es so:
- Haken gesetzt (Default-Einstellung) --> Laufzeitfehler wegen WriteLn, kein Konsolen-Fenster
- Haken nicht gesetzt --> kein Laufzeitfehler, Konsolen-Fenster wird angezeigt.
Das hat nun funktioniert.
DANKE

Ist aber trotzdem sehr umständlich, man kann beim debuggen sich nicht einfach mal einen Wert ansehen, sondern muss immer erst eine Zeile Programmcode hinzufügen. Aber ja, mir ist bewusst das die Entwickler dies alles in ihrer Freizeit machen.
Gruß Christopher

Benutzeravatar
stoffel_hessen
Beiträge: 16
Registriert: Sa 18. Jun 2022, 12:27
OS, Lazarus, FPC: Windows 11 (Version 2.2.2, FPC 3.2.2)
CPU-Target: x86 64Bit
Wohnort: Riedstadt

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von stoffel_hessen »

af0815 hat geschrieben:
Do 23. Jun 2022, 12:30
Ich würde folgendes machen:

b) Das Paket LazLogger verwenden - siehe https://wiki.freepascal.org/LazLogger

Mit dem LazLogger kann man bequem Logging betreiben und sieht auf der Konsole was. Ausserdem stört dem nicht falls keine Konsole vorhanden ist. Über Eigenschaften kann man den Output auch in Dateien oder Memos umleiten.
Noch dazu wird der LazLogger auch selbst von den Entwicklern von Lazarus verwendet. Entsprechend stabil ist das Tool. Es gibt noch weitere Logger, wenn man will.
Wenn ich mit dem LazLogger versuche zu arbeiten bekomme ich bei der Zeile
DebugLn ('SG_Ring.RowCount: ', SG_Ring.RowCount);
die Fehlermeldung
Projekt.pas(1768,62) Error: Incompatible type for arg no. 2: Got "LongInt", expected "Array Of Const"
Gruß Christopher

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von wp_xyz »

stoffel_hessen hat geschrieben:
Do 23. Jun 2022, 13:26
Ist aber trotzdem sehr umständlich, man kann beim debuggen sich nicht einfach mal einen Wert ansehen, sondern muss immer erst eine Zeile Programmcode hinzufügen. Aber ja, mir ist bewusst das die Entwickler dies alles in ihrer Freizeit machen.
Zugegeben, aber wenn man das verinnerlicht hat, kann man das im Code leicht berücksichtigen. Wenn ich z.B. mit einer Stringliste arbeite und in einer Schleife irgendwas mit den enthaltenen Strings machen will, schreibe ich den String am aktuellen Laufindex meistens erst in eine Zwischenvariable, die kann man dann einfach debuggen (s := StringList[ i]).

Benutzeravatar
theo
Beiträge: 9074
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von theo »

stoffel_hessen hat geschrieben:
Do 23. Jun 2022, 13:31
Wenn ich mit dem LazLogger versuche zu arbeiten bekomme ich bei der Zeile
DebugLn ('SG_Ring.RowCount: ', SG_Ring.RowCount);
die Fehlermeldung
Projekt.pas(1768,62) Error: Incompatible type for arg no. 2: Got "LongInt", expected "Array Of Const"
Deswegen habe ich Writeln vorgeschlagen.
DebugLn erwartet afaik Strings. Da müsste man ein "Format" oder "IntToStr" dazwischen schalten. Finde ich unpraktisch.
Bei Writeln ist das nicht nötig.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5097
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Delphi in Lazarus-Projekt umwandeln

Beitrag von af0815 »

theo hat geschrieben:
Do 23. Jun 2022, 14:43
Deswegen habe ich Writeln vorgeschlagen.
DebugLn erwartet afaik Strings. Da müsste man ein "Format" oder "IntToStr" dazwischen schalten. Finde ich unpraktisch.
Bei Writeln ist das nicht nötig.
Dafür gibt es sofort ein Problem wenn es keine Konsole gibt - besonders unter Windows - ist meiner Erfahrung unbrauchbarer als beim Debugln einen String zu machen. Nachdem ich mit Lazarus meinen Brotjob mache, habe ich mich an das Debugln gewöhnt. Bzw. auch daran das man mit dem Debugger etwas anders als unter Delphi. Wobei ich bei den letzten Versuchen mit Delphi festgestellt habe, bevor ich auf das umsteige, mache ich lieber es mit C#.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten