我正在閱讀一本關于 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 并顯示訊息“范圍檢查錯誤”。. 之后,我收到了這個錯誤。

誰能幫忙看看問題出在哪里?
順便說一句,我剛試過 Delphi 7,程式運行正常。當我單擊按鈕時,會彈出一個空視窗。

uj5u.com熱心網友回復:
CW_USEDEFAULT 常量的值與 CreateWindowEx 函式的宣告不太一致。將以下代碼添加到 Button1Click 的頂部,靠近 var 部分:
const
CW_USEDEFAULT = -MaxInt - 1;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/382519.html
上一篇:在C中搜索陣列
