[erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
[erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Hallo,
ich habe eine Unit, die von einem einfachen Konsolen-Programm aus, von einem Lazarus-Batch-Programm und von einem Fenster aus aufgerufen werden soll. Da sind ein paar Writeln drin, die die beiden Batch-Varianten die Ergebnisse ausgeben lassen, im Online-Teil bin ich nur an den Berechnungen interessiert.
Leider fällt das nun auf die Nase, "File not open", Was kann ich da machen? Das Lazarus-Batch-Programm öffnet ja selbst ein Fenster (liegt wohl am Anwendungstyp - ansonsten kann ich keine Unterschiede erkennen, die Units habe ich alle kopiert).
Ich kann die Writeln gerne vom Online-Programm mit ausgeben lassen, es muß nicht unterdrückt werden.
So auf Anhieb fällt mir nur eine Lösung über bedingte Compilierung ein, also einen Schalter zum Ermöglichen oder Unterdrücken der Writeln. Gibt es eine elegantere Lösung?
Vielen Dank
ich habe eine Unit, die von einem einfachen Konsolen-Programm aus, von einem Lazarus-Batch-Programm und von einem Fenster aus aufgerufen werden soll. Da sind ein paar Writeln drin, die die beiden Batch-Varianten die Ergebnisse ausgeben lassen, im Online-Teil bin ich nur an den Berechnungen interessiert.
Leider fällt das nun auf die Nase, "File not open", Was kann ich da machen? Das Lazarus-Batch-Programm öffnet ja selbst ein Fenster (liegt wohl am Anwendungstyp - ansonsten kann ich keine Unterschiede erkennen, die Units habe ich alle kopiert).
Ich kann die Writeln gerne vom Online-Programm mit ausgeben lassen, es muß nicht unterdrückt werden.
So auf Anhieb fällt mir nur eine Lösung über bedingte Compilierung ein, also einen Schalter zum Ermöglichen oder Unterdrücken der Writeln. Gibt es eine elegantere Lösung?
Vielen Dank
- Dateianhänge
-
prioparmonline.zip
- (163.57 KiB) 13-mal heruntergeladen
-
prioparm.zip
- (11.41 KiB) 10-mal heruntergeladen
Zuletzt geändert von alfware17 am Di 1. Aug 2023, 10:27, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 129
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Warum nicht einfach unter
den Haken wegmachen? Dann hast du unter der GUI das zusätzliche Konsolenfenster...
Oder habe ich da was flasch verstanden?
Code: Alles auswählen
Projekt
- Einstellungen
- Compilereinstellungen
- Konfiguration und Ziele
- Win32-GUI-Anwendung
Oder habe ich da was flasch verstanden?
just my two Beer
- af0815
- Lazarusforum e. V.
- Beiträge: 6118
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Oder den LazLogger nehmen. Damit wird mit Debugln auf die Konsole geschrieben, wenn eine vorhanden ist. LazLogger kann auch in eine Datei umleiten, wenn nötig.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Ja, genau das wollte ich haben. Danke!Joh hat geschrieben: ↑Mo 31. Jul 2023, 18:44Warum nicht einfach unterden Haken wegmachen? Dann hast du unter der GUI das zusätzliche Konsolenfenster...Code: Alles auswählen
Projekt - Einstellungen - Compilereinstellungen - Konfiguration und Ziele - Win32-GUI-Anwendung
Oder habe ich da was flasch verstanden?
Ich könnte es ausprobieren, aber vielleicht weißt du es ja auch. Wenn ich jetzt auf die Idee käme die 64bit Lazarus IDE zu benutzen,
heißt der Einstellungspunkt dann anders? Ich meine ja nur, Häkchen weg und man bekommt zusätzliche Funktion. Wenn ich so was
entwerfen würde, würde ich sagen Häkchen an und man hat die zuätzliche Datei
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1355
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Du kannst auch das Häkchen weglassen und rufst bei Bedarf
auf.
Edit: AllocConsole alleine reicht nicht aus. Aber so geht's (getestet)
Code: Alles auswählen
allocConsole
Edit: AllocConsole alleine reicht nicht aus. Aber so geht's (getestet)
Code: Alles auswählen
AllocConsole; // in Windows unit
IsConsole := True; // in System unit
SysInitStdIO; // in System unit
WriteLn('Hallo Welt');
-
- Beiträge: 5935
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunc)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Gibt es auch sowas ähnliches wie "AllocConsole" für Linux ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 5935
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunc)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Die ist mir schon bekannt.Auf Linux schmiert die Anwendung nicht ab, wenn keine Shell da ist und es ein "writeln" gibt. Auf Windows schon.
Das kann man nicht vergleichen.
Ich dachte an einen Befehl, welcher eine Konsole öffnet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Kommt drauf an, was du willst.
Unter KDE/OpenSuse öffnet sich eine Terminalemulation z.B. mit
oder
S.a. https://wiki.freepascal.org/Executing_External_Programs
Unter KDE/OpenSuse öffnet sich eine Terminalemulation z.B. mit
Code: Alles auswählen
SysUtils.ExecuteProcess('/usr/bin/konsole', '', []);
Code: Alles auswählen
SysUtils.ExecuteProcess('/usr/bin/xterm', '', []);
-
- Beiträge: 775
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Das kann man nicht vergleichen. Unter Windows allokiert AllocConsole eine Konsole für den laufenden Prozess. Dies ist unter Linux einfach nicht möglich, das Beispiel von theo öffnet eine Konsole als Kind, du kannst dann aber in diese nicht schreiben (zumindest nicht trivial). Außerdem kann es unter Linux beliebige Konsolen (auch Terminalemulatoren genannt) geben, es gibt nicht die Konsole, die du öffnen könntest.
FPC Compiler Entwickler
-
- Lazarusforum e. V.
- Beiträge: 3155
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Wenn du ein Terminal öffnen möchstest, in dem STDOUT angezeigt wird, kannst du das natürlich über ein weiteres Programm tun. Du könntest z.B. deine Konsole anweisen, tail zu starten, was dann STDOUT von deinem Prozess ausgibt.
Code: Alles auswählen
SysUtils.ExecuteProcess('/usr/bin/xterm', '', ['-e', 'tail', '-f', '/proc/<myprocessid>/fd/0']);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 5935
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunc)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
@Socke
Irgendwie hast ein einen Verdreher mit dem "[", es lässt sich nicht kompilieren.
Irgendwie hast ein einen Verdreher mit dem "[", es lässt sich nicht kompilieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3155
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Ich hatte die Parameter vertauscht, richtig wäre:
Code: Alles auswählen
SysUtils.ExecuteProcess('/usr/bin/xterm', ['-e', 'tail', '-f', '/proc/<myprocessid>/fd/0'], []);
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: [erledigt] Wie kann ein Fensterprogramm trotzdem Writeln schreiben?
Sagt mal.... Gibt es die Ausgabe in Linux auch für Dummies/einfache Variante?
Wenn ich das
SysUtils.ExecuteProcess('/usr/bin/xterm', ['-e', 'tail', '-f', '/proc/<myprocessid>/fd/0'], []);
von oben so in meinen Quelltext schreibe, bringt mir Lazarus eine System-Exception...
Ich wollte das Programm, welches unter Windows lief, nun auch mal unter Linux testen.... Dabei geht es mir immer noch darum, ein paar Testausgaben meines Algorithmus zu sehen und da finde ich Writeln immer noch am einfachsten. Ich könnte die auch alle in ein Fenster mit einer Textview? stecken, aber warum das Programm unter Linux ändern müssen?
Wenn ich das
SysUtils.ExecuteProcess('/usr/bin/xterm', ['-e', 'tail', '-f', '/proc/<myprocessid>/fd/0'], []);
von oben so in meinen Quelltext schreibe, bringt mir Lazarus eine System-Exception...
Ich wollte das Programm, welches unter Windows lief, nun auch mal unter Linux testen.... Dabei geht es mir immer noch darum, ein paar Testausgaben meines Algorithmus zu sehen und da finde ich Writeln immer noch am einfachsten. Ich könnte die auch alle in ein Fenster mit einer Textview? stecken, aber warum das Programm unter Linux ändern müssen?