Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#9

AW: Eigene Komponente TCustomControl den Focus erhalten

  Alt 21. Okt 2018, 09:05
Man könnte ja nachschauen wie das bei anderen Controls funktioniert ... z.B. bei TButton
Delphi-Quellcode:
procedure TButtonControl.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_LBUTTONDOWN, WM_LBUTTONDBLCLK:
      if not (csDesigning in ComponentState) and not Focused then
      begin
        FClicksDisabled := True;
        Winapi.Windows.SetFocus(Handle); // das setzt den Focus
        FClicksDisabled := False;
        if not Focused then Exit;
      end;
    CN_COMMAND:
      if FClicksDisabled then Exit;
  end;
  inherited WndProc(Message);
end;
Danke, das scheint schon mal zu funktionieren. Beim Klick auf meine Komponente wird o.g. procedure ausgeführt. Beim erneuten KLick ebenfalls, doch nun ist Focused True.
Jetzt sollten alle KeyPress-Ereignisse auch an meine Komponente gehen (Form keyPreview = False).
Tun sie auch bis auf Pfeiltasten VK_Left, VK_Right, VK_Top und VK_Down. Diese aktivieren sofort das nächste bzw. vohergehende Control. Aber genau diese Tasten benötige.
Wie gesagt, wenn ich mit dem Tabulator zu meinem Control navigiere, kommen diese Tasten jedoch an.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat