begin process at 2012 02 11 16:35:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > MESSAGEDLG DANS N' IMPORTE QUEL LANGUE

MESSAGEDLG DANS N' IMPORTE QUEL LANGUE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :6 424

Auteur : MAURICIO

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
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;



 Historique

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 :
...

 Sources du même auteur

Source avec Zip Source avec une capture PROJETS DÉMO DU PACK DE COMPOSANTS CINDY V4.30
Source avec Zip Source avec une capture PACKAGE DE COMPOSANTS CINDY V4.41
Source avec Zip Source avec une capture EVALUATION D' EXPRESSIONS MATHÉMATIQUE (MÉTHODE RPN)
Source avec Zip Source avec une capture DEMO DE LA TCYDBADVGRID (DBGRID AVANCÉE, EXE INCLUS)
ACTUALISER UNE TABLE SANS QUE LA DBGRID MODIFIE SON VISUEL E...

 Sources de la même categorie

Source avec Zip DICTIONNAIRE WORD DANS UN RICHEDIT par H60
Source avec Zip TRIER DU GREC DANS UNE APPLI EN CODE LOCAL FRANÇAIS. par fricot
Source avec Zip Source avec une capture INTÉGRATION DE PAGE HTML DANS LES RESSOURCES D'UNE DLL par christophe75018
FONCTION DE CONVERSION DE MILLISECONDES EN HH:MM:SS:MMM par vyseR
Source avec Zip Source avec une capture UTILISER UNE DLL INCLUSE EN RESSOURCES par Bacterius

Commentaires et avis

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

Commentaire de MAURICIO le 10/01/2005 17:13:37 administrateur CS

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

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

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.

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 ?

Commentaire de MAURICIO le 11/01/2005 10:53:21 administrateur CS

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.

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

Commentaire de MAURICIO le 11/01/2005 13:14:33 administrateur CS

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+

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

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

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

Commentaire de JulioDelphi le 11/01/2005 19:33:58 administrateur CS

et avec ShowMessage ?

(ok je sors :p)

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.

Commentaire de MAURICIO le 12/01/2005 13:26:38 administrateur CS

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???

Commentaire de MAURICIO le 12/01/2005 16:21:50 administrateur CS

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????

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 ?

Commentaire de MAURICIO le 12/01/2005 18:23:04 administrateur CS

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 ...

Commentaire de MAURICIO le 12/01/2005 18:30:14 administrateur CS

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 ...

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(...);

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

Commentaire de costello le 13/01/2005 13:24:43

bravo, très utile! 10/10 !

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.

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




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales