我正在阅读一本关于 Windows API 的旧 Delphi 书籍。这是其中的一个例子。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ Register the Window Class }
function RegisterClass: Boolean;
var
WindowClass: TWndClass;
begin
{ setup our new window class }
WindowClass.Style := CS_HREDRAW or CS_VREDRAW; { set the class styles }
WindowClass.lpfnWndProc := @DefWindowProc; { point to the default window procedure }
WindowClass.cbClsExtra := 0; { no extra class memory }
WindowClass.cbWndExtra := 0; { no extra window memory }
WindowClass.hInstance := hInstance; { the application instance }
WindowClass.hIcon := 0; { no icon specified }
WindowClass.hCursor := 0; { no cursor specified }
WindowClass.hbrBackground := COLOR_WINDOW; { use a predefined color }
WindowClass.lpszMenuName := nil; { no menu }
WindowClass.lpszClassName := 'TestClass'; { the registered class name }
{ now that we have our class set up, register it with the system }
Result := Winapi.Windows.RegisterClass(WindowClass) <> 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hWindow: HWND;
begin
{ Step 1: Register our new window class }
if not RegisterClass then
begin
ShowMessage('RegisterClass failed');
Exit;
end;
{ Step 2: Create a window based on our new class }
hWindow := CreateWindowEx(0, { no extended styles }
'TestClass', { the registered class name }
'New Window', { the title bar text }
WS_OVERLAPPEDWINDOW, { a normal window style }
CW_USEDEFAULT, { default horizontal position }
CW_USEDEFAULT, { default vertical position }
CW_USEDEFAULT, { default width }
CW_USEDEFAULT, { default height }
0, { no owner window }
0, { no menu }
hInstance, { the application instance }
nil { no additional information }
);
{ Step 3: If our window was created successfully, display it }
if hWindow <> 0 then
begin
ShowWindow(hWindow, SW_SHOWNORMAL);
UpdateWindow(hWindow);
end
else
begin
ShowMessage('CreateWindow failed');
Exit;
end;
end;
end.
用户界面非常简单。我只需拖动一个按钮并将其放在表单上。但是,当我运行程序Embarcadero® Delphi 11.0 Version 28.0.42600.6491
并单击表单上的按钮时,我得到Project Project1.exe 引发的异常类 ERangeError 并显示消息“范围检查错误”。. 之后,我得到了这个错误。
谁能帮忙看看问题出在哪里?