Raccourci clavier dans Popupmenu dynamique [Résolu]

Messages postés
9
Date d'inscription
lundi 21 juin 2004
Dernière intervention
27 novembre 2009
- - Dernière réponse : moucate974
Messages postés
9
Date d'inscription
lundi 21 juin 2004
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
3
Merci
Une solution très simple : c'est d'assigner le Popupmenu1 à la propriété PopUp de Form1.
Ton raccourci sera alors toujours reconnu.

Merci ThWilliam 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de ThWilliam
Messages postés
9
Date d'inscription
lundi 21 juin 2004
Dernière intervention
27 novembre 2009
0
Merci
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.
Commenter la réponse de moucate974
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
0
Merci
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
Commenter la réponse de ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
0
Merci
Sorry, je n'avais pas vu ton "edit1.PopupMenu:=popupmenu1;"
Alors, ton code marche, mais si edit1 est focalisé !
Commenter la réponse de ThWilliam
Messages postés
9
Date d'inscription
lundi 21 juin 2004
Dernière intervention
27 novembre 2009
0
Merci
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.
Commenter la réponse de moucate974
Messages postés
9
Date d'inscription
lundi 21 juin 2004
Dernière intervention
27 novembre 2009
0
Merci
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,
Commenter la réponse de moucate974

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.