www.pudn.com > RxRichEdit2.0.rar > RTFProperty.pas


{*****************************************} 
{                                         } 
{      RxRichEdit Text Property Eidtor    } 
{      Copyright (C) 2002 Kingron         } 
{                                         } 
{*****************************************} 
 
unit RTFProperty; 
 
interface 
 
uses Windows,Forms, Menus, Dialogs, StdCtrls, RxRichEdit, Controls, Classes, 
  dsgnintf,ExtCtrls,Messages,ModalForm, MyFormDivider, Buttons, ComCtrls; 
 
type 
  TRtfEditDlg = class(TFrmModal) 
    OpenDialog: TOpenDialog; 
    SaveDialog: TSaveDialog; 
    Memo: TRxRichEdit; 
    StringEditorMenu: TPopupMenu; 
    LoadItem: TMenuItem; 
    SaveItem: TMenuItem; 
    MainMenu1: TMainMenu; 
    a1: TMenuItem; 
    procedure FileOpen(Sender: TObject); 
    procedure FileSave(Sender: TObject); 
  private 
    FModified: Boolean; 
  public 
    class function ShowEditor(Editor:TRxCustomRichEdit):integer; 
  end; 
 
type 
  TRTFProperty = class(TClassProperty) 
  public 
    function GetAttributes: TPropertyAttributes; override; 
    procedure Edit; override; 
  end; 
 
implementation 
 
{$R *.DFM} 
 
{ TStrEditDlg } 
 
procedure TRtfEditDlg.FileOpen(Sender: TObject); 
begin 
  inherited; 
  with OpenDialog do 
    if Execute then Memo.Lines.LoadFromFile(FileName); 
end; 
 
procedure TRtfEditDlg.FileSave(Sender: TObject); 
begin 
  inherited; 
  SaveDialog.FileName := OpenDialog.FileName; 
  with SaveDialog do 
    if Execute then Memo.Lines.SaveToFile(FileName); 
end; 
 
{ TRTFProperty } 
 
function TRTFProperty.GetAttributes: TPropertyAttributes; 
begin 
  Result := inherited GetAttributes + [paDialog] - [paSubProperties]; 
end; 
 
procedure TRTFProperty.Edit; 
var 
  Component: TRxRichEdit; 
  Stream:TMemoryStream; 
begin 
  Component := TRxRichEdit(GetComponent(0)); 
 
  with TRtfEditDlg.Create(Application) do 
  try 
    Memo.PlainText :=Component.PlainText; 
    Stream:=TMemoryStream.Create; 
    try 
      Component.Lines.SaveToStream(Stream); 
      Stream.Position :=0; 
      Memo.Lines.LoadFromStream(Stream); 
    finally 
      Stream.Free; 
    end; 
    FModified := False; 
    ActiveControl := Memo; 
    Stream:=TMemoryStream.Create; 
    if ShowModal = mrOK then 
    try 
//      SetOrdValue(LongInt(Memo.Lines)); 
      Memo.Lines.SaveToStream(Stream); 
      Stream.Position :=0; 
      Component.Lines.LoadFromStream(Stream); 
      Modified; 
    finally 
      Stream.Free; 
    end; 
  finally 
    Free; 
  end; 
end; 
 
class function TRtfEditDlg.ShowEditor(Editor: TRxCustomRichEdit): integer; 
var 
  Stream:TMemoryStream; 
begin 
  Stream:=TMemoryStream.Create; 
  with TRtfEditDlg.Create(Application) do 
  try 
    Stream.Position :=0; 
    Editor.Lines.SaveToStream(Stream); 
    Stream.Position :=0; 
    Memo.Lines.LoadFromStream(Stream); 
    Result:=ShowModal; 
    if Result=mrOK then 
    begin 
      Stream.Position:=0; 
      Memo.Lines.SaveToStream(Stream); 
      Stream.Position:=0; 
      Editor.Lines.LoadFromStream(Stream); 
    end;   
  finally 
    Stream.Free; 
    Free; 
  end; 
end; 
 
end.