Raccourci clavier dans Popupmenu dynamique

Résolu
Signaler
Messages postés
8
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
27 novembre 2009
-
Messages postés
8
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
27 novembre 2009
-
Bonjour,
Je crée dynamiquement des items de popupmenu. Sur certains de ces items j'y associe des raccourcis claviers (shortcut). Malheureusement, les raccourcis clavier ne fonctionnent pas... Quelqu'un pourrait m'aider ? Je mets si-dessous un exemple simple de mon problème. A l'exécution, on clique sur le bouton, puis on fait CTRL C et cela ne marche pas. Ce qui est bizarre, c'est que si j'utilise un Mainmenu à la place du Popupmenu, cela fonctionne...
Merci beaucoup pour votre aide.

unit Unit1;
interface
...
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    procedure MonEvenementOnClick(Sender: TObject);
    { Déclarations publiques }
  end;


var Form1: TForm1;


implementation
...

procedure TForm1.Button1Click(Sender: TObject);
var MonItemMenu: Tmenuitem;
begin
  MonItemMenu:=Tmenuitem.Create(form1);
  MonItemMenu.OnClick:=MonEvenementOnClick;
  MonItemMenu.Caption:='ce txt ne s affiche pas avec le clavier quand je tape CTRL C';
  MonItemMenu.ShortCut:=shortcut(Word('C'), [ssCtrl]);


  popupmenu1.Items.Add(MonItemMenu);
  edit1.PopupMenu:=popupmenu1;
end;


procedure TForm1.MonEvenementOnClick(Sender: TObject);
begin
  edit1.Text:='toto'
end;


end.

6 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
4
Une solution très simple : c'est d'assigner le Popupmenu1 à la propriété PopUp de Form1.
Ton raccourci sera alors toujours reconnu.
Messages postés
8
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
27 novembre 2009

En fait, c'est plutôt ce source...

unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;


type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    procedure MonEvenementOnClick(Sender: TObject);
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var MonItemMenu: Tmenuitem;
begin
  MonItemMenu:=Tmenuitem.Create(form1);
  MonItemMenu.OnClick:=MonEvenementOnClick;
  MonItemMenu.Caption:='nom item';
  MonItemMenu.ShortCut:=shortcut(Word('C'), [ssCtrl]);


  popupmenu1.Items.Add(MonItemMenu);
  edit1.PopupMenu:=popupmenu1;
end;


procedure TForm1.MonEvenementOnClick(Sender: TObject);
begin
  edit1.Text:='ce txt ne s affiche pas avec le clavier'
end;


end.
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
4
Salut,

N'as-tu pas oublié d'assigner ton PopUpMenu1 à la propriété PopUp d'un composant : p.ex Edit1, Form1... ??? Sinon, évidemment, rien ne se passe.

Attention : Ctrl + C = raccourci universel pour le copier. 

A +
Thierry
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
4
Sorry, je n'avais pas vu ton "edit1.PopupMenu:=popupmenu1;"
Alors, ton code marche, mais si edit1 est focalisé !
Messages postés
8
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
27 novembre 2009

Oui, merci tu as raison. Mais j'avais simplifié le problème pour le rendre plus lisible. En fait, j'affecte le popupmenu à une image (... donc pas de focus). Je suis donc toujours bloqué... Merci quand même.

Mon code serait donc avec l'image :

unit Unit1;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, jpeg, ExtCtrls;


type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    procedure MonEvenementOnClick(Sender: TObject);
    { Déclarations publiques }
  end;


var
  Form1: TForm1;


implementation


procedure TForm1.Button1Click(Sender: TObject);
var MonItemMenu: Tmenuitem;
begin
  MonItemMenu:=Tmenuitem.Create(form1);
  MonItemMenu.OnClick:=MonEvenementOnClick;
  MonItemMenu.Caption:='nom item';
  MonItemMenu.ShortCut:=shortcut(Word('C'), [ssCtrl]);


  popupmenu1.Items.Add(MonItemMenu);
  image1.PopupMenu:=popupmenu1;
//  form1.ActiveControl:=Edit1;
end;


procedure TForm1.MonEvenementOnClick(Sender: TObject);
begin
  edit1.Text:='ce txt ne s affiche pas avec le clavier'
end;


end.
Messages postés
8
Date d'inscription
lundi 21 juin 2004
Statut
Membre
Dernière intervention
27 novembre 2009

Finalement, la solution la plus simple est la meilleure. Ta solution est la bonne, même s'il faut en plus que je gère l'objet sélectionné.
Merci,