如何增加代码内控制台的大小

问题描述 投票:0回答:3

我正在使用 lazarus IDE v1.8.4 在 pascal 中编写一些代码,正如问题所说,我需要能够在代码中编辑控制台大小,我最好还需要获取它们可以拥有的最大可能控制台宽度。如果您知道如何使用,请也让我知道您使用的用途。谢谢!

windows console lazarus freepascal
3个回答
4
投票

假设您的目标是 Windows:

此时控制台的窗口应该按照您设置的位置定位。然而,根据我的测试,虽然窗口符合尺寸要求,但该位置被忽略。

在这种情况下,可以使用任何 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.


不要忘记添加错误检查。


2
投票

对于我在 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.

它是从这个答案复制的,仅更改了窗口尺寸。


0
投票

当我使用它时,它会将新窗口设置为适当的大小,但不是程序中的控制台窗口?

© www.soinside.com 2019 - 2024. All rights reserved.