Wir haben ein bestimmtes Suchformular bei der Arbeit, das kürzlich überarbeitet wurde. Seine Funktionalität ist die eines Standard-Suchformulars: Geben Sie oben in einigen Feldern ein paar Kriterien ein, klicken Sie auf die Schaltfläche Suchen und zeigen Sie die Ergebnisse unten in einem Raster an. Aber es war hässlich und funktional sehr eingeschränkt, also hat einer meiner Mitarbeiter es umgebaut ... kurz bevor er zu einem neuen Job ging. Jetzt versuche ich, die letzten Details zu vervollständigen.Wie kann ich einen TVirtualStringTree-Prozessschlüssel mit einer höheren Priorität drücken?
Eine der Änderungen war das Ersetzen der alten TListBox
Gitter mit einem viel stärkeren TVirtualStringTree
. Aber in diesem Prozess scheint es etwas gebrochen zu haben: Vorher, wenn Sie auf eine Zeile im Raster geklickt haben (geben Sie das Raster im Fokus) und drücken Sie Geben Sie ein, der entsprechende Event-Handler würde auslösen und Ihre Eingabe bearbeiten und öffnen die Detailansicht für den ausgewählten Artikel. In diesem Raster wird jedoch TButton
auf das Formular mit der Default = true
Eigenschaft statt dessendrücken.
Wie kann ich die TVirtualStringTree
Vorrang haben, wenn es Eingabefokus hat, so dass es auf den Benutzer reagieren wird, drücken Sie sich selbst eingeben (und vorzugsweise statt) es an das Formular zu senden?
Hmm ... das würde wahrscheinlich funktionieren, aber gibt es eine Lösung, die keine Änderung des Codes einer Drittanbieterkomponente erfordert? –
Gern geschehen. Sie müssen den Code nicht ändern. Sie können einen Interposer verwenden oder die Fensterprozedur abfangen, indem Sie der Eigenschaft 'WindowProc' des Steuerelements zuweisen. Wenn Sie 'WM_GETDLGCODE' nicht behandeln, wird die Standardschaltfläche die Nachricht erhalten. Was du nicht willst. –
Wow. Ich wusste eigentlich nicht, dass die "WindowProc" -Eigenschaft eine Sache war. Das war genau das, was ich brauchte, um es zu reparieren. Vielen Dank! –