Tôi có biểu mẫu với MainMenu và tôi muốn chặn khi người dùng chọn mục lệnh từ menu. này hoạt động trong Delphi:Sự cố với WM_COMMAND trên Lazarus/FPC
type
TForm1 = class(TForm)
... // Memo and MainMenu created
protected
procedure WMCommand(var Info: TWMCommand); message WM_COMMAND;
end;
procedure TForm1.WMCommand(var Info: TWMCommand);
begin
if (Info.ItemID < 10) then
Memo1.Lines.Add('WMCommand ' + IntToStr(Info.ItemID));
end;
Trong MainMenu tôi đã thêm một số mặt hàng và khi tôi chọn những mặt hàng từ menu sau đó Memo1 tôi được làm đầy với:
WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
tôi chuyển ứng dụng này để FPC/Lazarus , nhưng có vẻ như WM_COMMAND không được gọi! Khi tôi đặt điểm ngắt trong TForm1.WMCommand
ở Delphi thì Delphi đã dừng nhiều lần trước khi biểu mẫu chính xuất hiện. Lazarus không bao giờ dừng lại trên điểm ngắt này. Tôi nghĩ rằng một cái gì đó bị hỏng với WM_COMMAND ở Lazarus, nhưng có lẽ tôi không biết điều gì đó. Bất kỳ ý tưởng?
Tôi sử dụng Lazarus 0.9.28.2 beta với FPC 2.2.4 trên WinXP.
EDIT:
Sử dụng Winspector Tôi đã kiểm tra rằng MainMenu tạo WM_COMMAND:
WM_COMMAND
Code: 0
Control ID: 2
Control HWND: 0x00000000
Message Posted
Time: 09:37:14.0968
Tôi nghĩ rằng có lỗi trong Lazarus/FPC trong việc xử lý phương pháp nhắn WM_COMMAND và tôi báo cáo nó: http://bugs.freepascal.org/view.php?id=15521
Nó không phải là một tính năng lỗi/mất tích mà LM_COMMAND và CN_COMMAND cũng không hoạt động, iow chụp ở mức độ di động của sự kiện là không thể? –