📄 unit1.pas
字号:
unit Unit1;
interface
{$I RV_Defs.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
RVStyle, RVScroll, RichView, RVEdit, PtblRV, RVMisc, CtrlImg, RVUndoStr, RVUni,
{$IFDEF RICHVIEWDEF3}
jpeg,
{$ENDIF}
{$IFDEF RICHVIEWDEF4}
ImgList,
{$ENDIF}
Clipbrd, StdCtrls, ExtCtrls, ComCtrls, Menus, OleCtnrs,
RVTable, Buttons, CRVData, CRVFData, RVERVData, RVItem, RVFuncs;
type
TForm1 = class(TForm)
RichViewEdit1: TRichViewEdit;
StatusBar1: TStatusBar;
MainMenu1: TMainMenu;
mpdInsert: TMenuItem;
mitPicture: TMenuItem;
mpdComponent: TMenuItem;
mitButtonComp: TMenuItem;
mitEditBoxComp: TMenuItem;
mitBreak: TMenuItem;
OpenDialog1: TOpenDialog;
Panel1: TPanel;
cmbText: TComboBox;
cmbPara: TComboBox;
mpdFile: TMenuItem;
N1: TMenuItem;
mitExit: TMenuItem;
mpdBullet: TMenuItem;
mitHelpIcon: TMenuItem;
mitHelpSearchIcon: TMenuItem;
mitPropertiesIcon: TMenuItem;
mitSave: TMenuItem;
SaveDialog1: TSaveDialog;
N2: TMenuItem;
mitClear: TMenuItem;
mpdEdit: TMenuItem;
mitCopy: TMenuItem;
mitPaste: TMenuItem;
mitCut: TMenuItem;
mitDelete: TMenuItem;
PasteAs1: TMenuItem;
mitPasteAsText: TMenuItem;
mitPasteAsMetafile: TMenuItem;
mitPasteAsBitmap: TMenuItem;
mitPasteAsRVF: TMenuItem;
N3: TMenuItem;
mitEditCheckpoint: TMenuItem;
mitEditProps: TMenuItem;
PopupMenu1: TPopupMenu;
mitEditProp1: TMenuItem;
mitEditCheckpoint1: TMenuItem;
mpdHotspot: TMenuItem;
mitAddImageHS: TMenuItem;
mitAddTextHS: TMenuItem;
mitSelectAll: TMenuItem;
mpdMisc: TMenuItem;
N4: TMenuItem;
mitPrint: TMenuItem;
FindDialog1: TFindDialog;
N6: TMenuItem;
mitSearch: TMenuItem;
mitPasteAsOle: TMenuItem;
N8: TMenuItem;
mitPreview: TMenuItem;
mitSelectCurrentWord: TMenuItem;
RVPrint1: TRVPrint;
mpdBackground: TMenuItem;
mitBackNoBitmap: TMenuItem;
mitBackStretched: TMenuItem;
mitBackTiled: TMenuItem;
mitBackTiledandScrolled: TMenuItem;
mitBackCentered: TMenuItem;
N5: TMenuItem;
mitCheckpointList: TMenuItem;
N9: TMenuItem;
mitRemovePageBreak: TMenuItem;
mitInsertPageBreak: TMenuItem;
N10: TMenuItem;
mitUndo: TMenuItem;
mitRedo: TMenuItem;
mitInsertFile: TMenuItem;
mitPasteAsUnicodeText: TMenuItem;
mitLoad: TMenuItem;
mpdTable: TMenuItem;
mitInserttable1: TMenuItem;
mitInsertTable2: TMenuItem;
N7: TMenuItem;
mitMergeCells: TMenuItem;
N13: TMenuItem;
mitUmRows: TMenuItem;
mitUmCols: TMenuItem;
mitUmRowsandCols: TMenuItem;
Insert1: TMenuItem;
mitRowsAbove: TMenuItem;
mitRowsBelow: TMenuItem;
N14: TMenuItem;
mitColsLeft: TMenuItem;
mitColsRight: TMenuItem;
Delete1: TMenuItem;
mitDelRows: TMenuItem;
mitDelColumns: TMenuItem;
Unmerge1: TMenuItem;
Split1: TMenuItem;
mitSplitVertically: TMenuItem;
mitSplitHorizontally: TMenuItem;
mitInsertTable3: TMenuItem;
mitInsertTable4: TMenuItem;
psd: TPrinterSetupDialog;
mitPasteAsRTF: TMenuItem;
RVStyle1: TRVStyle;
N11: TMenuItem;
mitReadOnly: TMenuItem;
N12: TMenuItem;
mitOptions: TMenuItem;
mpdLists: TMenuItem;
mitApplyList: TMenuItem;
mitRemoveLists: TMenuItem;
il: TImageList;
mitBackTopLeft: TMenuItem;
mitBackTopRight: TMenuItem;
mitBackBottomLeft: TMenuItem;
mitBackBottomRight: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure mitPictureClick(Sender: TObject);
procedure mitButtonCompClick(Sender: TObject);
procedure mitEditBoxCompClick(Sender: TObject);
procedure RichViewEdit1CurParaStyleChanged(Sender: TObject);
procedure RichViewEdit1CurTextStyleChanged(Sender: TObject);
procedure cmbParaClick(Sender: TObject);
procedure cmbTextClick(Sender: TObject);
procedure mitBreakClick(Sender: TObject);
procedure mitExitClick(Sender: TObject);
procedure mitInsertBulletClick(Sender: TObject);
procedure mitSaveClick(Sender: TObject);
procedure mitClearClick(Sender: TObject);
procedure mpdEditClick(Sender: TObject);
procedure RichViewEdit1Select(Sender: TObject);
procedure mitPasteAsBitmapClick(Sender: TObject);
procedure mitPasteAsMetafileClick(Sender: TObject);
procedure mitPasteAsTextClick(Sender: TObject);
procedure mitPasteClick(Sender: TObject);
procedure mitDeleteClick(Sender: TObject);
procedure mitCutClick(Sender: TObject);
procedure mitCopyClick(Sender: TObject);
procedure mitEditCheckpointClick(Sender: TObject);
procedure mitAddHSClick(Sender: TObject);
procedure mitSelectAllClick(Sender: TObject);
procedure mitEditPropsClick(Sender: TObject);
procedure mitPrintClick(Sender: TObject);
procedure RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; Name: String; Tag: Integer;
var gr: TGraphic);
procedure RichViewEdit1RVFControlNeeded(Sender: TCustomRichView; Name: String; Tag: Integer;
var ctrl: TControl);
procedure RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; ImageListTag: Integer;
var il: TCustomImageList);
procedure mitSearchClick(Sender: TObject);
procedure FindDialog1Find(Sender: TObject);
procedure mitCheckPointListClick(Sender: TObject);
procedure mitPasteAsRVFClick(Sender: TObject);
procedure mitPasteAsOleClick(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure mitPreviewClick(Sender: TObject);
procedure mitBackClick(Sender: TObject);
procedure RichViewEdit1SaveComponentToFile(Sender: TCustomRichView;
Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat;
var OutStr: String);
procedure mitSelectCurrentWordClick(Sender: TObject);
procedure RichViewEdit1Jump(Sender: TObject; id: Integer);
procedure RichViewEdit1Change(Sender: TObject);
procedure mpdBackgroundClick(Sender: TObject);
procedure mitInsertPageBreakClick(Sender: TObject);
procedure mitRemovePageBreakClick(Sender: TObject);
procedure mitUndoClick(Sender: TObject);
procedure mitRedoClick(Sender: TObject);
procedure mitInsertFileClick(Sender: TObject);
procedure mitPasteAsUnicodeTextClick(Sender: TObject);
procedure mitLoadClick(Sender: TObject);
procedure mitInserttable1Click(Sender: TObject);
procedure mitInsertTable2Click(Sender: TObject);
procedure mitCellsOperationClick(Sender: TObject);
procedure mpdTableClick(Sender: TObject);
procedure mitInsertTable3Click(Sender: TObject);
procedure mitInsertTable4Click(Sender: TObject);
procedure RichViewEdit1RVMouseMove(Sender: TObject; id: Integer);
procedure mitPasteAsRTFClick(Sender: TObject);
procedure mitReadOnlyClick(Sender: TObject);
procedure mitOptionsClick(Sender: TObject);
procedure mitApplyListClick(Sender: TObject);
procedure mitRemoveListsClick(Sender: TObject);
procedure RichViewEdit1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure RichViewEdit1ControlAction(Sender: TCustomRichView;
ControlAction: TRVControlAction; ItemNo: Integer;
var ctrl: TControl);
procedure RichViewEdit1WriteHyperlink(Sender: TCustomRichView;
id: Integer; RVData: TCustomRVData; ItemNo: Integer;
SaveFormat: TRVSaveFormat; var Target, Extras: string);
private
{ Private declarations }
ActiveOleContainer: TOleContainer;
HTMLSaveOptions: TRVSaveOptions;
HTMLTitle: String;
procedure OnOleResize(Sender: TObject);
procedure OnOleActivate(Sender: TObject);
procedure OnOleDeactivate(Sender: TObject);
procedure OnControlClick(Sender: TObject);
procedure WMDisplayChange(var Message: TMessage{TWMDisplayChange}); message WM_DISPLAYCHANGE;
procedure UpdateUndoMenu;
procedure DisplayUnicodeWarning;
function GetUnicodeFontName: String;
function GetRVFErrors: String;
procedure FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox);
procedure CloseOleContainer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses CPFrm, PropFrm, ListFrm, PreviewFrm, OptionsFrm;
{$R *.DFM}
{ This demo uses conditional defines from RV_Defs.inc (see include
directive at the beginnning of this file)
RICHVIEWDEF3 is defined, if there is Delphi3 or later or C++Builder 3 or later
RICHVIEWDEF4 is defined, if there is Delphi4 or later
}
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
HTMLSaveOptions := [rvsoImageSizes,rvsoUseCheckpointsNames];
HTMLTitle := 'Demo File';
RVStyle1.TextStyles[11].FontName := GetUnicodeFontName;
// This demo program is saved in Delphi 2, where Charset property is not available.
// So assigning non-default charset here:
{$IFDEF RICHVIEWCBDEF3} // For Delphi3+, C++Builder 3+
RVStyle1.TextStyles[6].Charset := SYMBOL_CHARSET;
RVStyle1.ListStyles[0].Levels[0].Font.Charset := SYMBOL_CHARSET;
{$ENDIF}
// Item can have associated "tags" - integers or strings.
// Comment next line to use integer tags
RichViewEdit1.Options := RichViewEdit1.Options+[rvoTagsArePChars];
// Loading the initial file.
RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'Readme.rvf');
FillStyleCombo(RVStyle1.ParaStyles, cmbPara);
FillStyleCombo(RVStyle1.TextStyles, cmbText);
RichViewEdit1.Format;
cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo;
cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo;
UpdateUndoMenu;
end;
{ Returning available Unicode-enabled font ---------------------------}
function TForm1.GetUnicodeFontName: String;
begin
if Screen.Fonts.IndexOf('Arial Unicode MS')>=0 then
Result := 'Arial Unicode MS'
else if Screen.Fonts.IndexOf('Lucida Sans Unicode')>=0 then
Result := 'Lucida Sans Unicode'
else
Result := 'Arial';
end;
{ Filling combobox with standard styles ------------------------------}
procedure TForm1.FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox);
var i: Integer;
begin
{ The simplest way to fill the combo box with style names is:
cmb.Items.Assign(Styles);
But this code will fill the combo box with all styles -
both standard styles (i.e. real styles) and non-standard styles will be
added in it.
So we'll fill in the combo box manually.
For simplification, we'll add only the first standard styles }
cmb.Items.BeginUpdate;
cmb.Items.Clear;
for i := 0 to Styles.Count-1 do begin
if not TCustomRVInfo(Styles.Items[i]).Standard then
break;
cmb.Items.Add(TCustomRVInfo(Styles.Items[i]).StyleName);
end;
cmb.Items.EndUpdate;
end;
{---------------------------------------------------------------------}
procedure TForm1.UpdateUndoMenu;
var UndoType : TRVUndoType;
begin
UndoType := RichViewEdit1.UndoAction;
mitUndo.Enabled := UndoType<>rvutNone;
if UndoType=rvutCustom then
mitUndo.Caption := 'Undo '+RichViewEdit1.UndoName
else
mitUndo.Caption := 'Undo '+RVUndoTypeNamesEn[UndoType];
UndoType := RichViewEdit1.RedoAction;
mitRedo.Enabled := UndoType<>rvutNone;
if UndoType=rvutCustom then
mitRedo.Caption := 'Redo '+RichViewEdit1.RedoName
else
mitRedo.Caption := 'Redo '+RVUndoTypeNamesEn[UndoType];
end;
{---------------------------------------------------------------------}
procedure TForm1.DisplayUnicodeWarning;
var wasclear: Boolean;
begin
wasclear := RichViewEdit1.ItemCount=0;
// This method is called before loading Unicode
// (when inserting Unicode, editor automatically switches to Unicode style,
// according to RVStyle1.DefUnicodeStyle, if necessary)
if not RVStyle1.TextStyles[RichViewEdit1.CurTextStyleNo].Unicode then
Application.MessageBox('Loading/Inserting Unicode data using non-Unicode text style.'#13+
'Text will be converted.'#13+
'Choose "Unicode" style in combo to use Unicode text style',
'Warning', MB_OK or MB_ICONEXCLAMATION);
if wasclear then
RichViewEdit1.Clear;
end;
{======================================================================}
{ Font and paragraph combos }
{======================================================================}
procedure TForm1.RichViewEdit1CurParaStyleChanged(Sender: TObject);
begin
if RichViewEdit1.CurParaStyleNo<cmbPara.Items.Count then
cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo
else
cmbPara.ItemIndex := -1;
end;
{----------------------------------------------------------------------}
procedure TForm1.RichViewEdit1CurTextStyleChanged(Sender: TObject);
begin
if RichViewEdit1.CurTextStyleNo<cmbText.Items.Count then
cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo
else
cmbText.ItemIndex := -1;
end;
{----------------------------------------------------------------------}
procedure TForm1.cmbParaClick(Sender: TObject);
begin
RichViewEdit1.ApplyParaStyle(cmbPara.ItemIndex);
RichViewEdit1.SetFocus;
end;
{----------------------------------------------------------------------}
procedure TForm1.cmbTextClick(Sender: TObject);
begin
RichViewEdit1.ApplyTextStyle(cmbText.ItemIndex);
RichViewEdit1.SetFocus;
end;
{======================================================================}
{ Main menu: "File" }
{======================================================================}
{ File|Load... --------------------------------------------------------}
procedure TForm1.mitLoadClick(Sender: TObject);
var CurTextStyleNo, CurParaStyleNo: Integer;
r: Boolean;
ErrorMessage: String;
begin
OpenDialog1.Title := 'Loading & Import';
OpenDialog1.Filter := 'RichView Format Files(*.rvf)|*.rvf|'+
'RTF Files (*.rtf)|*.rtf|'+
'Text Files - autodetect (*.txt)|*.txt|'+
'ANSI Text Files (*.txt)|*.txt|'+
'Unicode Text Files (*.txt)|*.txt';
if OpenDialog1.Execute then begin
Screen.Cursor := crHourglass;
CurTextStyleNo := RichViewEdit1.CurTextStyleNo;
CurParaStyleNo := RichViewEdit1.CurParaStyleNo;
CloseOleContainer;
RichViewEdit1.Clear;
RVStyle1.DefUnicodeStyle := -1;
RichViewEdit1.CurTextStyleNo := CurTextStyleNo;
RichViewEdit1.CurParaStyleNo := CurParaStyleNo;
case OpenDialog1.FilterIndex of
1: // RVF
r := RichViewEdit1.LoadRVF(OpenDialog1.FileName);
2: // RTF
r := RichViewEdit1.LoadRTF(OpenDialog1.FileName);
3: // Text
if RV_TestFileUnicode(OpenDialog1.FileName)=rvutYes then begin
DisplayUnicodeWarning;
r := RichViewEdit1.LoadTextW(OpenDialog1.FileName,CurTextStyleNo,CurParaStyleNo,False)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -