unit synex_syncharmngr; {$mode delphi} {$codepage UTF8} interface uses Classes, SysUtils, synex_charset, SynEdit; type TSynEditCharsetManager = class (TComponent) private FCharset: TTextCharset; FSynEdit: TSynEdit; public constructor Create (AOwner: TComponent); destructor Destroy; procedure LoadFromStream (Stream: TStream); procedure LoadFromFile (const FileName: String); procedure SaveToStream(Stream: TStream); procedure SaveToFile(const FileName: String); published property Charset: TTextCharset read FCharset; property SynEdit: TSynEdit read FSynEdit write FSynEdit; end; implementation {TCharsetStrings} constructor TSynEditCharsetManager.Create (AOwner: TComponent); begin inherited Create(AOwner); FCharset:= tcUTF8; FSynEdit:= Nil; end; destructor TSynEditCharsetManager.Destroy; begin FSynEdit:= Nil; inherited Destroy; end; procedure TSynEditCharsetManager.LoadFromStream (Stream: TStream); var SL: TStringList; begin SL:= TStringList.Create; SL.LoadFromStream(Stream); FCharset:= GetTextCharset(SL.Text); SL.Text:= ConvertToUtf8(SL.Text, FCharset); FSynEdit.Lines.Assign(SL); FreeAndNil(SL); end; procedure TSynEditCharsetManager.LoadFromFile (const FileName: String); var FS: TFileStream; begin FS:= TFileStream.Create(FileName, fmOpenRead + fmShareDenyNone); LoadFromStream(FS); FreeAndNil(FS); end; procedure TSynEditCharsetManager.SaveToStream(Stream: TStream); var SL: TStringList; begin SL:= TStringList.Create; SL.Assign(FSynEdit.Lines); SL.Text:= ConvertFromUtf8(SL.Text, FCharset); SL.SaveToStream(Stream); FreeAndNil(SL); end; procedure TSynEditCharsetManager.SaveToFile(const FileName: String); var FS: TFileStream; begin FS:= TFileStream.Create(FileName, fmOpenWrite + fmShareDenyWrite); SaveToStream(FS); FreeAndNil(FS); end; end.