Jump to content
357mag

I need the console window to stay open

Recommended Posts

What are some of the ways I can code my console program to keep the console window open after it opens? I know in C++ I used to use getch().

Share this post


Link to post

Yes I was about to post that I found a way using ReadLine.

 

I'm a little confused about the two end keywords. It seems sometimes I see end with a semicolon and that is all. Other times I see end with a period. Other times I see both in a code snippet. 

Share this post


Link to post

And something like this ?

 

program Test;

{$APPTYPE CONSOLE}

{$R *.res}

Uses System.SysUtils, WinApi.Windows;

var Termina: boolean = false;

function handle_ctrl_c(fdwCtrlType: UINT64): WORDBOOL;
begin
	//If it returns TRUE then the chain of managers is not continued.
	//If I return FALSE then the next handler in the chain is also called.
    case fdwCtrlType of
      // Handle the CTRL-C signal.
      CTRL_C_EVENT:
        begin
          Termina := True;
          Beep(750, 300);
          writeln('Ctrl-C event');
          result := TRUE;
        end;
        // CTRL-CLOSE: confirm that the user wants to exit.
      CTRL_CLOSE_EVENT:
        begin
          Termina := True;
          Beep(600, 200);
          writeln('Ctrl-Close event');
          result := TRUE;    //The program will' close ...
        end;
        // Pass other signals to the next handler.
      CTRL_BREAK_EVENT:
        begin
          Termina := True;
          Beep(900, 200);
          writeln('Ctrl-Break event');
          result := TRUE;
        end;
      CTRL_LOGOFF_EVENT:
        begin
          Termina := True;
          Beep(1000, 200);
          writeln('Ctrl-Logoff event');
          result := FALSE;
        end;
      CTRL_SHUTDOWN_EVENT:
        begin
          Termina := True;
          Beep(750, 500);
          writeln('Ctrl-Shutdown event');
          result := FALSE;
        end;
      else
        result := FALSE;
    end;
end;

//Main
begin
  //Implements ctrl-... handler
  SetConsoleCtrlHandler(@handle_ctrl_c, TRUE);
  Writeln(DateTimeToStr(now)+' - Is running - press CTRL-C to terminate or the key "F2"');
  while (not Termina) do
    begin
      try
        sleep(10);
        //This is another way to catch a key
		    //Pressing F2 key will exit
        if (GetKeyState(VK_F2) and $8000) <> 0 then
          begin
            Termina := true;  //This is not necessary since there is a break condition
            break;
          end;

         //put here your code

      except on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
      end;
    end;
end.

 

Edited by DelphiUdIT

Share this post


Link to post

So when your program is all completed as far as writing all the code, you put an end (with a period) at the end. If you are just denoting a code block, then you put and end (with a semicolon).

Share this post


Link to post
31 minutes ago, 357mag said:

So when your program is all completed as far as writing all the code, you put an end (with a period) at the end. If you are just denoting a code block, then you put and end (with a semicolon).

Now is OK, with proper heading and better indentation.

 

You must terminate with a "end." (end with a period)

 

The last begin is closed in this way in an "app console" (if you look a dpr file of a vcl application, you will see the same ... begin .... end.)

Edited by DelphiUdIT

Share this post


Link to post
On 5/3/2023 at 11:28 AM, 357mag said:

I'm a little confused about the two end keywords. It seems sometimes I see end with a semicolon and that is all. Other times I see end with a period. Other times I see both in a code snippet. 

'end;' terminates compound statements, case statements, scope blocks, class/record declarations, etc. See Declarations and Statements (Delphi)

 

'end.' terminates only a unit block. See Programs and Units (Delphi)

 

You should read the Delphi Language Guide for all the syntax rules.

Edited by Remy Lebeau

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×