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+
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+
Merci de ta réponse mais la question était comment faire cela avec les outils de traduction fournis avec Delphi 6 Entreprise ?
Désolé
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.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager