I was looking at the Stackoverflow question - Program both as Console and GUI and noted that there wasn't an example for Delphi, so I created the following.

program TestConsoleGUI;

{$APPTYPE GUI}

{$R *.res}

uses
  System.SysUtils,
  VCL.Forms,
  Winapi.Windows,
  TestUnit in 'TestUnit.pas' {Form1};

function AttachConsole(const dwProcessId: THandle): BOOL; stdcall; external kernel32 name 'AttachConsole';

var
  bFreeConsole: Boolean;
begin
  if ParamCount = 0 then
  try
    { TODO -oUser -cConsole Main : Insert code here }
    Application.Initialize;
    Application.MainFormOnTaskbar := True;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  except
    on E: Exception do
      ; // Handle exception here
  end else
  begin
    bFreeConsole := False;
    if ParamStr(1) = '/CONSOLE' then
      bFreeConsole := AttachConsole(THandle(-1)) or AllocConsole;
    try
      WriteLn('Hello world');
    finally
      if bFreeConsole then
        FreeConsole;
    end;
  end;
end.