Raccourci clavier dans Popupmenu dynamique [Résolu]

moucate974 9 Messages postés lundi 21 juin 2004Date d'inscription 27 novembre 2009 Dernière intervention - 11 déc. 2006 à 16:50 - Dernière réponse : moucate974 9 Messages postés lundi 21 juin 2004Date d'inscription 27 novembre 2009 Dernière intervention
- 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 

6 réponses

Répondre au sujet
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 11 déc. 2006 à 18:41
+3
Utile
Une solution très simple : c'est d'assigner le Popupmenu1 à la propriété PopUp de Form1.
Ton raccourci sera alors toujours reconnu.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
moucate974 9 Messages postés lundi 21 juin 2004Date d'inscription 27 novembre 2009 Dernière intervention - 11 déc. 2006 à 16:53
0
Utile
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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 11 déc. 2006 à 17:44
0
Utile
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
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 11 déc. 2006 à 17:48
0
Utile
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
moucate974 9 Messages postés lundi 21 juin 2004Date d'inscription 27 novembre 2009 Dernière intervention - 11 déc. 2006 à 18:07
0
Utile
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
moucate974 9 Messages postés lundi 21 juin 2004Date d'inscription 27 novembre 2009 Dernière intervention - 12 déc. 2006 à 09:44
0
Utile
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.