diff --git a/components/richmemo/ide/rtfeditpropdialog.lfm b/components/richmemo/ide/rtfeditpropdialog.lfm index 37352e42b..36e9c97e1 100644 --- a/components/richmemo/ide/rtfeditpropdialog.lfm +++ b/components/richmemo/ide/rtfeditpropdialog.lfm @@ -6,27 +6,26 @@ object RTFEditDialog: TRTFEditDialog Caption = 'Rich Text Edit Dialog' ClientHeight = 275 ClientWidth = 538 - OnResize = FormResize - LCLVersion = '1.3' + LCLVersion = '1.7' object btnLoad: TButton - Left = 455 + Left = 8 Height = 25 - Top = 8 + Top = 243 Width = 75 - Anchors = [akTop, akRight] + Anchors = [akLeft, akBottom] Caption = 'Load' OnClick = btnLoadClick - TabOrder = 0 + TabOrder = 1 end object btnClear: TButton - Left = 376 + Left = 168 Height = 25 - Top = 8 + Top = 243 Width = 75 - Anchors = [akTop, akRight] + Anchors = [akLeft, akBottom] Caption = 'Clear' OnClick = btnClearClick - TabOrder = 1 + TabOrder = 3 end object RichMemo1: TRichMemo Left = 8 @@ -38,28 +37,30 @@ object RTFEditDialog: TRTFEditDialog Lines.Strings = ( 'RichMemo1' ) + OnChange = RichMemo1Change ScrollBars = ssAutoBoth - TabOrder = 2 + TabOrder = 0 + ZoomFactor = 1 end object btnOk: TButton - Left = 8 + Left = 376 Height = 25 Top = 243 Width = 75 - Anchors = [akLeft, akBottom] + Anchors = [akRight, akBottom] Caption = 'OK' ModalResult = 1 - TabOrder = 3 + TabOrder = 4 end object btnCancel: TButton - Left = 88 + Left = 455 Height = 25 Top = 243 Width = 75 - Anchors = [akLeft, akBottom] + Anchors = [akRight, akBottom] Caption = 'Cancel' ModalResult = 2 - TabOrder = 4 + TabOrder = 5 end object btnJA: TSpeedButton Left = 288 @@ -246,6 +247,17 @@ object RTFEditDialog: TRTFEditDialog Caption = 'Color' OnClick = btnColorClick end + object btnSave: TButton + AnchorSideRight.Side = asrBottom + Left = 88 + Height = 25 + Top = 243 + Width = 75 + Anchors = [akLeft, akBottom] + Caption = 'Save' + OnClick = btnSaveClick + TabOrder = 2 + end object RtfOpenDialog: TOpenDialog Filter = 'Rich-text file (*.rtf)|*.rtf|Any file (*.*)|*.*' left = 32 @@ -284,4 +296,10 @@ object RTFEditDialog: TRTFEditDialog left = 32 top = 64 end + object RtfSaveDialog: TSaveDialog + Filter = 'Rich-text file (*.rtf)|*.rtf' + Options = [ofOverwritePrompt, ofEnableSizing, ofViewDetail] + left = 120 + top = 168 + end end diff --git a/components/richmemo/ide/rtfeditpropdialog.pas b/components/richmemo/ide/rtfeditpropdialog.pas index 2ddd1a148..fe9d65a9a 100644 --- a/components/richmemo/ide/rtfeditpropdialog.pas +++ b/components/richmemo/ide/rtfeditpropdialog.pas @@ -5,8 +5,7 @@ unit RtfEditPropDialog; interface uses - Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, - Buttons, RichMemo, RichMemoUtils; + SysUtils, Forms, Graphics, Dialogs, StdCtrls, Buttons, RichMemo, RichMemoUtils; type @@ -21,6 +20,7 @@ type btnClear: TButton; btnOk: TButton; btnCancel: TButton; + btnSave: TButton; ColorDialog1: TColorDialog; FontDialog1: TFontDialog; RtfOpenDialog: TOpenDialog; @@ -30,6 +30,7 @@ type btnUnderline: TSpeedButton; btnFont: TSpeedButton; btnColor: TSpeedButton; + RtfSaveDialog: TSaveDialog; procedure btnCAClick(Sender: TObject); procedure btnClearClick(Sender: TObject); procedure btnItalicClick(Sender: TObject); @@ -37,23 +38,19 @@ type procedure btnLAClick(Sender: TObject); procedure btnLoadClick(Sender: TObject); procedure btnRAClick(Sender: TObject); - procedure FormResize(Sender: TObject); + procedure btnSaveClick(Sender: TObject); procedure btnBoldClick(Sender: TObject); procedure btnUnderlineClick(Sender: TObject); procedure btnFontClick(Sender: TObject); procedure btnColorClick(Sender: TObject); + procedure RichMemo1Change(Sender: TObject); private - { private declarations } procedure FontStyleModify(fs: TFontStyle); - public - { public declarations } - end; var RTFEditDialog: TRTFEditDialog = nil; - implementation {$R *.lfm} @@ -75,6 +72,7 @@ end; procedure TRTFEditDialog.btnClearClick(Sender: TObject); begin RichMemo1.Clear; + RichMemo1Change(Sender); end; procedure TRTFEditDialog.btnItalicClick(Sender: TObject); @@ -100,20 +98,12 @@ begin RichMemo1.SelLength, paRight); end; -procedure TRTFEditDialog.FormResize(Sender: TObject); -const - SpaceOffset = 4; -var - w2 : integer; +procedure TRTFEditDialog.btnSaveClick(Sender: TObject); begin - w2:=RichMemo1.ClientWidth div 2; - {$ifdef darwin} - btnCancel.Left:=w2 - SpaceOffset - btnCancel.Width; - btnOk.Left:= w2 + SpaceOffset; - {$else} - btnOk.Left:=w2 - SpaceOffset - btnOk.Width; - btnCancel.Left:= w2 + SpaceOffset; - {$endif} + if RtfSaveDialog.FileName = '' then + RtfSaveDialog.FileName := 'New document.rtf'; + if RtfSaveDialog.Execute and (RtfSaveDialog.FileName <> '') then + SaveRTFFile( RichMemo1, RtfSaveDialog.FileName); end; procedure TRTFEditDialog.btnBoldClick(Sender: TObject); @@ -156,6 +146,11 @@ begin end; end; +procedure TRTFEditDialog.RichMemo1Change(Sender: TObject); +begin + btnSave.Enabled := RichMemo1.Lines.Count > 0; +end; + procedure TRTFEditDialog.FontStyleModify(fs: TFontStyle); var f : TFontParams; diff --git a/components/richmemo/richmemoutils.pas b/components/richmemo/richmemoutils.pas index 28e16a580..161123fac 100644 --- a/components/richmemo/richmemoutils.pas +++ b/components/richmemo/richmemoutils.pas @@ -50,6 +50,8 @@ function InsertImageFromFileNoResize (const ARichMemo: TCustomRichMemo; APos: In procedure LoadRTFFile(const ARichMemo: TCustomRichMemo; const FileNameUTF8: string); +procedure SaveRTFFile(const ARichMemo: TCustomRichMemo; const FileNameUTF8: string); + procedure InsertStyledText(const ARichMemo: TCustomRichMemo; const TextUTF8: String; AStyle: TFontStyles; InsPos : Integer = -1 ); procedure InsertColorStyledText(const ARichMemo: TCustomRichMemo; const TextUTF8: String; AColor: TColor; AStyle: TFontStyles; @@ -138,6 +140,19 @@ begin end; end; +procedure SaveRTFFile(const ARichMemo: TCustomRichMemo; const FileNameUTF8: string); +var + fs : TFileStream; +begin + if not Assigned(ARichMemo) then Exit; + fs:= TFileStream.Create( UTF8Decode(FileNameUTF8), fmCreate); + try + ARichMemo.SaveRichText(fs); + finally + fs.Free; + end; +end; + initialization if not Assigned(InsertImageFromFile) then