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

Composants FMX Delphi Discussion :

MessageDialog TDialogService et les boutons


Sujet :

Composants FMX 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 MessageDialog TDialogService et les boutons
    Bonjour,

    Versions Rio et Sidney

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          TDialogService.MessageDialog('mon message',
                                          TMsgDlgType.mtWarning,
                                          [TMsgDlgBtn.mbIgnore,TMsgDlgBtn.mbAbort],
                                          TMsgDlgBtn.mbIgnore,0,
                                          procedure(const Aresult : TModalResult )
                                          begin
                                             Continuer:=AResult=mrIgnore;
                                           end
                                          );
    J'ai beau indiquer que c'est le bouton ignorer que je veux par défaut (et accessoirement en premier) rien n'y fait

    Nom : Capture.PNG
Affichages : 127
Taille : 17,9 Ko

    Accessoirement j'ai aussi constaté une chose étrange
    Nom : Capture_1.PNG
Affichages : 129
Taille : 13,6 Ko
    la liste des boutons n'est pas respectée
    et même cette combinaison [TMsgDlgBtn.mbOk,TMsgDlgBtn.mbIgnore] n'est pas acceptée


    Comportement "normal" ou
    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 éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    un Set Of n'a pas d'ordre ce n'est pas un Array Of
    Peu importe l'ordre cela ne fait qu'activer le Bit correspond à chaque valeur de l'énumération
    C'est un problème que j'avais contourné il y a longtemps en D7 en customisant les libellés ... si je trouve un exemplaire du source sur le forum, j'édite ma réponse
    EDIT : MessageDlgCustomBtn ou TSLTMessageDlg mais désolé c'est du VCL

    Tout ce qui suit est VCL, si tu veux quand même

    et l'utilsation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case TThomMessageDlg.Show(Column.Title.Caption, mtConfirmation, [mbCancel, mbNoToAll, mbYesToAll], ['Annuler', 'Tout décocher', 'Tout cocher']) of
    N'ayant jamais fait la version combinant DefaultButton et ButtonStrings, je jouais sur les valeurs à fournir pour dire quel est le bouton par défaut, selon le code existant dans CreateMessageDialog
    En fait, je n'utilise plus les dialogs par défaut depuis tellement de temps, mais que le bouton par défaut soit mal respecté, cela me surprend à peine !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      if mbOk in Buttons then DefaultButton := mbOk else
        if mbYes in Buttons then DefaultButton := mbYes else
          DefaultButton := mbRetry;
     
        if mbCancel in Buttons then CancelButton := mbCancel else
          if mbNo in Buttons then CancelButton := mbNo else
            CancelButton := mbOk;
    ce qui pouvait donner des énumérations étrange car il faut respecter l'ordre déclaration de l'énumération dans le tableau ButtonStrings

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if TThomMessageDlg.Show(Msg, mtConfirmation, [mbOk, mbRetry], ['Fermer', 'Modifier']) = mrRetry then
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i := TThomMessageDlg.Show(rsPrintPhotOrNot, mtConfirmation, [mbYes, mbNo, mbIgnore, mbClose], ['Avec Photo', 'Sans Photo', 'Aperçu réduit', 'Annuler'],0);
    une autre version gère un bouton par défaut, le comble je l'utilise souvent pour empêcher qu'il fonctionne, pour éviter qu'un ENTREE venant d'une douchette CodeBarre vienne fermer un message que l'opérateur doit lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     mr := TThomMessageDlg.Show(Format(_('Colis non consolidé : %s.'#13#13'Poursuivre la clôture du colis ?'), [LColisNonConsolides.CommaText]), mtConfirmation, [mbYes, mbNo, mbIgnore], mbCancel);


    Pour FMX, donc TFMXDialogService.MessageDialog, regarde le code, il faut une combinaison précise dans le set TMsgDlgButtons et cela semble être bien plus limité que sous Windows
    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
     
      LButtons := AButtons - [TMsgDlgBtn.mbHelp];
      if LButtons = [TMsgDlgBtn.mbOK] then
      begin
        Params.dwStyle := MB_OK;
        case ADefaultButton of
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
        end;
      end
      else if LButtons = mbOkCancel then
      begin
        Params.dwStyle := MB_OKCANCEL;
        case ADefaultButton of
          TMsgDlgBtn.mbCancel:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
        end;
      end
      else if (LButtons = mbYesAllNoAllCancel) or (LButtons = mbYesNoCancel) then
      begin
        Params.dwStyle := MB_YESNOCANCEL;
        case ADefaultButton of
          TMsgDlgBtn.mbNo:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbCancel:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON4;
        end;
      end
      else if (LButtons = mbAbortRetryIgnore) or (LButtons = mbAbortIgnore) then
      begin
        Params.dwStyle := MB_ABORTRETRYIGNORE;
        case ADefaultButton of
          TMsgDlgBtn.mbRetry:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbCancel:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON4;
        end;
      end
      else if (LButtons = mbYesNo) then
      begin
        Params.dwStyle := MB_YESNO;
        case ADefaultButton of
          TMsgDlgBtn.mbNo:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
        end;
      end
      else if (LButtons = [TMsgDlgBtn.mbRetry, TMsgDlgBtn.mbCancel]) then
      begin
        Params.dwStyle := MB_RETRYCANCEL;
        case ADefaultButton of
          TMsgDlgBtn.mbCancel:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
        end;
      end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  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 ShaiLeTroll Voir le message
    un Set Of n'a pas d'ordre ce n'est pas un Array Of
    Peu importe l'ordre cela ne fait qu'activer le Bit correspond à chaque valeur de l'énumération
    Justement c'est pour cela que c'est "étrange"

    Pour le reste, je te signale qu'il s'agit de FMX et non VCL. Pour le "classique" [ok,Cancel] cela fonctionne correctement, c'est quand on sort des clous que ça cloche.
    Je n'ai pas encore fouiller dans les sources cela dit.
    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
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Oui, j'ai vu que c'est FMX, tu as chopé ma réponse avant que je la modifie

    Ballot que FMX se limite à MessageBoxIndirect qui est tellement limité par rapport à la VCL qui ne gère que 8 Styles (combinaisons prédéfinies)
    Et va savoir ce que supporte la class NSALert sur OSX

    Bon courage, je ne fais pas de FMX, je ne fais que lire le code, rien de plus.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Alors je dirais "feature" même si je pense plutôt "conception default" : toutes les combinaisons de boutons ne sont pas possibles.

    Les boutons seuls passent tous.

    Les combinaisons sont limitées à une série déclarée dans FMX.Dialogs :
    mbYesNo = [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo];
    mbYesNoCancel = [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo, TMsgDlgBtn.mbCancel];
    mbYesAllNoAllCancel = [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbYesToAll, TMsgDlgBtn.mbNo,
    TMsgDlgBtn.mbNoToAll, TMsgDlgBtn.mbCancel];
    mbOKCancel = [TMsgDlgBtn.mbOK, TMsgDlgBtn.mbCancel];
    mbAbortRetryIgnore = [TMsgDlgBtn.mbAbort, TMsgDlgBtn.mbRetry, TMsgDlgBtn.mbIgnore];
    mbAbortIgnore = [TMsgDlgBtn.mbAbort, TMsgDlgBtn.mbIgnore];

    Et comme ça m'a agacé aussi, j'ai fait une demande...
    https://quality.embarcadero.com/browse/RSP-31647

    Mais en attendant, c'est limité, donc si tu veux plusieurs boutons, il faut prendre l'une de ces listes ou leur raccourci, dans ce cas mbAbortIgnore

  6. #6
    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,
    Citation Envoyé par pprem Voir le message
    Alors je dirais "feature" même si je pense plutôt "conception default"
    oui, "conception default" serait le terme le plus juste.

    mbAbortIgnore = [TMsgDlgBtn.mbAbort, TMsgDlgBtn.mbIgnore];
    Seulement voilà, pour celui là, la spécification du bouton par défaut ne semble pas fonctionner (ma première image)
    , j'avais tenté de le mettre en [TMsgDlgBtn.mbIgnore,TMsgDlgBtn.mbAbort] pour avoir le bouton Ignorer en premier mais, ça aussi ça ne fonctionne pas
    comme si dans les sources (que je n'ai toujours pas contrôlé) ce sont les valeurs et non l'ordre dans le set qui est pris en compte.
    Rassure moi il est bien possible dans un set de le lire dans l'ordre de remplissage du set ?
    Et comme ça m'a agacé aussi, j'ai fait une demande...
    https://quality.embarcadero.com/browse/RSP-31647
    Comme quoi

    Mais en attendant, c'est limité, donc si tu veux plusieurs boutons, il faut prendre l'une de ces listes ou leur raccourci, dans ce cas mbAbortIgnore
    J'ai toujours ma fiche dialogue (jusqu'à 3 boutons) qui se construit comme je l'entend et qui en plus est sensible au style en cours, contrairement à ce MessageDialog d'ailleurs
    cependant je voulais éviter l'ajout de l'unité juste pour une utilisation "annecdotique"
    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

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    , j'avais tenté de le mettre en [TMsgDlgBtn.mbIgnore,TMsgDlgBtn.mbAbort] pour avoir le bouton Ignorer en premier mais, ça aussi ça ne fonctionne pas
    comme si dans les sources (que je n'ai toujours pas contrôlé) ce sont les valeurs et non l'ordre dans le set qui est pris en compte.
    Sinon j'ai fourni dans ma réponse précédente l'extrait de source concerné et il y surement un problème avec mbCancel au lieu de mbIgnore
    mbAbort dans MB_ABORTRETRYIGNORE est le premier bouton car c'est la spec du MessageBox sauf si l'on rajoute un MB_DEFBUTTON*
    Curieux que mbAbortIgnore soit géré par MB_ABORTRETRYIGNORE, c'est carrément un SetWindowsHookEx qui vient modifier le Dialog à son activation pour retirer le bouton Retry, la vache c'est rugueux !
    C'est des malades !
    Citation Envoyé par ShaiLeTroll Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      else if (LButtons = mbAbortRetryIgnore) or (LButtons = mbAbortIgnore) then
      begin
        Params.dwStyle := MB_ABORTRETRYIGNORE;
        case ADefaultButton of
          TMsgDlgBtn.mbRetry:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON2;
          TMsgDlgBtn.mbCancel: // ICI ça devrait être Ignore, qui est le bouton 3, il est déplacé par le hook à la place du Retry en cas de mbAbortIgnore
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON3;
          TMsgDlgBtn.mbHelp:
            Params.dwStyle := Params.dwStyle or MB_DEFBUTTON4;
        end;
      end
    Citation Envoyé par SergioMaster Voir le message
    Rassure moi il est bien possible dans un set de le lire dans l'ordre de remplissage du set ?
    Absolument pas, c'est un champ bit, faut le voir comme un binaire avec un masque
    Aucun ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
        mbAll, mbNoToAll, mbYesToAll, mbHelp, mbClose);
      TMsgDlgButtons = set of TMsgDlgBtn;
     
      mbAbortIgnore = [mbAbort, mbIgnore];
    mbAbort = 4
    mbIgnore = 6
    mbClose = 11
    mbAbortIgnore = champ de 12 Bits (c'est aligné sur 16, 32 ou 64) avec Bit 4 & 6 à 1 donc 0000 0000 0101 0000

    EDIT :
    Petite démo en code

    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
    procedure TForm1.Button1Click(Sender: TObject);
     
      function ConversionIntToBase(Value: Int64; Base: string): string;
      var
        BaseLen: Integer;
        pResult: PChar;
      begin
        BaseLen := Length(Base);
        if BaseLen >= 0 then
        begin
          if Value >= BaseLen then
          begin
            SetLength(Result, Math.Floor(LogN(BaseLen, Value)) + 1); // LogN est-il plus rapide que des réallocations de chaine dans une boucle ?
            pResult := @Result[Length(Result)];
     
            while Value > 0 do
            begin
              pResult^ := Base[Value mod BaseLen + 1];
              Value := Value div BaseLen;
              Dec(pResult);
            end;
          end
          else
            Result := Base[Value + 1];
        end
        else
          Result := '';
      end;
     
    type
      TMsgDlgButtonsBit = record
        case Boolean of
          False: (Enum: TMsgDlgButtons; );
          True: (Bits: Word; );
      end;
    var
     C: TMsgDlgButtonsBit;
    begin
      C.Enum := mbAbortIgnore;
      ShowMessage(ConversionIntToBase(C.Bits, '01'));
    end;
    ConversionIntToBase est un vieux code C++ ... est-ce que quelqu'un sait si il existe maintenant des fonctions de conversion à l'instar de BinToHex pour l'Hexadécimal mais pour le binaire ou l'octal ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Curieux que mbAbortIgnore soit géré par MB_ABORTRETRYIGNORE, c'est carrément un SetWindowsHookEx qui vient modifier le Dialog à son activation pour retirer le bouton Retry, la vache c'est rugueux !
    C'est des malades !
    Je ne commenterai pas, mais ce n'est probablement pas pour rien que Marco a assez rapidement validé cette demande, reste à voir comment et quand elle sera traitée.

    En attendant il n'y a qu'une solution personnelle qui résoudrait le problème.

    Serge, on ne peut pas définir l'ordre dans un ensemble, il faudrait que ce soit un tableau de boutons.

Discussions similaires

  1. Personnaliser les boutons du MessageDialog
    Par eric_de_bretagne dans le forum Débuter
    Réponses: 8
    Dernier message: 23/04/2019, 18h27
  2. Personnaliser les boutons du MessageDialog
    Par popo dans le forum Débuter
    Réponses: 4
    Dernier message: 23/09/2009, 18h10
  3. [Débutant][FLASH MX 2004]les boutons ?
    Par Battosaiii dans le forum Flash
    Réponses: 3
    Dernier message: 04/05/2004, 16h43
  4. Gérer les clics sur les boutons
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 08/02/2004, 15h34

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