Отвечаю сам себе, и на случай, если ещё кому пригодится..
Выдержка кода из 
$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).
Итог: в саму оконную функцию сообщение попадает. Тестовый проект во вложении к посту..
Если кто найдёт неточности или ошибки в моём сообщении - пожалуйста, напишите и исправьте! Мне это важно и интересно.
 
			У вас нет необходимых прав для просмотра вложений в этом сообщении.