unit RealICQMultiLanguage; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, ComCtrls, ExtCtrls, Buttons, StdCtrls, ToolWin, OleCtrls, Menus, ActnList, IniFiles, StrUtils; type TRealICQMultiLanguage = class private FForm: TForm; FLanguageIniFile: String; FFont: TFont; procedure SetLanguageIniFile(ALanguageIniFile: String); protected public constructor Create(AForm: TForm); destructor Destroy; override; published property LanguageIniFile: String read FLanguageIniFile write SetLanguageIniFile; end; function FilterStr(AValue: String): String; implementation function FilterStr(AValue: String): String; begin Result := AnsiReplaceStr(AnsiReplaceStr(AValue, '\n', #$D#$A), '\s', ' '); end; //------------------------------------------------------------------------------ constructor TRealICQMultiLanguage.Create(AForm: TForm); begin FForm := AForm; FFont := TFont.Create; end; //------------------------------------------------------------------------------ destructor TRealICQMultiLanguage.Destroy; begin try FreeAndNil(FFont); finally inherited Destroy; end; end; //------------------------------------------------------------------------------ procedure TRealICQMultiLanguage.SetLanguageIniFile(ALanguageIniFile: String); var IniFile: TIniFile; AComponent: TComponent; iLoop: Integer; procedure ChangeFont(AFont: TFont); begin AFont.Charset := FFont.Charset; AFont.Name := FFont.Name; AFont.Size := FFont.Size; end; begin FLanguageIniFile := ALanguageIniFile; IniFile := TIniFile.Create(FLanguageIniFile); try with IniFile do begin FFont.Charset := ReadInteger('Font', 'Charset', 1); FFont.Name := ReadString('Font', 'Name', 'ËÎÌå'); FFont.Size := ReadInteger('Font', 'Size', 9); ChangeFont(FForm.Font); for iLoop := 0 to FForm.ComponentCount - 1 do begin AComponent := FForm.Components[iLoop]; if AComponent is TLabel then begin (AComponent as TLabel).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TLabel).Caption)); (AComponent as TLabel).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TLabel).Hint)); (AComponent as TLabel).ShowHint := Length(Trim((AComponent as TLabel).Hint)) > 0; ChangeFont((AComponent as TLabel).Font); end; if AComponent is TEdit then begin (AComponent as TEdit).Text := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Text', (AComponent as TEdit).Text)); (AComponent as TEdit).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TEdit).Hint)); (AComponent as TEdit).ShowHint := Length(Trim((AComponent as TEdit).Hint)) > 0; ChangeFont((AComponent as TEdit).Font); end; if AComponent is TCheckBox then begin (AComponent as TCheckBox).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TCheckBox).Caption)); (AComponent as TCheckBox).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TCheckBox).Hint)); (AComponent as TCheckBox).ShowHint := Length(Trim((AComponent as TCheckBox).Hint)) > 0; ChangeFont((AComponent as TCheckBox).Font); end; if AComponent is TBitBtn then begin (AComponent as TBitBtn).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TBitBtn).Caption)); (AComponent as TBitBtn).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TBitBtn).Hint)); (AComponent as TBitBtn).ShowHint := Length(Trim((AComponent as TBitBtn).Hint)) > 0; ChangeFont((AComponent as TBitBtn).Font); end; if AComponent is TButton then begin (AComponent as TButton).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TButton).Caption)); (AComponent as TButton).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TButton).Hint)); (AComponent as TButton).ShowHint := Length(Trim((AComponent as TButton).Hint)) > 0; ChangeFont((AComponent as TButton).Font); end; if AComponent is TRadioButton then begin (AComponent as TRadioButton).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TRadioButton).Caption)); (AComponent as TRadioButton).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TRadioButton).Hint)); (AComponent as TRadioButton).ShowHint := Length(Trim((AComponent as TRadioButton).Hint)) > 0; ChangeFont((AComponent as TRadioButton).Font); end; if AComponent is TGroupBox then begin (AComponent as TGroupBox).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TGroupBox).Caption)); (AComponent as TGroupBox).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TGroupBox).Hint)); (AComponent as TGroupBox).ShowHint := Length(Trim((AComponent as TGroupBox).Hint)) > 0; ChangeFont((AComponent as TGroupBox).Font); end; if AComponent is TPanel then begin (AComponent as TPanel).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TPanel).Caption)); (AComponent as TPanel).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TPanel).Hint)); (AComponent as TPanel).ShowHint := Length(Trim((AComponent as TPanel).Hint)) > 0; ChangeFont((AComponent as TPanel).Font); end; if AComponent is TAction then begin (AComponent as TAction).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TAction).Caption)); (AComponent as TAction).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TAction).Hint)); end; if AComponent is TComboBoxEx then begin (AComponent as TComboBoxEx).Text := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Text', (AComponent as TComboBoxEx).Text)); (AComponent as TComboBoxEx).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TComboBoxEx).Hint)); (AComponent as TComboBoxEx).ShowHint := Length(Trim((AComponent as TComboBoxEx).Hint)) > 0; ChangeFont((AComponent as TComboBoxEx).Font); end; if AComponent is TMenuItem then begin (AComponent as TMenuItem).Caption := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Caption', (AComponent as TMenuItem).Caption)); (AComponent as TMenuItem).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TMenuItem).Hint)); end; if AComponent is TImage then begin (AComponent as TImage).Hint := FilterStr(ReadString(String(FForm.ClassName), AComponent.Name + '.Hint', (AComponent as TImage).Hint)); (AComponent as TImage).ShowHint := Length(Trim((AComponent as TImage).Hint)) > 0; end; end; end; finally FreeAndNil(IniFile); end; end; end.