Delphi: Comment attribuer une flèche de raccourci clavier à l'action / MenuItem et Keep It réelle pour naviguer la liste de contrôle (ListBox / VTV)?

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

Question

S'il vous plaît me aider: Comment assigner un raccourci l'examen du point flèche à l'action ou le menu clavier, et le garder réel pour naviguer dans le contrôle de liste (par exemple ListBox / Virtual Treeview / autre) en même temps

Merci!

Était-ce utile?

La solution

Vous commentez:

  

Et que diriez-vous du lecteur Winamp? Il a Augmenter le volume / Baisser le volume fonctions assignées à la touche du clavier et flèche vers le bas flèche haut en conséquence .. D'accord, si cela impossible à Delphes, puis ...

mais il est certainement possible, il est tout simplement pas une bonne idée de le faire, et contre les lignes directrices d'interaction de l'expérience utilisateur Windows.

Mais si vous êtes prêt à mettre en œuvre, voici comment. Remplacer la méthode suivante dans votre classe de formulaire qui contient les composants d'action:

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

et il vous pouvez empêcher la clé Haut et Bas de déclencher les actions qu'ils sont des raccourcis pour:

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;

Notez que vous devez tester l'état de décalage correct aussi, et vérifiez que votre code ne se casse pas tout autre utilisateur de comportement de la fenêtre attendent, comme le déplacement de la fenêtre avec les touches fléchées.

Autres conseils

Sur les propriétés du formulaire mis KeyPreview := true

puis sur l'événement KeyUp de l'événement d'écriture de formulaire pour vérifier si vous Up touche est enfoncée et faire appeler l'élément de menu (sur ce point de menu appelé cas 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;

Si vous avez besoin Action1 à exécuter même si elles ne sont pas de contrôle actuel de la zone de liste, retirez la partie and de la déclaration de IF

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top