SetConsoleScreenBufferSize: изменение размеров буфера консольного окнаПривет! Это второй пост, который был потерян когда-то в июле в связи с переездом на другой хостинг.
Речь пойдёт о так называемом Screen Buffer.
Консольное окно само по себе имеет определенные размеры, обычно 24 на 80 символов.

Также справа есть полоса прокрутки, с помощью неё можно увидеть то, что вышло за рамки экрана, так как когда мы всё пишем и пишем, например с помощью процедуры writeln, доходим до строки номер 24 и пишем дальше, то всё сдвигается. Или когда с помощью api функции SetConsoleCursorPosition или через GotoXY из модуля crt для delphi ставим курсор на место, расположенное ниже досягаемого нами пространства.
Всё, что можно увидеть с помощью прокрутки, и есть Screen Buffer.

Чтобы поменять его размеры, нужно познакомиться с ним поближе.

Что нам о нём известно?

Его размеры можно получить с помощью api функции GetConsoleScreenBufferInfo, вот её синтаксис:

function GetConsoleScreenBufferInfo(hConsoleOutput: THandle; var lpConsoleScreenBufferInfo: TConsoleScreenBufferInfo): BOOL;

По порядку:
hConsoleOutput: THandle — handle вывода консольного окна, его нам вернёт api функция GetStdHandle с параметром STD_OUTPUT_HANDLE;
lpConsoleScreenBufferInfo: TConsoleScreenBufferInfo — сюда передаём объект типа TConsoleScreenBufferInfo

Структура CONSOLE_SCREEN_BUFFER_INFO, она же TConsoleScreenBufferInfo, она же _CONSOLE_SCREEN_BUFFER_INFO:

  _CONSOLE_SCREEN_BUFFER_INFO = packed record
    dwSize: TCoord;
    dwCursorPosition: TCoord;
    wAttributes: Word;
    srWindow: TSmallRect;
    dwMaximumWindowSize: TCoord;
  end;

Функция GetConsoleScreenBufferInfo её нам заполнила, что мы получили:
dwSize: TCoord — размер буфера, вот он! (по умолчанию 80 на 300 символов)
dwCursorPosition: TCoord — положение курсора, тоже полезно, вполне заменит паскалевские WhereX и WhereY, они также реализованы в моём модуле crt
wAttributes: Word — не экспериментировал с этим, вроде цвета
srWindow: TSmallRect — тоже не экспериментировал, по msdn это координаты окна, уточни какого и напиши в комментарии, ок?
dwMaximumWindowSize: TCoord — максимальный размер буфера, в символах, естественно.

Меняем размер Screen Buffer

Ну и кульминация, функция SetConsoleScreenBufferSize:

SetConsoleScreenBufferSize(hConsoleOutput: THandle; dwSize: TCoord): BOOL;

Передаём тот же handle вывода, и структуру TCoord с нужным нам размером.

Как же без примера?

const
  NewSize: TCoord = (x: 80; y: 10000);

...
  SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), NewSize);

Здесь размер буфера окна стал 80 на 10000.

Постовой:
А тем временем Zdez Bil Ya в своём добром-добром блоге пишет про delphi и пароли в qip.