Raccourci clavier dans Popupmenu dynamique

Résolu
moucate974 Messages postés 8 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 27 novembre 2009 - 11 déc. 2006 à 16:50
moucate974 Messages postés 8 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 27 novembre 2009 - 12 déc. 2006 à 09:44
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

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
11 déc. 2006 à 18:41
Une solution très simple : c'est d'assigner le Popupmenu1 à la propriété PopUp de Form1.
Ton raccourci sera alors toujours reconnu.
3
moucate974 Messages postés 8 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 27 novembre 2009
11 déc. 2006 à 16:53
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.
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
11 déc. 2006 à 17:44
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
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
11 déc. 2006 à 17:48
Sorry, je n'avais pas vu ton "edit1.PopupMenu:=popupmenu1;"
Alors, ton code marche, mais si edit1 est focalisé !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
moucate974 Messages postés 8 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 27 novembre 2009
11 déc. 2006 à 18:07
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.
0
moucate974 Messages postés 8 Date d'inscription lundi 21 juin 2004 Statut Membre Dernière intervention 27 novembre 2009
12 déc. 2006 à 09:44
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,
0
Rejoignez-nous