Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Rund um die LCL und andere Komponenten
Antworten
Helios
Lazarusforum e. V.
Beiträge: 107
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.6 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Helios »

Hallo zusammen,
ich bin dabei eine Konsolenanwendung zu schreiben, die wahrscheinlich in der Regel alle Parameter über eine Ini Datei bekommt und dann auch ohne GUI auskommt. In manchen Fällen wäre aber dann doch eine GUI angebracht um ein paar Messwerte anzuzeigen oder doch Werte in Der Ini-Datei grafisch anzupassen etc.
Gibt es die Möglichkeit aus einer Konsolenanwendung eine TForm zur Laufzeit zur Anzeige zu bringen? Ich stehe da grade etwas auf dem Schlauch. In meinem Konsolenanwendungs Programm habe ich die LCL und LCLbase geladen und die Windows 32 GUI Option in den Projekteinstellungen gesetzt. Die Applikation
AppStart.zip
(2.22 KiB) 65-mal heruntergeladen
wird auch ohne Fehler kompiliert, aber meine TForm öffnet sich nicht (Projekt soll unter Windows 32+64 Bit lauffähig sein). In der IDE erzeugt sie dazu eine Exception "Failed to create win32 control, error: 1407: Fensterklasse wurde nicht gefunden.". Hat jemand eine Idee was das Problem ist?
Danke im Voraus und Gruß
Helios
Zuletzt geändert von Helios am So 5. Nov 2023, 20:01, insgesamt 1-mal geändert.

Acia6850
Beiträge: 15
Registriert: Mo 9. Okt 2023, 18:45
OS, Lazarus, FPC: Windows + WSL / Linux Debian Rasbian OS (L 3.0.0 FPC 3.3.2)
CPU-Target: 64Bit
Wohnort: LK Ludwigsburg

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Acia6850 »

Hallo schreibt dir eine Windows Form mit Lazarus in einer separaten Unit. Rufe die Form aus Deiner Windows Applikationen dynamisch auf zum Test.
Baue dann um deine Form eine Windows DLL mit der du die Form dynamisch starteten kannst. Du kannst dann die DLL mit Deiner Konsolen Applikation zur Laufzeit starten und die entsprechenden Funktion in Deiner Form Unit aufrufen.

Viel Spass

Helios
Lazarusforum e. V.
Beiträge: 107
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.6 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Helios »

Hallo Acia6850,
danke Dir für die schnelle Rückmeldung. Geht das wirklich nur über eine DLL? Ich hatte gehofft da gibt es unter Lazarus andere Möglichkeiten direkt über entsprechende Projekteinsellungen oder entsprechende LCL(?) Aufrufe/Fenster Initialisierungen oder ähnliches???
Gruß
Helios

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

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von wp_xyz »

Also wenn du schon die LCL im Projekt hast, warum kämpfst du dann für die Anzeige der Messdaten mit einem Kommandozeilenprogramm? Zu einem GUI-Programm ist nicht mehr viel Unterschied...

Entweder entferne die LCL aus dem Projekt und mache ein richtiges Kommandozeilen-Programm oder lasse sie drin und mache mit Lazarus ein richtiges GUI-Programm.

Helios
Lazarusforum e. V.
Beiträge: 107
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.6 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Helios »

Hallo wp_xyz,
das ist in meinem Fall nicht so einfach. Ich weiss erst zur Laufzeit, ob ich die GUI brauche oder nicht. Wenn der Nutzer die Applikation über Kommandozeile aufruft erfolgen die Ausgaben in Dateien und nicht grafisch. Wenn der Nutzer die grafische Anzeige via GUI haben möchte kann er das in die Ini-Datei steuern und er hat eine grafische Anzeige. Ich hatte gedacht das bekomme ich irgendwie über die Ini hin...
Gruß
Helios

Mathias
Beiträge: 6209
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Mathias »

In manchen Fällen wäre aber dann doch eine GUI angebracht um ein paar Messwerte anzuzeigen oder doch Werte in Der Ini-Datei grafisch anzupassen etc.
Es kommt darauf an wie komplex dies sein soll.
Evtl. würde die Unit Crt reichen, solange es nicht grafisch sein muss.
Mit Crt ist farbige Text-Ausgabe möglich, auch kannst du den Cursor positionieren.

Oder du flickst sowas in deine project1.lpr rein.

Code: Alles auswählen

....
begin
  if not gui then begin
    WriteLn('nogui');
  end else begin
    RequireDerivedFormResource := True;
    Application.Scaled := True;
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.    
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Helios
Lazarusforum e. V.
Beiträge: 107
Registriert: Mi 29. Jun 2011, 22:36
OS, Lazarus, FPC: Lazarus 2.2.6 Windows 10 64Bit / Lazarus 2.0.12 Debian 11.7 „Bullseye" 64Bit
CPU-Target: 64Bit
Wohnort: Leonberg

Re: Konsolenanwendung bei Bedarf mit GUI/Form ausstatten

Beitrag von Helios »

Hallo Mathias,
Danke für Deine Rückmeldung. Bei der weiteren Recherce über die Fehlermedung bin ich auf dieses Konstrukt gekommen (vgl. auch https://forum.lazarus.freepascal.org/in ... #msg143724). Da ist der 2. Teil Deiner Lösung eigentlich mit drin sehe ich grade. Scheint zu funktionieren, aber steht das in meinem korrigierten Beispielprojekt auf tönernen Füßen bzw. ist das im Sinne der Free Pascal/Lazarus Architektur? Ich probier es mal mit mehr Komponenten zur Laufzeit aus, mal sehen ob ich damit "durchkomme";-)
Zum Testen einfach mal in der Ini den Wert UseGui=1 bzw. 0 setzen, dann ist das gewünschte Verhalten sichtbar (und zumindest oberflächlich fehlerfrei)
Danke nochmal an alle Rückmeldenden!
Dateianhänge
AppStart.zip
(2.45 KiB) 67-mal heruntergeladen

Antworten