Frage

Ich schreibe eine Grid-Control, die ich auf TCustomControl basiert, so dass ich die ganze Struktur handhaben kann, Malerei und Navigation selbst. Das Bit, dass ich nicht, dass dies scheint, um herauszufinden:

In meinem Konstruktor, habe ich Control auf diese:

ControlStyle := ControlStyle + [csCaptureMouse, csClickEvents,
    csDoubleClicks, csNeedsBorderPaint, csPannable];

Die Idee ist, dass, wenn die Steuergriffe Mausereignisse, ich Dinge wie Set-Auswahl tun kann usw. Ich bemerkte aber, dass die Kontrolle erhält nie den Fokus. Ich bin zufällig ein TComboBox auf dem Formular haben, und es ist klar darauf ausgerichtet, wenn das Formular erstellt wird. Egal, wie oft ich in meinem Raster, der Fokus bleibt auf der Combobox.

Das hat natürlich Auswirkungen auf meinen Umgang mit Tastaturereignissen als auch.

Die Frage ist also, wie ist es bestimmt, dass der Fokus auf ein Steuerelement verschieben sollte, wenn Sie darauf klicken?

War es hilfreich?

Lösung

Die Custom sollte auf sich selbst nennen SetFocus, wenn es angeklickt wird.

procedure TMyCustomControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  inherited;

  if not (csDesigning in ComponentState) and CanFocus then
    SetFocus;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top