Отвечаю сам себе, и на случай, если ещё кому пригодится..
Выдержка кода из
$LAZARUS/lcl/interfaces/win32/win32callback.inc- Код: Выделить всё
function WindowProc(Window: HWnd; Msg: UInt; WParam: Windows.WParam; LParam: Windows.LParam): LResult; stdcall;
....
....
begin
Assert(False, 'Trace:WindowProc - Start');
FillChar(LMessage, SizeOf(LMessage), 0);
PLMsg := @LMessage;
WinProcess := True;
NotifyUserInput := False;
....
....
case Msg of
....
WM_CHAR:
begin
{$ifdef WindowsUnicodeSupport}
// у меня флаг неактивен
{$else}
PLMsg:=@LMChar;
with LMChar do
begin
Msg := CN_CHAR; // а вот и подмена сообщения на пользовательское
KeyData := LParam;
CharCode := Word(WParam);
Result := 0;
Assert(False,Format('WM_CHAR KeyData= %d CharCode= %d ',[KeyData,CharCode]));
end;
WinProcess := false;
{$endif}
end;
Собственно, выполнил ещё проверку - подменил оконную функцию, и сделал PostMessage(мойWinControl.Handle, WM_CHAR, 0, 0).
Итог: в саму оконную функцию сообщение попадает. Тестовый проект во вложении к посту..
Если кто найдёт неточности или ошибки в моём сообщении - пожалуйста, напишите и исправьте! Мне это важно и интересно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.