📄 unit1.pas
字号:
// Displaying RichViewEdit1.BackgroundStyle as checkmark in submenu...
mitBackNoBitmap.Checked := RichViewEdit1.BackgroundStyle=bsNoBitmap;
mitBackStretched.Checked := RichViewEdit1.BackgroundStyle=bsStretched;
mitBackTiledAndScrolled.Checked := RichViewEdit1.BackgroundStyle=bsTiledAndScrolled;
mitBackTiled.Checked := RichViewEdit1.BackgroundStyle=bsTiled;
mitBackCentered.Checked := RichViewEdit1.BackgroundStyle=bsCentered;
mitBackTopLeft.Checked := RichViewEdit1.BackgroundStyle=bsTopLeft;
mitBackTopRight.Checked := RichViewEdit1.BackgroundStyle=bsTopRight;
mitBackBottomLeft.Checked := RichViewEdit1.BackgroundStyle=bsBottomLeft;
mitBackBottomRight.Checked := RichViewEdit1.BackgroundStyle=bsBottomRight;
end;
{ Misc | Background options -------------------------------------------}
procedure TForm1.mitBackClick(Sender: TObject);
begin
RichViewEdit1.BackgroundStyle := TBackgroundStyle(TMenuItem(Sender).Tag);
end;
{======================================================================}
{ On Popup -------------------------------------------------------------}
procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
mitEditProp1.Enabled := not RichViewEdit1.SelectionExists;
end;
{-----------------------------------------------------------------------}
{OnChange event handler.
{-----------------------------------------------------------------------}
procedure TForm1.RichViewEdit1Change(Sender: TObject);
begin
UpdateUndoMenu;
end;
{-----------------------------------------------------------------------}
// You should manually update palette info when user changes color mode
// without restarting Windows
procedure TForm1.WMDisplayChange(var Message: TMessage{TWMDisplayChange});
begin
RichViewEdit1.UpdatePaletteInfo;
RVPrint1.UpdatePaletteInfo;
end;
{-----------------------------------------------------------------------}
{ Event: OnJump (when user clicks hypertext item with pressed Ctrl key }
procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer);
var RVData: TCustomRVFormattedData;
ItemNo: Integer;
s: String;
begin
// NOTE: OnJump is called after the caret is repositioned to clicked item
// But warning: a clicked event is not necessarily an active item
// (when clicking on left part of picture or left part of first character in text item,
// caret moves before item and previous item becomes active!)
RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo);
s := GetTagStr(RVData.GetItemTag(ItemNo));
Application.MessageBox(PChar(Format('Tag of clicked hyperlink is "%s"', [s])),
'Hyperlink', MB_OK or MB_ICONINFORMATION);
end;
{------------------------------------------------------------------------------}
{ Event: OnRVMouseMove (when user moves mouse above hypertext item with pressed Ctrl key }
procedure TForm1.RichViewEdit1RVMouseMove(Sender: TObject; id: Integer);
var RVData: TCustomRVFormattedData;
ItemNo: Integer;
s: String;
begin
if id=-1 then begin
StatusBar1.SimpleText := '';
end
else begin
RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo);
s := GetTagStr(RVData.GetItemTag(ItemNo));
StatusBar1.SimpleText := Format('Tag of hyperlink is "%s"', [s]);
end;
end;
{======================================================================}
{ Main menu : "Lists" }
{======================================================================}
{ Lists | Apply -------------------------------------------------------}
procedure TForm1.mitApplyListClick(Sender: TObject);
begin
// See more demos about list styles in Demos\Delphi\Assorted\ListStyles\
if (RVStyle1.ListStyles.Count=0) or (RVStyle1.ListStyles[0].Levels.Count=0) then begin
Application.MessageBox('Default list style is not defined', '', 0);
exit;
end;
RichViewEdit1.ApplyListStyle(0, 0, 1, False, False);
end;
{ Lists | Remove ------------------------------------------------------}
procedure TForm1.mitRemoveListsClick(Sender: TObject);
begin
RichViewEdit1.RemoveLists(False);
end;
{======================================================================}
{ Main menu : "Table" }
{======================================================================}
{ Table | Insert Table Example 1 --------------------------------------}
procedure TForm1.mitInserttable1Click(Sender: TObject);
var table: TRVTableItemInfo;
r,c: Integer;
begin
table := TRVTableItemInfo.CreateEx(4,3, RichViewEdit1.RVData);
table.BorderStyle := rvtbRaisedColor;
table.CellBorderStyle := rvtbLoweredColor;
table.BorderLightColor := $00FAF1C9;
table.BorderColor := $00A98E10;
table.CellBorderLightColor := $00FAF1C9;
table.CellBorderColor := $00A98E10;
table.Color := $00EAC724;
table.BorderWidth := 5;
table.CellBorderWidth := 2;
table.CellPadding := 5;
table.CellVSpacing := 1;
table.CellHSpacing := 1;
table.BorderVSpacing := 1;
table.BorderHSpacing := 1;
for r := 0 to table.Rows.Count-1 do
for c := 0 to table.Rows[r].Count-1 do
table.Cells[r,c].BestWidth := 100;
table.MergeCells(0,0,3,1, False);
table.MergeCells(1,0,1,3, False);
with table.Cells[0,0] do begin
Color := clInfoBk;
Clear;
AddBulletEx( '',0,il,2);
AddNL(' Example 1 ',1,-1);
AddBulletEx( '',0,il,-1);
AddNL('All cells have 100 pixels width, width of table itself is calculated basing on width of cells.',0,0);
end;
if RichViewEdit1.InsertItem('', table) then begin
end;
end;
{ Table | Insert Table Example 2 --------------------------------------}
procedure TForm1.mitInsertTable2Click(Sender: TObject);
var table: TRVTableItemInfo;
btn: TButton;
begin
table := TRVTableItemInfo.CreateEx(10,6, RichViewEdit1.RVData);
table.Color := clWhite;
table.BorderStyle := rvtbRaisedColor;
table.CellBorderStyle := rvtbLoweredColor;
table.BorderLightColor := clWhite;
table.BorderColor := clBlack;
table.CellBorderLightColor := clWhite;
table.CellBorderColor := clBlack;
table.BorderWidth := 2;
table.BorderVSpacing := 0;
table.BorderHSpacing := 0;
table.CellBorderWidth := 2;
table.CellPadding := 3;
table.CellVSpacing := 0;
table.CellHSpacing := 0;
table.Cells[0,0].BestWidth := -16;
table.Cells[0,1].BestWidth := -16;
table.Cells[0,2].BestWidth := -16;
table.Cells[0,3].BestWidth := -16;
table.Cells[0,4].BestWidth := -16;
table.Cells[0,5].BestWidth := -16;
// table.Rows.MergeCells(1,0,6,1);
table.MergeCells(2,0,2,8, False);
with table.Cells[2,0] do begin
Clear;
AddNL('Another example.',0,0);
btn := TButton.Create(nil);
btn.Caption := 'With button inside';
btn.Width := 150;
btn.OnClick := OnControlClick;
AddControlEx('',btn,2,rvvaBaseline);
SetItemExtraIntProperty(ItemCount-1, rvepResizable, 1);
AddNL('Width of table = 90% of document width. Widths of cells = 16%',0,0);
end;
table.BestWidth := -90;
if RichViewEdit1.InsertItem('', table) then begin
end;
end;
{ Table | Insert Table Example 3 --------------------------------------}
procedure TForm1.mitInsertTable3Click(Sender: TObject);
var table: TRVTableItemInfo;
r,c: Integer;
begin
table := TRVTableItemInfo.CreateEx(5,6, RichViewEdit1.RVData);
table.Color := $00A5CCE7;
table.BorderStyle := rvtbColor;
table.CellBorderStyle := rvtbColor;
table.BorderColor := $002E1234;
table.CellBorderColor := $002E1234;
table.BorderWidth := 2;
table.BorderVSpacing := 2;
table.BorderHSpacing := 2;
table.CellBorderWidth := 1;
table.CellPadding := 3;
table.CellVSpacing := 0;
table.CellHSpacing := 0;
table.Options := table.Options + [rvtoHideGridLines];
for c := 0 to table.Rows[0].Count-1 do
table.Cells[0,c].Color := $00A5E1F8;
for r := 1 to table.Rows.Count-1 do
table.Cells[r,0].Color := $00A5E1F8;
for r := 1 to table.Rows.Count-1 do
for c := 1 to table.Rows[r].Count-1 do begin
table.Cells[r,c].Color := $007AB4DA;
if c>1 then
table.Cells[r,c].VisibleBorders.Left := False;
if c<table.Rows[r].Count-1 then
table.Cells[r,c].VisibleBorders.Right := False;
end;
table.BestWidth := 400;
RichViewEdit1.InsertText('Third example: width of table = 400 pixels, widths of cells - unspecified.',False);
if RichViewEdit1.InsertItem('', table) then begin
end;
end;
{ Table | Insert Table Example 4 --------------------------------------}
procedure TForm1.mitInsertTable4Click(Sender: TObject);
var table: TRVTableItemInfo;
r,c: Integer;
begin
table := TRVTableItemInfo.CreateEx(3,3, RichViewEdit1.RVData);
table.Color := clNone;
table.BorderStyle := rvtbColor;
table.CellBorderStyle := rvtbColor;
table.BorderWidth := 1;
table.BorderVSpacing := 2;
table.BorderHSpacing := 2;
table.CellBorderWidth := 1;
table.CellPadding := 3;
table.CellVSpacing := 5;
table.CellHSpacing := 5;
table.VRuleWidth := 1;
table.HRuleWidth := 1;
for r := 0 to table.Rows.Count-1 do
for c := 0 to table.Rows[r].Count-1 do begin
table.Cells[r,c].BestWidth := 40;
table.Cells[r,c].Clear;
table.Cells[r,c].AddFmt('%d,%d',[r,c],0,0);
table.Cells[r,c].Color := clWhite;
end;
RichViewEdit1.InsertText('Transparent table with rules',False);
if RichViewEdit1.InsertItem('', table) then begin
end;
end;
{ Table submenu popups ------------------------------------------}
procedure TForm1.mpdTableClick(Sender: TObject);
var item: TCustomRVItemInfo;
table: TRVTableItemInfo;
r,c,cs,rs: Integer;
rve: TCustomRichViewEdit;
Selected, SelectionRectangular: Boolean;
begin
if not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, item) then begin
mitRowsAbove.Enabled := False;
mitRowsBelow.Enabled := False;
mitColsLeft.Enabled := False;
mitColsRight.Enabled := False;
mitDelRows.Enabled := False;
mitDelColumns.Enabled := False;
mitMergeCells.Enabled := False;
mitUmRows.Enabled := False;
mitUmCols.Enabled := False;
mitUmRowsAndCols.Enabled := False;
mitSplitVertically.Enabled := False;
mitSplitHorizontally.Enabled := False;
exit;
end;
table := TRVTableItemInfo(item);
Selected := table.GetNormalizedSelectionBounds(True,r,c,cs,rs);
mitRowsAbove.Enabled := Selected;
mitRowsBelow.Enabled := Selected;
mitColsLeft.Enabled := Selected;
mitColsRight.Enabled := Selected;
mitDelRows.Enabled := Selected;
mitDelColumns.Enabled := Selected;
mitMergeCells.Enabled := table.CanMergeSelectedCells(True);
SelectionRectangular := Selected and
(table.CanMergeSelectedCells(True) or
(table.GetEditedCell(r,c)<>nil));
mitSplitVertically.Enabled := SelectionRectangular;
mitSplitHorizontally.Enabled := SelectionRectangular;
mitUmRows.Enabled := SelectionRectangular;
mitUmCols.Enabled := SelectionRectangular;
mitUmRowsAndCols.Enabled := SelectionRectangular;
end;
{ Table | All other commands --------------------------------------}
procedure TForm1.mitCellsOperationClick(Sender: TObject);
var item: TCustomRVItemInfo;
table: TRVTableItemInfo;
Data: Integer;
r,c,cs,rs: Integer;
s: String;
rve: TCustomRichViewEdit;
ItemNo: Integer;
begin
if not RichViewEdit1.CanChange or
not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, item) then
exit;
table := TRVTableItemInfo(item);
ItemNo := rve.GetItemNo(table);
rve.BeginItemModify(ItemNo, Data);
case TMenuItem(Sender).Tag of
1:
table.InsertRowsAbove(1);
2:
table.InsertRowsBelow(1);
3:
table.InsertColsLeft(1);
4:
table.InsertColsRight(1);
5:
begin
table.GetNormalizedSelectionBounds(True,r,c,cs,rs);
if rs=table.Rows.Count then begin
// deleting whole table
rve.SetSelectionBounds(ItemNo,0,ItemNo,1);
rve.DeleteSelection;
exit;
end;
rve.BeginUndoGroup(rvutModifyItem);
rve.SetUndoGroupMode(True);
table.DeleteSelectedRows;
// it's possible all-nil rows/cols appear after deleting
table.DeleteEmptyRows;
table.DeleteEmptyCols;
rve.SetUndoGroupMode(False);
end;
6:
begin
table.GetNormalizedSelectionBounds(True,r,c,cs,rs);
if cs=table.Rows[0].Count then begin
// deleting whole table
rve.SetSelectionBounds(ItemNo,0,ItemNo,1);
rve.DeleteSelection;
exit;
end;
rve.BeginUndoGroup(rvutModifyItem);
rve.SetUndoGroupMode(True);
table.DeleteSelectedCols;
// it's possible all-nil rows/cols appear after deleting
table.DeleteEmptyRows;
table.DeleteEmptyCols;
rve.SetUndoGroupMode(False);
end;
7:
begin
// 3 methods: MergeSelectedCells, DeleteEmptyRows, DeleteEmptyCols
// must be undone as one action.
// So using BeginUndoGroup - SetUndoGroupMode(True) - ... - SetUndoGroupMode(False)
rve.BeginUndoGroup(rvutModifyItem);
rve.SetUndoGroupMode(True);
table.MergeSelectedCells(True);
table.DeleteEmptyRows;
table.DeleteEmptyCols;
rve.SetUndoGroupMode(False);
// table.MergeSelectedCells(False) will not allow to create empty columns
// or rows
end;
8:
table.UnmergeSelectedCells(True, False);
9:
table.UnmergeSelectedCells(False, True);
10:
table.UnmergeSelectedCells(True, True);
11:
begin
s := '2';
if InputQuery('Split Vertically','Columns (in each selected cell):',s) then begin
table.SplitSelectedCellsVertically(StrToIntDef(s,0));
end;
end;
12:
begin
s := '2';
if InputQuery('Split Horizontally','Rows (in each selected cell):',s) then begin
table.SplitSelectedCellsHorizontally(StrToIntDef(s,0));
end;
end;
end;
rve.EndItemModify(ItemNo, Data);
rve.Change;
end;
initialization
// We need to register classes in order to load them from rvf files
RegisterClasses([TButton, TEdit, TOleContainer]);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -