begin process at 2008 08 30 01:45:47
1 233 984 membres
22 nouveaux aujourd'hui
14 294 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MESSAGEDLG DANS N' IMPORTE QUEL LANGUE


Information sur la source

Catégorie :Trucs & Astuces Niveau : Débutant Date de création : 10/01/2005 Date de mise à jour : 12/01/2005 16:36:37 Vu : 4 158

Note :
9,5 / 10 - par 4 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note


Description

Salut tout le monde, voilà une modeste contribution à ce site pour la nouvelle année.
Si vous avez comme moi delphi en Anglais et que le MessageDlg vous apparait donc en Anglais, voilà comment faire pour montrer les boutons dans la langue que vous désirez.
C' est une fonctin que vous devez appeler, ok c en Portugais mais y a qu' a changer les captions !!!

Source

  • function MensagemDlg(Msg: String; Title: String; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; Cod_Ajuda: Integer) : TModalResult;
  • var i : Integer;
  • begin
  • With CreateMessageDialog(Msg, DlgType, Buttons) Do
  • Try
  • Caption := Title;
  • HelpContext := Cod_Ajuda;
  • for i:= 0 To ComponentCount - 1 Do
  • If Components[i] Is TButton
  • Then
  • Case (Components[i] As TButton).ModalResult Of
  • mrNone : (Components[i] As TButton).Caption := '&Ajuda'; // Help !!!
  • mrAbort : (Components[i] As TButton).Caption := 'Abortar';
  • mrAll : (Components[i] As TButton).Caption := '&Todos';
  • mrCancel : (Components[i] As TButton).Caption := '&Cancelar';
  • mrIgnore : (Components[i] As TButton).Caption := '&Ignorar';
  • mrNo : (Components[i] As TButton).Caption := '&Não';
  • mrNoToAll : (Components[i] As TButton).Caption := 'Não a tudo';
  • mrOk : (Components[i] As TButton).Caption := '&Ok';
  • mrRetry : (Components[i] As TButton).Caption := '&Repetir';
  • mrYes : (Components[i] As TButton).Caption := '&Sim';
  • mrYesToAll : (Components[i] As TButton).Caption := 'Sim a tudo';
  • End;
  • RESULT := ShowModal;
  • Finally
  • Free;
  • End;
  • end;
function MensagemDlg(Msg: String; Title: String; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; Cod_Ajuda: Integer) : TModalResult;
var i   : Integer;
begin
  With CreateMessageDialog(Msg, DlgType, Buttons) Do
     Try
       Caption := Title;
       HelpContext := Cod_Ajuda;

       for i:= 0 To ComponentCount - 1 Do
         If Components[i] Is TButton
         Then 
           Case (Components[i] As TButton).ModalResult Of
             mrNone     : (Components[i] As TButton).Caption := '&Ajuda';         // Help !!!
             mrAbort    : (Components[i] As TButton).Caption := 'Abortar';
             mrAll      : (Components[i] As TButton).Caption := '&Todos';
             mrCancel   : (Components[i] As TButton).Caption := '&Cancelar';
             mrIgnore   : (Components[i] As TButton).Caption := '&Ignorar';
             mrNo       : (Components[i] As TButton).Caption := '&Não';
             mrNoToAll  : (Components[i] As TButton).Caption := 'Não a tudo';
             mrOk       : (Components[i] As TButton).Caption := '&Ok';
             mrRetry    : (Components[i] As TButton).Caption := '&Repetir';
             mrYes      : (Components[i] As TButton).Caption := '&Sim';
             mrYesToAll : (Components[i] As TButton).Caption := 'Sim a tudo';
           End;

       RESULT := ShowModal;
     Finally
       Free;
     End;
end;
12 janvier 2005 16:19:50 :
Voilà, plus de problème à savoir sur quel Delphi vous compilez; Anglais, Français etc ...
12 janvier 2005 16:36:37 :
...
  • signaler à un administrateur
    Commentaire de JulioDelphi le 10/01/2005 15:32:11 administrateur CS

    tres bonne idée !! j'ai testé et ça marche :op
    je la garde ds un coin de mon dossier "mauricio" :D

  • signaler à un administrateur
    Commentaire de MAURICIO le 10/01/2005 17:13:37

    Merci merci, c tout con, mais ça va dépanner un autre Portugais qui habite Lisbonne, il se reconnaitra !!!

  • signaler à un administrateur
    Commentaire de DelphiCool le 11/01/2005 08:11:56 administrateur CS

    Salut

    Moi je préfére utiliser MessageBoxA
    qui met les boutons à la langue du system
    Pas besoin de traduction et c'est moins gourmand "en unitée" que MessageDialog

    Mais chancun ses gouts ;D

  • signaler à un administrateur
    Commentaire de jmp77 le 11/01/2005 09:07:19

    Salut Mauricio,

    Sympa comme code je fais comme julio je le range soigneusement.

    Bonne continuation mauricio.

    Note finale 10/10.

    PS : Pour repondre à delphicool : Dans les entreprises tu as souvent les pc configurés en anglais. Malheureusement beaucoup de mes utilisateurs comprennent pas grand chose à l'anglais. L'avantage de cette fonction est quelle permet d'afficher des messages dans la langue de l'utilisateur meme si son pc est configuré en une autre langue.

  • signaler à un administrateur
    Commentaire de JulioDelphi le 11/01/2005 09:44:08 administrateur CS

    perso j'ai mon systeme en français et mon delphi en us. mes messagedlg sont en us ! ça depend vraiment de la langue du systeme alors ?

  • signaler à un administrateur
    Commentaire de MAURICIO le 11/01/2005 10:53:21

    Salut!
    Jetez un oeil dans l' unité Dialogs ligne 1953 pour Delphi7. Vous verrez que les captions des boutons sont défini avec des valeurs constantes. Donc, si vous avez Delphi 7 en Chinois, les captions des boutons, bem, comment dire ... peux pas lire !!!
    Ça m' a étonné aussi quand, il y a quelques années, je voulais passer les captions dans la langue désirée. Je pensais qu' une dll de windows devait etre en Anglais.
    Donc, pas de dll la dessous. Malheureusemen d' ailleurs parce que, si vous distribuez votre prog. partout dans le monde, les boutons auront toujours le meme caption.

  • signaler à un administrateur
    Commentaire de JulioDelphi le 11/01/2005 12:16:38 administrateur CS

    delphicool > avec Windows.MessageBoxA() comment fais tu pour mettre une icone "Information" "Confirmation" ? je n'ai pas trouvé

    Mauricio : en const dans delphi ! abusé ! lol bon alors ce code est plus qu'utile :) ça sens le compo :p

    Propriétés :
    Title : 'Test';
    Type : 'Information';
    CaptionOK : '&Ok';
    CaptionAnnuler : '&Euh non merci';
    ...
    ~.Execute; et PAF ta box !
    ou ~.MessageDlg(...,...,...,....); idem
    le tout avec un ModalResult :p

  • signaler à un administrateur
    Commentaire de MAURICIO le 11/01/2005 13:14:33

    Ouai, c' est vrai que moi meme g été déçut par la fonction de Delphi.
    Mais est ce parce que Windows n'a pas les captions dans une dll que l' on pourrait récupérer ???

    Désolé mais j' utilise pas Windows.MessageBoxA()
    En plus, g pas le temps, chui sur une grosse alteration sur un programme de planification de production.
    Je dois resté assez concentré car g pas le droit à l' erreur.
    A+

  • signaler à un administrateur
    Commentaire de JulioDelphi le 11/01/2005 13:32:28 administrateur CS

    perso j'optimiserais le code avec ça :

    if Btn.Caption = '&Yes' then
    Btn.Caption := '&Sim'
    else
    if Btn.Caption = '&No' then
    Btn.Caption := '&Não'
    else
    ...

    puisque pour chaque Component[i] il ne peut y avoir qu'un seul Caption ! et puis si je veux faire ch... en inversant le Yes en NO etc et que je fais :
    if Btn.Caption = '&Yes'     then Btn.Caption := '&No';
                    if Btn.Caption = '&No'       then Btn.Caption := 'Cancel';
                    if Btn.Caption = 'Cancel'       then Btn.Caption := '&Truc';

    et bien mon bouton [0] aura le caption '&Truc' :/ au lieu de '&No'
    Et puis c plus rapide :p
    MAJ DEMANDEE !! :D

  • signaler à un administrateur
    Commentaire de DelphiCool le 11/01/2005 19:31:27 administrateur CS

    Tient essaye ce programme

    ftp://www.developpez.ws/club/delphicool/prog/MessageBox_HiA/MessageBox_HiA.zip

  • signaler à un administrateur
    Commentaire de DelphiCool le 11/01/2005 19:32:24 administrateur CS

    PS

    avec MessageBoxA, la langue est celle du system

    avec messageDialog, la langue est celle de ton Delphi

  • signaler à un administrateur
    Commentaire de JulioDelphi le 11/01/2005 19:33:58 administrateur CS

    et avec ShowMessage ?

    (ok je sors :p)

  • signaler à un administrateur
    Commentaire de ManChesTer le 11/01/2005 20:16:36 administrateur CS

    Gégnal et vous faites comment quand il faut gerer 12 langues ou plus ? hein ?....

    La solution de delphicool est cool comme d'hab, mais perso, je fais de la traduction a la volée en fonction du langage choisi par l'utilisateur et ce meme pour les boites de dialogues du systeme.

    C'est assez est simple avec les api's :

    SetDlgItemText(CHgHND,IDOK,PChar('D''ac..'));  
    SetDlgItemText(CHgHND,idCancel,PChar('Heuu, non'));

    La seule difficulté est de réusir à prendre la main pour faire le changement au bon moment (au show) de la boite de dialogue (qui est souvent modale). Heureusement DLGPROC a été inventé ;o))

    Bon Coding....

    ManChesTer.

  • signaler à un administrateur
    Commentaire de MAURICIO le 12/01/2005 13:26:38

    Oui, la soluce de delphi cool est meilleure mais elle ne permet pas de visualiser un icone.
    D' ailleurs, maintenant que j' y pense, il y a une amelioration que je peux faire ... Donc, à bientot.

    PS: qqu' un sait comment recuperer les captions des boutons selon la langue du systeme comme le fait MessageBox???

  • signaler à un administrateur
    Commentaire de MAURICIO le 12/01/2005 16:21:50

    Voilà, plus de problème à savoir sur quel Delphi vous compilez; Anglais, Français etc ...`
    Il ne reste plus qu' à recuperer les captions des boutons selon la langue du systeme comme le fait MessageBox...
    Mais là, je sèche. QQu' un a une idée????

  • signaler à un administrateur
    Commentaire de JulioDelphi le 12/01/2005 17:50:56 administrateur CS

    ha oui bien mieux !
    Sinon, pourquoi veux tu recuperer les captions selon la langue du systeme ?

  • signaler à un administrateur
    Commentaire de MAURICIO le 12/01/2005 18:23:04

    C evident: si on arrive à récupérer les captions des boutons selon la langue de Windows (comme le fait MessageBoxA), et bien, ma  fonction montrera par exemple '&Oui' pour le bouton Yes dans un Windows configuré en Français, '&Sim' dans un Win en Portugais etc ...
    Faudrai jeter un oeil sur le code de MessageBoxA mais g bien peur que se soit une API de windows ...

  • signaler à un administrateur
    Commentaire de MAURICIO le 12/01/2005 18:30:14

    En fait, pour etre plus simple, au lieu d' avoir:
    mrYes      : (Components[i] as TButton).Caption := '&Oui'

    On Aurait :
    mrYes      : (Components[i] as TButton).Caption := GetWindowsBouttonDescription(mbYes);

    G bien sûr supposé la fonction GetWindowsBouttonDescription() qui exsite pas, mais c pour que vous compreniez que c' est une fonction de ce genre que je cherche, sachant qu' elle peut etre sous une autre forme ...

  • signaler à un administrateur
    Commentaire de JulioDelphi le 12/01/2005 18:33:29 administrateur CS

    mbYes est une constante contenant "&Oui" ?
    MessageBoxA est forcement une API windows puisqu'on l'apelle comme ça :
    Windows.MessageBoxA(...);

  • signaler à un administrateur
    Commentaire de DelphiCool le 12/01/2005 18:38:03 administrateur CS

    L'API messageBoxA est dans user32.dll.

    avec reshacker tu ouvre la dll
    et tu trouveras ton bonheur dans stringtable n°51
    et autre

  • signaler à un administrateur
    Commentaire de costello le 13/01/2005 13:24:43

    bravo, très utile! 10/10 !

  • signaler à un administrateur
    Commentaire de grandvizir le 19/01/2005 17:41:59

    Résumons les dialogues avec des images...

    MessageBoxA(0,'Ceci est un ShowMessage','Vide',MB_OK);
    MessageBoxA(0,'Ceci est une alerte','Alerte',MB_OK or MB_ICONEXCLAMATION);
    MessageBoxA(0,'Ceci est une info','Information',MB_OK or MB_ICONINFORMATION);
    MessageBoxA(0,'Ceci est une erreur','Erreur',MB_OK or MB_ICONERROR);

    Si vous connaissez le handle du bouton, alors GetWindowText récupère le Caption.

    mbYes est un nombre... cf. Windows.pas En revanche, sa valeur est attribué à une chaîne de caractères.

    Je ne vois pas beaucoup de ARRAY dans votre prog, histoire d'aider un peu ManchesTer qui veut gérer 12 langues. Je donne donc:

    type
      TButtonCaption = record
        bcOk, bcYes, bcNo [...] : string;
      end;

    const
      mxLanguages = 1; //2 langues en tout bien sûr
      lgFrench = 0;
      lgDeutsch = 1;
      bcCaptions : array[0..mxLanguages] of TButtonCaption = (
        (bcOk: 'Ok'; bcYes: 'Oui'; bcNo: 'Non' [...]),
        (bcOk: 'Ok'; bcYes: 'Ja'; bcNo: 'Nein' [...])
      );

    Ensuite, il suffit:
      MonBouton.Caption:= bcCaptions[lgDeutsch].bcOk;

    Simplissime et pas contraignant.

  • signaler à un administrateur
    Commentaire de ManChesTer le 19/01/2005 19:57:01 administrateur CS

    lol, merci GrandVizir,

    Je sais gérer 12 langues et meme plus....

    J'utilise en fait un composant fait maison est accompagné d'un soft de traduction (Semi automatique (pourqoi retraduire ce qui l'a déja été...)) que mes betas tester's/traducteurs possèdent.

    Se composant va rechercher les "traductions" dans un stream remplis au choix depuis ressource, fichier externe ou zone data de l'application.

    il utilise l'api  SetDlgItemTexT qui est prèvue à cet effet et qui marche nikel (pas besoin de GetWindowText ou autres..).

    Bon Coding...

    ManChesTer.

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS