【问题标题】:Changing the console size更改控制台大小
【发布时间】:2010-10-18 10:08:27
【问题描述】:
Delphi 中的简单问题。我创建了一个控制台应用程序,如果控制台窗口的高度小于 80 行,我需要将其更改为 80 行。这需要从代码中完成,实际上在代码中是有条件的。 (即,当发生错误时,它会增加控制台的大小,因此整个(巨大的)错误报告都是可见的。)
请记住,这是一个控制台应用程序!当它启动时,它使用默认控制台,我需要更改它!
【问题讨论】:
标签:
delphi
console-application
delphi-2007
【解决方案1】:
调用 SetConsoleWindowInfo() 时,传递给控制台的 Left 和 Top 的值至少需要为 1,而不是 0。问题已解决。
我现在这样做:
uses
Windows;
var
Rect: TSmallRect;
Coord: TCoord;
begin
Rect.Left := 1;
Rect.Top := 1;
Rect.Right := 80;
Rect.Bottom := 60;
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;
【解决方案2】:
procedure SetConsoleWindow(NewWidth : integer;NewHeight : integer);
var
Rect: TSmallRect;
Coord: TCoord;
begin { SetConsoleWindow }
Coord.X := NewWidth;
Coord.y := NewHeight;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), Coord);
Rect.Left := 0; // must be zero
Rect.Top := 0;
Rect.Right := Coord.X - (Rect.Left + 1);
Rect.Bottom := Coord.y - (Rect.Top + 1);
SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), True, Rect);
end; { SetConsoleWindow }