Delphi: Wie ein Pfeil nach oben Tastenkombination zu Action / MenuItem zuweisen, und halten es für Actual Navigating der Liste Control (ListBox / VTV)?
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!
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