如何增加代码中控制台的大小
How can I increase the size of the console inside the code
我正在使用 lazarus IDE v1.8.4 在 pascal 中编写一些代码,正如问题所说,我需要能够在代码中编辑控制台大小,我还最好需要获得最大他们可以拥有的可能的控制台宽度。如果您确实知道如何做,请也让我知道您使用的用途。谢谢!
这对我在 Win10Pro 上的 Lazarus 来说似乎工作正常。
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.
它是从 this answer 复制而来的,仅更改了 window 个维度。
假设您的目标是 Windows:
根据控制台字体和显示设置使用GetLargestConsoleWindowSize
检索可能的最大控制台大小,
使用SetConsoleScreenBufferSize
将控制台屏幕缓冲区设置为最大可能大小,
使用SetConsoleWindowInfo
设置控制台window的大小和位置,这样默认情况下就不会显示滚动条等等。
此时控制台的 window 应该按照您的设置定位。然而,在我的测试中,虽然 window 符合大小调整请求,但该位置被忽略了。
在这种情况下,使用任何 API 函数来移动 window,以下示例使用 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.
并且不要忘记添加错误检查。
我正在使用 lazarus IDE v1.8.4 在 pascal 中编写一些代码,正如问题所说,我需要能够在代码中编辑控制台大小,我还最好需要获得最大他们可以拥有的可能的控制台宽度。如果您确实知道如何做,请也让我知道您使用的用途。谢谢!
这对我在 Win10Pro 上的 Lazarus 来说似乎工作正常。
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.
它是从 this answer 复制而来的,仅更改了 window 个维度。
假设您的目标是 Windows:
根据控制台字体和显示设置使用
GetLargestConsoleWindowSize
检索可能的最大控制台大小,使用
SetConsoleScreenBufferSize
将控制台屏幕缓冲区设置为最大可能大小,使用
SetConsoleWindowInfo
设置控制台window的大小和位置,这样默认情况下就不会显示滚动条等等。
此时控制台的 window 应该按照您的设置定位。然而,在我的测试中,虽然 window 符合大小调整请求,但该位置被忽略了。
在这种情况下,使用任何 API 函数来移动 window,以下示例使用 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.
并且不要忘记添加错误检查。