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 VCL Delphi Discussion :

Changement de langue dynamique (D6 et outils de traduction)


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Changement de langue dynamique (D6 et outils de traduction)
    Comment changer de lanque dynamiquement dans une application ?
    Avec une option de menu par exemple, lorsque plusieurs langues ont été définies à l'aide des outils de traduction de Delphi 6.
    Merci de votre aide
    a+

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 040
    Points
    7 040

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Merci mais cela ne repond pas à la question...
    Merci de ta réponse mais la question était comment faire cela avec les outils de traduction fournis avec Delphi 6 Entreprise ?
    Désolé

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Si tu utilise DLL Wizard de Delphi 6 voici une unité que tu peux appelée :

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    unit ReInit;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms;
     
    procedure ReinitializeForms;
    function LoadNewResourceModule(Locale: LCID): Longint;
     
    implementation
     
    type
      TAsInheritedReader = class(TReader)
      public
        procedure ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer); override;
      end;
     
    procedure TAsInheritedReader.ReadPrefix(var Flags: TFilerFlags; var AChildPos: Integer);
    begin
      inherited ReadPrefix(Flags, AChildPos);
      Include(Flags, ffInherited);
    end;
     
    function SetResourceHInstance(NewInstance: Longint): Longint;
    var
      CurModule: PLibModule;
    begin
      CurModule := LibModuleList;
      Result := 0;
      while CurModule <> nil do
      begin
        if CurModule.Instance = HInstance then
        begin
          if CurModule.ResInstance <> CurModule.Instance then
            FreeLibrary(CurModule.ResInstance);
          CurModule.ResInstance := NewInstance;
          Result := NewInstance;
          Exit;
        end;
        CurModule := CurModule.Next;
      end;
    end;
     
    function LoadNewResourceModule(Locale: LCID): Longint;
    var
      FileName: array [0..260] of char;
      P: PChar;
      LocaleName: array[0..4] of Char;
      NewInst: Longint;
    begin
      GetModuleFileName(HInstance, FileName, SizeOf(FileName));
      GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
      P := PChar(@FileName) + lstrlen(FileName);
      while (P^ <> '.') and (P <> @FileName) do Dec(P);
      NewInst := 0;
      Result := 0;
      if P <> @FileName then
      begin
        Inc(P);
        if LocaleName[0] <> #0 then
        begin
          // Then look for a potential language/country translation
          lstrcpy(P, LocaleName);
          NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
          if NewInst = 0 then
          begin
            // Finally look for a language only translation
            LocaleName[2] := #0;
            lstrcpy(P, LocaleName);
            NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
          end;
        end;
      end;
      if NewInst <> 0 then
        Result := SetResourceHInstance(NewInst)
    end;
     
    function InternalReloadComponentRes(const ResName: string; HInst: THandle; var Instance: TComponent): Boolean;
    var
      HRsrc: THandle;
      ResStream: TResourceStream;
      AsInheritedReader: TAsInheritedReader;
    begin                   { avoid possible EResNotFound exception }
      if HInst = 0 then HInst := HInstance;
      HRsrc := FindResource(HInst, PChar(ResName), RT_RCDATA);
      Result := HRsrc <> 0;
      if not Result then Exit;
      ResStream := TResourceStream.Create(HInst, ResName, RT_RCDATA);
      try
        AsInheritedReader := TAsInheritedReader.Create(ResStream, 4096);
        try
          Instance := AsInheritedReader.ReadRootComponent(Instance);
        finally
          AsInheritedReader.Free;
        end;
      finally
        ResStream.Free;
      end;
      Result := True;
    end;
     
    function ReloadInheritedComponent(Instance: TComponent; RootAncestor: TClass): Boolean;
     
      function InitComponent(ClassType: TClass): Boolean;
      begin
        Result := False;
        if (ClassType = TComponent) or (ClassType = RootAncestor) then Exit;
        Result := InitComponent(ClassType.ClassParent);
        Result := InternalReloadComponentRes(ClassType.ClassName, FindResourceHInstance(
          FindClassHInstance(ClassType)), Instance) or Result;
      end;
     
    begin
      Result := InitComponent(Instance.ClassType);
    end;
     
    procedure ReinitializeForms;
    var
      Count: Integer;
      I: Integer;
      Form: TForm;
    begin
      Count := Screen.FormCount;
      for I := 0 to Count - 1 do
      begin
        Form := Screen.Forms[I];
        ReloadInheritedComponent(Form, TForm);
      end;
    end;
     
    end.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2002
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 3
    Points : 1
    Points
    1
    Par défaut un seul mot : MERCI
    Merci pour tout meme si j'arrive pas encore à faire fonctionner l'exemple du RichEdit, c'est exactement le principe que je cherchais.
    A creuser.
    Merci encore.

Discussions similaires

  1. [Grocery CRUD] Changement de langue de façon dynamique
    Par PROJECT-AURORA dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/07/2014, 11h11
  2. Réponses: 3
    Dernier message: 04/08/2013, 20h20
  3. changement de langue
    Par Malk-Om dans le forum Windows XP
    Réponses: 4
    Dernier message: 05/10/2005, 09h24
  4. [JSP] Changement de langue
    Par sg-40 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 07/06/2005, 12h15
  5. Réponses: 2
    Dernier message: 03/03/2004, 10h44

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