unit MainFrm; interface // Use this define if you want to enable thirdparty Gif support // for Delphi 3-2006, using Anders Melander's TGifImage // http://www.torry.net/vcl/graphics/gif/gifimage.exe (original) // http://www.trichview.com/resources/thirdparty/gifimage.zip (update) // For Delphi 2007 or newer, the standard Delphi's TGifImage is used automatically {.$DEFINE USEGIFIMAGE} {$I RV_Defs.inc} uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ShellApi, Dialogs, StdCtrls, ComCtrls, RVStyle, RVScroll, RichView, RVFuncs, ExtCtrls, RVEdit, CRVData, CRVFData, RVOfficeCnv, RVTypes {$IFDEF RICHVIEWDEF2007} , GifImg {$ELSE} {$IFDEF USEGIFIMAGE} , GifImage {$ENDIF} {$ENDIF} ; type TfrmMain = class(TForm) od: TOpenDialog; rvs: TRVStyle; rve: TRichViewEdit; Panel1: TPanel; btnOpen: TButton; rvc: TRVOfficeConverter; btnSave: TButton; sd: TSaveDialog; pb: TProgressBar; procedure btnOpenClick(Sender: TObject); procedure rvcConverting(Sender: TObject; Percent: Integer); procedure btnSaveClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure rveReadHyperlink(Sender: TCustomRichView; const Target, Extras: String; DocFormat: TRVLoadFormat; var StyleNo, ItemTag: Integer; var ItemName: TRVRawByteString); procedure rveJump(Sender: TObject; id: Integer); procedure rveWriteHyperlink(Sender: TCustomRichView; id: Integer; RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; var Target, Extras: string); private { Private declarations } public { Public declarations } end; var frmMain: TfrmMain; implementation {$R *.dfm} {====================== Import and export =====================================} procedure TfrmMain.FormCreate(Sender: TObject); begin od.Filter := 'RTF (Built-In RichView Import)|*.rtf|'+rvc.GetImportFilter; sd.Filter := 'RTF (Built-In RichView Export)|*.rtf|'+rvc.GetExportFilter; rve.Clear; rve.AddNL('This demo shows how to use Microsoft® Office text converters.',0,0); rve.AddNL('First items in filters (file masks) of the file-selection dialogs are RTF import/export '+ 'by the component itself. Others use converters.',0,0); rve.AddNL('For HTML import testing, look at test/test.htm.',0,0); rve.AddNL('After loading, Ctrl+click any hypertext link to view its target.',0,0); rve.AddNL('You''ll see option for HTML export via converters. You can use it, but native RichView HTML'+ ' export gives much better results.',0,0); rve.Format; end; {------------------------------------------------------------------------------} procedure TfrmMain.btnOpenClick(Sender: TObject); var r: Boolean; begin if not od.Execute then exit; rve.Clear; rve.Format; rve.Update; rve.Clear; if od.FilterIndex=1 then r := rve.LoadRTF(od.FileName) else begin pb.Visible := True; r:= rvc.ImportRV(od.FileName, rve, od.FilterIndex-2); end; if not r then Application.MessageBox('Error','Error',0); pb.Visible := False; rve.Format; rve.SetFocus; end; {------------------------------------------------------------------------------} procedure TfrmMain.btnSaveClick(Sender: TObject); var r: Boolean; begin if not sd.Execute then exit; pb.Visible := True; if sd.FilterIndex=1 then r := rve.SaveRTF(sd.FileName,False) else begin pb.Visible := True; r:= rvc.ExportRV(sd.FileName, rve, sd.FilterIndex-2); end; if not r then Application.MessageBox('Error','Error',0); pb.Visible := False; rve.SetFocus; end; {------------------------------------------------------------------------------} procedure TfrmMain.rvcConverting(Sender: TObject; Percent: Integer); begin pb.Position := Percent; end; {============================ Hypertext =======================================} // We store URLs in tags procedure TfrmMain.rveReadHyperlink(Sender: TCustomRichView; const Target, Extras: String; DocFormat: TRVLoadFormat; var StyleNo, ItemTag: Integer; var ItemName: TRVRawByteString); begin ItemTag := Integer(StrNew(PChar(Target))); end; {------------------------------------------------------------------------------} procedure TfrmMain.rveWriteHyperlink(Sender: TCustomRichView; id: Integer; RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; var Target, Extras: string); begin Target := PChar(RVData.GetItemTag(ItemNo)); end; {------------------------------------------------------------------------------} procedure TfrmMain.rveJump(Sender: TObject; id: Integer); var ItemNo: Integer; RVData: TCustomRVFormattedData; s: String; begin rve.GetJumpPointLocation(id, RVData, ItemNo); s := PChar(RVData.GetItemTag(ItemNo)); ShellExecute(0, 'open', PChar(s), nil, nil, SW_SHOW); end; {==============================================================================} {$IFDEF RICHVIEWDEF2007} initialization RegisterClass(TGifImage); {$ELSE} {$IFDEF USEGIFIMAGE} initialization RegisterClass(TGifImage); {$ENDIF} {$ENDIF} end.