sapitando

WinAPI - Resize Console Window (Free Pascal)

Aug 10th, 2016
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.42 KB | None | 0 0
  1. { Autor : Tiago Portela
  2.   Sobre o programa : Muda o tamanho da janela do console do Windows, a largura(variável Cols) tem que ser maior ou igual a 14,
  3.                      fiz o teste apenas no windows 7.
  4.   Obs. : Apenas tentando aprender algorítimos, sozinho, por hobby. }
  5.  
  6. program Resize_Console_Window;
  7. uses JwaWindows, Crt;
  8.  
  9. var
  10.   Cols, Lines : SHORT;
  11.   SysMenuButtons : boolean;
  12.   TitleWindow : PChar;
  13.   WindowError : BOOL;
  14.  
  15.  
  16. function SetConsoleWindowInfoAndBufferSize(X, Y : SHORT;
  17.            B : boolean; TW : PChar) : BOOL;
  18.  
  19. var
  20.   hConsoleOutput : HANDLE;
  21.   dwSize : COORD;
  22.   lpCW : SMALL_RECT = (Left : 0; Top : 0);
  23.  
  24. begin
  25.   if (not (MoveWindow(GetConsoleWindow, 0, 0, 1, 1, TRUE)))
  26.   then begin
  27.          INT(SetConsoleWindowInfoAndBufferSize) := 1;
  28.          exit;
  29.        end;
  30.   if (not (SetConsoleTitle(TW)))
  31.   then begin
  32.          INT(SetConsoleWindowInfoAndBufferSize) := 2;
  33.          exit;
  34.        end;
  35.   if (not (B))
  36.   then begin
  37.          if (SetWindowLong(GetConsoleWindow, GWL_STYLE,
  38.            GetWindowLong(GetConsoleWindow, GWL_STYLE) and
  39.            (not (WS_SYSMENU or WS_HSCROLL or WS_VSCROLL))) = 0)
  40.          then begin
  41.                 INT(SetConsoleWindowInfoAndBufferSize) := 3;
  42.                 exit;
  43.               end;
  44.        end;
  45.   hConsoleOutput := GetStdHandle(STD_OUTPUT_HANDLE);
  46.   if (hConsoleOutput = INVALID_HANDLE_VALUE)
  47.   then begin
  48.          INT(SetConsoleWindowInfoAndBufferSize) := 4;
  49.          exit;
  50.        end;
  51.   dwSize := GetLargestConsoleWindowSize(hConsoleOutput);
  52.   if (X > dwSize.X)
  53.   then X := dwSize.X;
  54.   if (Y > dwSize.Y)
  55.   then Y := dwSize.Y;
  56.   dwSize.X := X;
  57.   dwSize.Y := Y;
  58.   if (not (SetConsoleScreenBufferSize(hConsoleOutput, dwSize)))
  59.   then begin
  60.          INT(SetConsoleWindowInfoAndBufferSize) := 5;
  61.          exit;
  62.        end;
  63.   lpCW.Right := X - 1;
  64.   lpCW.Bottom := Y - 1;
  65.   if (not (SetConsoleWindowInfo(hConsoleOutput, TRUE, lpCW)))
  66.   then begin
  67.          INT(SetConsoleWindowInfoAndBufferSize) := 6;
  68.          exit;
  69.        end;
  70.   window(1, 1, X, Y);
  71.   INT(SetConsoleWindowInfoAndBufferSize) := 0;
  72. end;
  73.  
  74.  
  75. begin
  76.   Cols := 40;
  77.   Lines := 20;
  78.   SysMenuButtons := FALSE;
  79.   TitleWindow := 'My Window';
  80.   WindowError := SetConsoleWindowInfoAndBufferSize(Cols, Lines,
  81.                    SysMenuButtons, TitleWindow);
  82.   if WindowError
  83.   then writeln(INT(WindowError));
  84.   textbackground(red);
  85.   clrscr;
  86.   readln;
  87. end.
Add Comment
Please, Sign In to add comment