Как я могу увеличить размер консоли внутри кода - PullRequest
0 голосов
/ 13 декабря 2018

Я делаю некоторый код на паскале, используя lazarus IDE v1.8.4, так как в вопросе говорится, что мне нужно иметь возможность редактировать размер консоли в коде, мне также желательно получить максимально возможную ширину консоли, которую они могут иметь,Если вы знаете, как, пожалуйста, также дайте мне знать, что вы использовали .. использовали.Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Предполагается, что вы ориентируетесь на Windows:

  • Используйте GetLargestConsoleWindowSize, чтобы получить максимально возможный размер консоли в зависимости от шрифта консоли и настроек дисплея,

  • Используйте SetConsoleScreenBufferSize, чтобы установить максимальный размер буфера экрана консоли

  • Использовать SetConsoleWindowInfo для установки размера и положения окна консоли, чтобы полосы прокрутки не были видны по умолчанию и т. Д.

На этом этапе окно консоли должно располагаться так, как выустановил.Однако в моих тестах, хотя окно соответствует запросу на определение размера, позиция игнорируется.

В этом случае используйте любую функцию API для перемещения окна, в приведенных ниже примерах используется SetWindowPos.Мне пришлось объявить GetConsoleWindow, как это не было объявлено в Lazarus 1.6.

program Project1;

{$APPTYPE CONSOLE}

uses
  windows;

function GetConsoleWindow: HWND; stdcall external 'kernel32';

var
  Con: THandle;
  Size: TCoord;
  Rect: TSmallRect;
  Wnd: HWND;
begin
  Con := GetStdHandle(STD_OUTPUT_HANDLE);
  Size := GetLargestConsoleWindowSize(Con);

  SetConsoleScreenBufferSize(Con, Size);

  Rect.Left := -10;
  Rect.Top := -10;
  Rect.Right := Size.X - 11;
  Rect.Bottom := Size.Y - 11;
  SetConsoleWindowInfo(Con, True, Rect);

  Wnd := GetConsoleWindow;
  SetWindowPos(Wnd, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);

  Readln;
end.

И не забудьте добавить проверку ошибок.

0 голосов
/ 13 декабря 2018

Мне кажется, что это хорошо работает в Lazarus для Win10Pro.

program ResizeConsoleWin;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

procedure SetConsoleWindowSize;
var
  Rect: TSmallRect;
  Coord: TCoord;
begin
  Rect.Left := 1;
  Rect.Top := 1;
  Rect.Right := 300;  // notice horiz scroll bar once the following executes
  Rect.Bottom := 30;
  Coord.X := Rect.Right + 1 - Rect.Left;
  Coord.y := Rect.Bottom + 1 - Rect.Top;
  SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), Coord);
  SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), True, Rect);
end;

begin
  SetConsoleWindowSize;
  readln;
end.

Он скопирован с этот ответ с изменением только размеров окна.

...