Messagedlg dans n' importe quel langue

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 624 fois - Téléchargée 36 fois

Contenu du snippet

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 / Exemple :


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;

A voir également

Ajouter un commentaire Commentaires
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

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.
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
22
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.
Messages postés
136
Date d'inscription
lundi 2 septembre 2002
Statut
Membre
Dernière intervention
15 février 2006

bravo, très utile! 10/10 !
Messages postés
455
Date d'inscription
mardi 24 juillet 2001
Statut
Modérateur
Dernière intervention
10 mars 2009

L'API messageBoxA est dans user32.dll.

avec reshacker tu ouvre la dll
et tu trouveras ton bonheur dans stringtable n°51
et autre
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
mbYes est une constante contenant "&Oui" ?
MessageBoxA est forcement une API windows puisqu'on l'apelle comme ça :
Windows.MessageBoxA(...);
Afficher les 23 commentaires

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.