Wo ist "console" definiert?

Für Fragen rund um die Ide und zum Debugger
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1704
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Wo ist "console" definiert?

Beitrag von fliegermichl »

Hallo,

ich arbeite an einem kleinen Projekt, welches zwar als "Applikation" erzeugt wurde, aber zunächst als einfaches Konsolenprogramm arbeiten sollte.
Zu dem Zweck habe ich unter Projekteinstellungen -> Compilereinstellungen -> Konfiguration und Ziele -> Zielbetriebssystemspezifische Einstellungen
das Häkchen bei Win32-GUI Anwendung entfernt.

Nachdem nun die ersten Tests erfolgreich verlaufen sind, wollte ich die grafische Umsetzung der Oberfläche beginnen und hab selbiges Häkchen wieder aktiviert.

Nun weigerte sich das Programm aber zu starten. Es erschien die Fehlermeldung "cannot run process 720".

Daraufhin habe ich die lps und die lpi Datei gelöscht und mit Datei öffnen die lpr Datei geöffnet.
Lazarus hat gefragt, ob das ein Projekt sei, was ich bestätigt hatte.

Jetzt kann ich das Programm compilieren und auch starten aber im Codeeditor sind alle Teile die mit {$ifdef console} umschlossen sind, aktiv und alle anderen ausgegraut.
Ich kann aber nirgends die Definition für "Console" finden?

Der Debugger springt richtig in die ausgegrauten Bereiche rein. Nur der Codeeditor scheint da noch nichts von mitbekommen zu haben.

Meine Version ist Lazarus 4.1 (rev lazarus_4_0-77-gc52a98dba2) FPC 3.2.2 x86_64-win64-win32/win64


Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1704
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wo ist "console" definiert?

Beitrag von fliegermichl »

theo hat geschrieben: Mi 12. Nov 2025, 11:08 Das?
https://www.freepascal.org/daily/doc/prog/progsu88.html
Ja, das hatte ich schon gelesen. Wenn ich in meiner Anwendung einen Button einbaue und darin:

Code: Alles auswählen

procedure TViergewinntMainForm.btnisConsoleClick(Sender: TObject);
begin
  if IsConsole then showmessage('console') else showmessage('gui');
end;
dann wird "gui" ausgegeben. Nur der Codeeditor meint noch immer, dass console dfiniert sei.

Benutzeravatar
Zvoni
Beiträge: 470
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: Wo ist "console" definiert?

Beitrag von Zvoni »

Steht vielleicht hier was drin? (Und ja, ich hab gesehen, dass du die lps und lpi gelöscht hast).
Mal in beide schauen: Custom Options und Additions+Overrides
Unbenannt.PNG
Unbenannt.PNG (43.93 KiB) 314 mal betrachtet
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

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

Re: Wo ist "console" definiert?

Beitrag von theo »

fliegermichl hat geschrieben: Mi 12. Nov 2025, 12:11 dann wird "gui" ausgegeben. Nur der Codeeditor meint noch immer, dass console dfiniert sei.
Kann auch ein Bug sein.
Siehst du denn etwas entsprechendes bei "Einstellungen Anzeigen" (Button unten bei Projekteinstellungen).
Sonst mach es doch manuell im lpr. Bin nicht auf Windows und kann das nicht testen.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1704
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wo ist "console" definiert?

Beitrag von fliegermichl »

Ihr könnt es ja gerne mal selbst ausprobieren.

Ich hatte letztens ein Video über den minimax bzw. Alpha Beta Prune Algorithmus gesehen und wollte das mal in einem 4 Gewinnt Spiel umsetzen.
Es sieht zwar noch grauselich aus und der minimax Algorithmus ist bei einer maxTiefe von mehr als 6 quälend langsam aber man kann gegen den Computer 4 gewinnt spielen.
Dateianhänge
viergewinnt.zip
(119.67 KiB) 140-mal heruntergeladen

shokwave
Beiträge: 477
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Wo ist "console" definiert?

Beitrag von shokwave »

Für mich sieht es so aus, als ob "console" immer gesetzt ist. Neues Projekt->Anwendung und dann habe ich schon den von dir beschriebenen Effekt.
Du musst also "console", mit {$undef console} rausnehmen, wenn es so sein soll wie du willst.

Edit: Habe garade noch rumgetestet und jetzt würde ich sagen es ist ein Anzeigefehler von Lazarus. Der folgende Code gibt erwartungsgemäß 2x "GUI" aus, aber der Else-Branche vom ifdef ist ausgegraut. Ändert man den APPTYPE auf CONSOLE ändert sich nichts am ausgegrauten Else-Branche(wäre in dem Moment ja auch richtig so).

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}
{$APPTYPE GUI}
interface
uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var Form1: TForm1;

implementation

{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  {$ifdef console}
    ShowMessage('Con');
  {$else}
    ShowMessage('GUI');
  {$endif}
  if IsConsole then
    ShowMessage('Con')
  else
    ShowMessage('GUI');
end;
end.
mfg Ingo

PascalDragon
Beiträge: 1007
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: Wo ist "console" definiert?

Beitrag von PascalDragon »

Die $AppType-Direktive ergibt nur innerhalb der Hauptdatei Sinn, innerhalb einer Unit bringt sie nichts, da ein und die selbe vorkompilierte Unit sowohl in einer GUI als auch einer CUI Anwendung verwendet werden kann. Hier muss man dann die IsConsole-Variable verwenden und eben damit leben, dass hier nur Dinge zur Laufzeit unterschieden werden können.
FPC Compiler Entwickler

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1704
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Wo ist "console" definiert?

Beitrag von fliegermichl »

Wenn man in den Projekteinstellungen unter Compilereinstellungen -> Hinzufügungen und Beeinflussungen -uconsole einträgt, dann passt es auch im Codeeditor.
Ich hätte halt gerne gewusst, wo console ursprünglich definiert wurde.

Antworten