RealICQMultiLanguage.pas 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. unit RealICQMultiLanguage;
  2. interface
  3. uses
  4. Windows,
  5. Messages,
  6. SysUtils,
  7. Variants,
  8. Classes,
  9. Graphics,
  10. Controls,
  11. Forms,
  12. ComCtrls,
  13. ExtCtrls,
  14. Buttons,
  15. StdCtrls,
  16. ToolWin,
  17. OleCtrls,
  18. Menus,
  19. ActnList,
  20. IniFiles,
  21. StrUtils;
  22. type
  23. TRealICQMultiLanguage = class
  24. private
  25. FForm: TForm;
  26. FLanguageIniFile: String;
  27. FFont: TFont;
  28. procedure SetLanguageIniFile(ALanguageIniFile: String);
  29. protected
  30. public
  31. constructor Create(AForm: TForm);
  32. destructor Destroy; override;
  33. published
  34. property LanguageIniFile: String read FLanguageIniFile write SetLanguageIniFile;
  35. end;
  36. function FilterStr(AValue: String): String;
  37. implementation
  38. function FilterStr(AValue: String): String;
  39. begin
  40. Result := AnsiReplaceStr(AnsiReplaceStr(AValue, '\n', #$D#$A), '\s', ' ');
  41. end;
  42. //------------------------------------------------------------------------------
  43. constructor TRealICQMultiLanguage.Create(AForm: TForm);
  44. begin
  45. FForm := AForm;
  46. FFont := TFont.Create;
  47. end;
  48. //------------------------------------------------------------------------------
  49. destructor TRealICQMultiLanguage.Destroy;
  50. begin
  51. try
  52. FreeAndNil(FFont);
  53. finally
  54. inherited Destroy;
  55. end;
  56. end;
  57. //------------------------------------------------------------------------------
  58. procedure TRealICQMultiLanguage.SetLanguageIniFile(ALanguageIniFile: String);
  59. var
  60. IniFile: TIniFile;
  61. AComponent: TComponent;
  62. iLoop: Integer;
  63. procedure ChangeFont(AFont: TFont);
  64. begin
  65. AFont.Charset := FFont.Charset;
  66. AFont.Name := FFont.Name;
  67. AFont.Size := FFont.Size;
  68. end;
  69. begin
  70. FLanguageIniFile := ALanguageIniFile;
  71. IniFile := TIniFile.Create(FLanguageIniFile);
  72. try
  73. with IniFile do
  74. begin
  75. FFont.Charset := ReadInteger('Font', 'Charset', 1);
  76. FFont.Name := ReadString('Font', 'Name', 'ËÎÌå');
  77. FFont.Size := ReadInteger('Font', 'Size', 9);
  78. ChangeFont(FForm.Font);
  79. for iLoop := 0 to FForm.ComponentCount - 1 do
  80. begin
  81. AComponent := FForm.Components[iLoop];
  82. if AComponent is TLabel then
  83. begin
  84. (AComponent as TLabel).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TLabel).Caption));
  85. (AComponent as TLabel).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TLabel).Hint));
  86. (AComponent as TLabel).ShowHint := Length(Trim((AComponent as TLabel).Hint)) > 0;
  87. ChangeFont((AComponent as TLabel).Font);
  88. end;
  89. if AComponent is TEdit then
  90. begin
  91. (AComponent as TEdit).Text := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Text', (AComponent as TEdit).Text));
  92. (AComponent as TEdit).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TEdit).Hint));
  93. (AComponent as TEdit).ShowHint := Length(Trim((AComponent as TEdit).Hint)) > 0;
  94. ChangeFont((AComponent as TEdit).Font);
  95. end;
  96. if AComponent is TCheckBox then
  97. begin
  98. (AComponent as TCheckBox).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TCheckBox).Caption));
  99. (AComponent as TCheckBox).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TCheckBox).Hint));
  100. (AComponent as TCheckBox).ShowHint := Length(Trim((AComponent as TCheckBox).Hint)) > 0;
  101. ChangeFont((AComponent as TCheckBox).Font);
  102. end;
  103. if AComponent is TBitBtn then
  104. begin
  105. (AComponent as TBitBtn).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TBitBtn).Caption));
  106. (AComponent as TBitBtn).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TBitBtn).Hint));
  107. (AComponent as TBitBtn).ShowHint := Length(Trim((AComponent as TBitBtn).Hint)) > 0;
  108. ChangeFont((AComponent as TBitBtn).Font);
  109. end;
  110. if AComponent is TButton then
  111. begin
  112. (AComponent as TButton).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TButton).Caption));
  113. (AComponent as TButton).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TButton).Hint));
  114. (AComponent as TButton).ShowHint := Length(Trim((AComponent as TButton).Hint)) > 0;
  115. ChangeFont((AComponent as TButton).Font);
  116. end;
  117. if AComponent is TRadioButton then
  118. begin
  119. (AComponent as TRadioButton).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TRadioButton).Caption));
  120. (AComponent as TRadioButton).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TRadioButton).Hint));
  121. (AComponent as TRadioButton).ShowHint := Length(Trim((AComponent as TRadioButton).Hint)) > 0;
  122. ChangeFont((AComponent as TRadioButton).Font);
  123. end;
  124. if AComponent is TGroupBox then
  125. begin
  126. (AComponent as TGroupBox).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TGroupBox).Caption));
  127. (AComponent as TGroupBox).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TGroupBox).Hint));
  128. (AComponent as TGroupBox).ShowHint := Length(Trim((AComponent as TGroupBox).Hint)) > 0;
  129. ChangeFont((AComponent as TGroupBox).Font);
  130. end;
  131. if AComponent is TPanel then
  132. begin
  133. (AComponent as TPanel).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TPanel).Caption));
  134. (AComponent as TPanel).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TPanel).Hint));
  135. (AComponent as TPanel).ShowHint := Length(Trim((AComponent as TPanel).Hint)) > 0;
  136. ChangeFont((AComponent as TPanel).Font);
  137. end;
  138. if AComponent is TAction then
  139. begin
  140. (AComponent as TAction).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TAction).Caption));
  141. (AComponent as TAction).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TAction).Hint));
  142. end;
  143. if AComponent is TComboBoxEx then
  144. begin
  145. (AComponent as TComboBoxEx).Text := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Text', (AComponent as TComboBoxEx).Text));
  146. (AComponent as TComboBoxEx).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TComboBoxEx).Hint));
  147. (AComponent as TComboBoxEx).ShowHint := Length(Trim((AComponent as TComboBoxEx).Hint)) > 0;
  148. ChangeFont((AComponent as TComboBoxEx).Font);
  149. end;
  150. if AComponent is TMenuItem then
  151. begin
  152. (AComponent as TMenuItem).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TMenuItem).Caption));
  153. (AComponent as TMenuItem).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TMenuItem).Hint));
  154. end;
  155. if AComponent is TImage then
  156. begin
  157. (AComponent as TImage).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TImage).Hint));
  158. (AComponent as TImage).ShowHint := Length(Trim((AComponent as TImage).Hint)) > 0;
  159. end;
  160. end;
  161. end;
  162. finally
  163. FreeAndNil(IniFile);
  164. end;
  165. end;
  166. end.