Delphi: Wie ein Pfeil nach oben Tastenkombination zu Action / MenuItem zuweisen, und halten es für Actual Navigating der Liste Control (ListBox / VTV)?

StackOverflow https://stackoverflow.com/questions/2176519

Frage

Bitte helfen Sie mir: Wie ein Pfeil nach oben Tastenkombination Aktion oder Menüpunkt zuordnen, und halten Sie es tatsächlich für die Navigation in der Liste Steuerung (z ListBox / Virtuelle Treeview / sonstigen) zur gleichen Zeit

Danke!

War es hilfreich?

Lösung

Sie Kommentar:

  

Und wie über den Winamp-Player? Es Lauter hat / Volume Down auf die Pfeiltaste nach oben zugeordnet Merkmalen und nach unten entsprechend Pfeil .. Okay, wenn das unmöglich in Delphi, dann ...

aber es sicherlich möglich ist, es ist einfach nicht eine gute Idee, es zu tun, und gegen die Windows User Experience Interaktion Richtlinien.

Aber wenn Sie festgelegt sind es an der Umsetzung, hier ist, wie. Überschreiben Sie die folgende Methode in der Formularklasse, die die Aktion Komponenten enthält:

function IsShortCut(var Message: TWMKey): Boolean; override;

und es können Sie die Up- und Down-Taste verhindert das Auslösen der Aktionen, die sie sind Abkürzungen für:

function TWeirdForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if (Message.CharCode in [VK_UP, VK_DOWN])
    // insert test whether message needs to go to the focused control instead
    and (...)
  then begin
    // insert calls to code that should be executed instead
    Result := False;
    exit;
  end;
  inherited;
end;

Beachten Sie, dass Sie für den richtigen Schaltzustand testen sollen, und prüfen Sie, dass der Code keine andere Fenster Verhalten Benutzer nicht bricht erwarten, wie mit den Pfeiltasten des Fensters zu bewegen.

Andere Tipps

Auf den Formular-Eigenschaften festgelegt KeyPreview := true

dann auf KeyUp-Ereignis des Formulars Schreibereignis überprüfen, ob Sie Up-Taste gedrückt wird und es den Menüpunkt machen aufrufen (in diesem Fall den Menüpunkt namens Action1):

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_UP) and (ActiveControl = ListBox1)then
    Action11.Click;
end;

procedure TForm1.Action11Click(Sender: TObject);
begin
  if ListBox1.ItemIndex >=0  then
    ShowMessage(ListBox1.Items[ListBox1.ItemIndex]);
end;

Wenn Sie die Action1 müssen auch ausgeführt werden, wenn sie Stromregelung ist nicht die listbox, entfernen Sie den and Teil der IF Anweisung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top