IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Message Personnalisé , affectation d'une action à un bouton


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut Message Personnalisé , affectation d'une action à un bouton
    Bonjour,

    Contexte : D2010 , Windows vista et + , douchette USB (ou pas)

    Dans le cadre d'un programme de saisie de réception d'article je tente de gérer les messages via ma propre unité plutôt que par un messagebox .
    Pourquoi ? parce que certains postes ont une douchette usb pour faire la saisie et que un scan = la touche enter et donc un clic sur un bouton

    j'ai donc fait la forme suivante
    Nom : MessagePersonnalisé.PNG
Affichages : 126
Taille : 33,0 Ko

    une fonction (surchargée) permet d'afficher le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function UnMessage(const titre,texte,son : String; const MessageType : TMessageType; const scan : boolean;
                       const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String) : integer; overload;
    function UnMessage(const titre,texte,son : String;const MessageType : TMessageType; const scan : boolean;
                       const btn1Texte : string; const btn1Value:integer ;const btn1StringVal :String;
                       const btn2Texte : string; const btn2Value:integer ;const btn2StringVal :String) : integer; overload;
    function UnMessage(const titre,texte,son : String;const MessageType : TMessageType; const scan : boolean;
                       const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String;
                       const btn2Texte : string; const btn2Value:integer ; const btn2StringVal :String;
                       const btn3Texte : string; const btn3Value:integer ; const btn3StringVal :String) : integer; overload;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    function UnMessage(const titre,texte,son : String;const MessageType : TMessageType;
                       const scan : boolean;
                       const btn1Texte : string; const btn1Value:integer ; const btn1StringVal :String) : integer;
    var FMessage : TMessagePersonnalise;
    begin
     FMessage:=TMessagePersonnalise.Create(nil);
     try
       Fmessage.Resultat:=0;
       FMessage.Caption:=Titre;
       FMessage.Corps.Caption:=Texte;
       FMessage.Son.FileName:=son;
       FMessage.Image1.Tag:=Ord(MessageType);
       FMessage.RightBtn.Visible:=False;
       FMessage.LeftBtn.Visible:=False;
     
       FMessage.MiddleBtn.Visible:=true;
       FMessage.MiddleBtn.tag:=btn1Value;
       if FMessage.MiddleBtn.Visible
          then begin
                if Scan then FMessage.ActionOk.Caption:=btn1StringVal
                else if btn1Texte<>'' then FMessage.ActionOk.Caption:=btn1Texte;
                FMessage.ActionOk.Tag:=btn1Value;
                FMessage.ActionOk.Hint:=btn1StringVal;
                FMessage.MiddleBtn.Action:=FMessage.ActionOk;  <<< je pense que le problème est ici 
                Fmessage.ActionOk.Enabled:=not Scan
          end;
       FMessage.ScanText.Visible:=Scan;
       if Scan then FMessage.ActiveControl:=FMessage.Scantext;
       FMessage.ShowModal;
       Result:=FMessage.Resultat;
     finally
       FMessage.Free;
     end;
    end;
    Si je n'ai pas de soucis en ce qui concerne la gestion avec le code barre (Scan=True)
    pas moyen de faire exécuter l'action du bouton !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FMessage.MiddleBtn.Action:=FMessage.ActionOk;
    affiche bien le bon 'icone', le bon libellé, les bons hint et Tag (j'utilise Hint pour avoir la valeur du code barre , Tag comme résultat) mais impossible de faire exécuter l'action !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    unit MsgPerso;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ExtCtrls, ImgList, JvComponentBase, JvWavePlayer,
      ActnList;
     
    type
     
      TMessagePersonnalise = class(TForm)
        ImageList1: TImageList;
        Panel1: TPanel;
        Corps: TLabel;
        Panel2: TPanel;
        LeftBtn: TBitBtn;
        MiddleBtn: TBitBtn;
        RightBtn: TBitBtn;
        Scantext: TEdit;
        Son: TJvWavePlayer;
        Image1: TImage;
        ImageList2: TImageList;
        ActionList1: TActionList;
        ActionOk: TAction;
        ActionRetry: TAction;
        ActionCancel: TAction;
        procedure ScantextKeyPress(Sender: TObject; var Key: Char);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormActivate(Sender: TObject);
        procedure ActionOkExecute(Sender: TObject);
        procedure ActionCancelExecute(Sender: TObject);
        procedure ActionRetryExecute(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
        resultat : Integer;
      end;
     
    var
      MessagePersonnalise: TMessagePersonnalise;
     
    implementation
     
    {$R *.dfm}
     
    procedure TMessagePersonnalise.ActionCancelExecute(Sender: TObject);
    begin
    Resultat:=(Sender as TAction).Tag;
    Close;
    end;
     
    procedure TMessagePersonnalise.ActionOkExecute(Sender: TObject);
    begin
    Resultat:=(Sender as TAction).Tag;
    Close;
    end;
     
    procedure TMessagePersonnalise.ActionRetryExecute(Sender: TObject);
    begin
    Resultat:=(Sender as TAction).Tag;
    Close;
    end;
     
    procedure TMessagePersonnalise.FormActivate(Sender: TObject);
    var bmp: TBitMap;
    begin
     bmp:=TBitmap.Create;
     try
     bmp.PixelFormat := pf32bit;
     bmp.AlphaFormat := afDefined;
     ImageList1.GetBitmap(Image1.tag, bmp);
     Image1.Picture.Bitmap.Assign(bmp);
     finally
       bmp.Free;
     end;
     Corps.Caption:=corps.Caption+sLineBreak;
    end;
     
    procedure TMessagePersonnalise.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
    Action:=caFree;
    end;
     
    procedure TMessagePersonnalise.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
    CanClose:=Resultat<>0;
    end;
     
    procedure TMessagePersonnalise.ScantextKeyPress(Sender: TObject; var Key: Char);
    begin
    resultat:=0;
    if Key=#13 then
     begin
       if ScanText.Text=LeftBtn.Hint then Resultat:=LeftBtn.Tag;
       if ScanText.Text=MiddleBtn.Hint then Resultat:=MiddleBtn.Tag;
       if ScanText.Text=RightBtn.Hint then Resultat:=RightBtn.Tag;
       if resultat=0 then
         begin
           Son.Play;
           ScanText.Text:='';
           Scantext.SetFocus;
         end
         else Close;
     end;
    end;
     
    end.
    je rate quoi ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    non cela devrais fonctionner

    ce n'est pas tes condition antérieur qui ne serais pas remplies ?
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par anapurna Voir le message
    non cela devrais fonctionner
    c'est ce que je me dit, mais pas ce que me programme fait
    Citation Envoyé par anapurna Voir le message
    ce n'est pas tes conditions antérieurs qui ne serais pas remplies ?
    je passe bien cette condition et rempli bien les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     if FMessage.MiddleBtn.Visible
          then begin
                if Scan then FMessage.ActionOk.Caption:=btn1StringVal
                else if btn1Texte<>'' then FMessage.ActionOk.Caption:=btn1Texte;
                FMessage.ActionOk.Tag:=btn1Value;
                FMessage.ActionOk.Hint:=btn1StringVal;
                FMessage.MiddleBtn.Action:=FMessage.ActionOk;  <<< je pense que le problème est ici 
                Fmessage.ActionOk.Enabled:=not Scan
          end;
    mais ne passe pas par les actions , comme si le click sur le bouton restait lettre morte
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Dormir dessus a des effets salutaires,

    Deux erreurs dans s'étaient glissées dans mon dfm :
    - les OnExecute n'étaient plus liés (je ne sais pourquoi)
    - le state de la liste d'action était a asSuspendedEnabled (ça je sais , je veux voir les boutons même si je passe par le scan mais sans pouvoir cliquer dessus enabled=false) en fait il faut que je change le state de l'actionlist selon la variable Scan

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       if FMessage.MiddleBtn.Visible
          then begin
                if Scan then FMessage.ActionCancel.Caption:=btn1StringVal
                else if btn2Texte<>'' then FMessage.ActionCancel.Caption:=btn1Texte;
                FMessage.ActionCancel.Tag:=btn1Value;
                Fmessage.ActionCancel.Hint:=btn1StringVal;
                FMessage.ActionCancel.Enabled:=not Scan;
                FMessage.RightBtn.Action:=FMessage.ActionCancel;
          end;
       FMessage.ScanText.Visible:=Scan;
       if Scan then begin
         FMessage.ActiveControl:=FMessage.Scantext;
         FMessage.ActionList1.State:=asSuspendedEnabled;  << ligne ajoutée 
       end;
    bref je suis honteux et meutri dans mon égo, une journée (et nuit) pour ça !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affectation d'une action à une bouton de commande
    Par abdelilah_ao dans le forum IHM
    Réponses: 1
    Dernier message: 13/11/2010, 06h50
  2. Associer une action à un bouton dans une JDialog
    Par moomba dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 07/12/2008, 20h08
  3. Associer une action à un bouton
    Par reram dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 09/08/2008, 16h47
  4. Algorithme spécifier une action à un bouton
    Par KinF dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 09/12/2004, 05h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo