【发布时间】:2020-06-15 09:54:50
【问题描述】:
输出错误数据:
[dcc32 Error] Unit1.pas(45): E2003 Undeclared identifier: 'hButton'
[dcc32 Error] Unit1.pas(53): E2003 Undeclared identifier: 'id_Button'
[dcc32 Fatal Error] Project1.dpr(6): F2063 Could not compile used unit 'Unit1.pas'
请告诉我们问题出在哪里。
我的代码:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, Windows, Messages;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
const
sClassName = 'MyWindow';
var
hWnd: THandle; // идентификатор окна (дескриптор)
WndClass: TWndClass; //структура WndClass
Msg: TMsg; //структура для принятия сообщений
function WindowProc(hWnd: THandle; uMsg, wParam, lParam: Integer): Integer; stdcall; export;
{функция окна}
begin
Result := 0;
case uMsg of
WM_DESTROY: //если uMsg равна WM_DESTROY(код закрытия окна), то закрываемся
begin
halt(0);
end;
WM_CREATE: begin
// создание кнопки
hButton := CreateWindowEx (0,
'BUTTON', // определенный класс кнопки
'&Нажмите здесь', // надпись на кнопке
ws_Child or ws_Visible
or bs_PushButton, // стили для кнопки
10, 10, // координаты левого верхнего угла
200, 80, // размер
hWnd, // handle родителя
id_Button, // идентификатор кнопки (задается программистом)
hInstance,
nil);
end;
WM_COMMAND:
// проверяем, от какой кнопки пришло сообщение
if LoWord (wParam) = id_Button then
// если это событие - click
if HiWord (wParam) = bn_Clicked then
// код обработки нажатия кнопки
MessageBox (hWnd, 'Вы нажали на кнопку', '', MB_OK);
end;
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
end;
end;
end.
【问题讨论】:
-
您忘记声明
hButton变量。此外,您忘记定义id_Button常量。 -
我根本不明白结构。为什么你的
Button1Click中有一个WindowProc函数? -
您是否正在尝试构建混合 FMX + VCL 应用程序?如果是这样,您需要 FMX 部件做什么?