📄 wwrich.pas
字号:
{
//
// Components : TwwRichEditForm
//
// Copyright (c) 1998-2001 by Woll2Woll Software
//
// 9/15/98 - Only show InsertObject if not readonly
// 12/23/98 - Include Redo hint for Delphi 4
// 2/24/99 - No messagedlg if readonly - In case of resize which would set modified flag
// 2/15/00 - Remove loop for printing
// 6/8/00 - Save as plain text when user selects text type
// 9/5/2001- If no font size in dropdown still set text to current size. Just like wordpad.
// 10/02/2001 - More accurate way of determining if background color is highlighted.
}
unit wwrich;
interface
{$i wwIfDef.pas}
{$R-}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Mask, DBCtrls, ExtCtrls, Db, DBTables, Wwtable, Wwdatsrc, StdCtrls,
ComCtrls, Grids, DBGrids, wwdbedit, Wwdotdot, Wwdbcomb, Buttons, richedit,
Menus, wwrchdlg, wwriched, wwintl, wwrichtb, printers, commdlg, winspool,
wwTrackIcon, ImgList;
type
TwwRichEditForm = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Print1: TMenuItem;
PageSetup1: TMenuItem;
SaveExit1: TMenuItem;
Exit1: TMenuItem;
Edit1: TMenuItem;
Undo1: TMenuItem;
EditSep1: TMenuItem;
Cut1: TMenuItem;
Copy1: TMenuItem;
Paste1: TMenuItem;
Clear1: TMenuItem;
SelectAll1: TMenuItem;
EditSep2: TMenuItem;
Find1: TMenuItem;
FindNext1: TMenuItem;
Replace1: TMenuItem;
View1: TMenuItem;
Toolbar1: TMenuItem;
FormatBar1: TMenuItem;
StatusBar: TStatusBar;
OptionsSep: TMenuItem;
Options1: TMenuItem;
Insert1: TMenuItem;
DateandTime1: TMenuItem;
Format1: TMenuItem;
Font1: TMenuItem;
BulletStyle1: TMenuItem;
Paragraph1: TMenuItem;
Tabs1: TMenuItem;
Help1: TMenuItem;
FormatBar: TPanel;
FontNameCombo: TwwDBComboBox;
FontSizeCombo: TwwDBComboBox;
BoldButton: TSpeedButton;
UnderlineButton: TSpeedButton;
ItalicButton: TSpeedButton;
LeftButton: TSpeedButton;
CenterButton: TSpeedButton;
RightButton: TSpeedButton;
BulletButton: TSpeedButton;
StatusBar1: TMenuItem;
PrintDialog1: TPrintDialog;
FileSep2: TMenuItem;
FileSep1: TMenuItem;
Load1: TMenuItem;
SaveAs1: TMenuItem;
OpenDialog1: TOpenDialog;
Toolbar: TPanel;
NewButton: TSpeedButton;
ToolBarBevel: TBevel;
FormatBarBevel: TBevel;
LoadButton1: TSpeedButton;
SaveAsButton: TSpeedButton;
PrintButton: TSpeedButton;
FindButton: TSpeedButton;
CutButton: TSpeedButton;
CopyButton: TSpeedButton;
UndoButton: TSpeedButton;
PasteButton: TSpeedButton;
SaveDialog1: TSaveDialog;
RulerBevel: TBevel;
Ruler1: TMenuItem;
InsertObject1: TMenuItem;
RedoButton: TSpeedButton;
Redo1: TMenuItem;
ToolbarBevel1: TBevel;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
UserButtonBevel: TBevel;
Bevel4: TBevel;
PopupMenu1: TPopupMenu;
Black1: TMenuItem;
Green1: TMenuItem;
Red1: TMenuItem;
Blue1: TMenuItem;
Yellow1: TMenuItem;
Purple1: TMenuItem;
Teal1: TMenuItem;
Gray1: TMenuItem;
Silver1: TMenuItem;
Red2: TMenuItem;
Lime1: TMenuItem;
Yellow2: TMenuItem;
Blue2: TMenuItem;
Fuchsia1: TMenuItem;
Aqua1: TMenuItem;
White1: TMenuItem;
Automatic1: TMenuItem;
ColorButton: TSpeedButton;
Tools1: TMenuItem;
Spelling1: TMenuItem;
SpellButton: TSpeedButton;
ImageList1: TImageList;
HighlightButton: TSpeedButton;
JustifyButton: TSpeedButton;
PrintPreviewButton: TSpeedButton;
PrintPreview1: TMenuItem;
Bevel5: TBevel;
procedure BoldButtonClick(Sender: TObject);
procedure UnderlineButtonClick(Sender: TObject);
procedure ItalicButtonClick(Sender: TObject);
procedure RightButtonClick(Sender: TObject);
procedure CenterButtonClick(Sender: TObject);
procedure LeftButtonClick(Sender: TObject);
procedure BulletButtonClick(Sender: TObject);
procedure RichEdit1SelectionChange(Sender: TObject);
procedure Undo1Click(Sender: TObject);
procedure Cut1Click(Sender: TObject);
procedure Copy1Click(Sender: TObject);
procedure Paste1Click(Sender: TObject);
procedure SelectAll1Click(Sender: TObject);
procedure Clear1Click(Sender: TObject);
procedure Find1Click(Sender: TObject);
procedure FindNext1Click(Sender: TObject);
procedure Replace1Click(Sender: TObject);
procedure Font1Click(Sender: TObject);
procedure FontNameComboCloseUp(Sender: TwwDBComboBox; Select: Boolean);
procedure FontSizeComboCloseUp(Sender: TwwDBComboBox; Select: Boolean);
procedure BulletStyle1Click(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormShow(Sender: TObject);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Paragraph1Click(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure Print1Click(Sender: TObject);
procedure FormatBar1Click(Sender: TObject);
procedure StatusBar1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure SaveExit1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Tabs1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure PageSetup1Click(Sender: TObject);
procedure Load1Click(Sender: TObject);
procedure SaveAs1Click(Sender: TObject);
procedure Toolbar1Click(Sender: TObject);
procedure NewButtonClick(Sender: TObject);
procedure LoadButton1Click(Sender: TObject);
procedure SaveAsButtonClick(Sender: TObject);
procedure PrintButtonClick(Sender: TObject);
procedure FindButtonClick(Sender: TObject);
procedure CutButtonClick(Sender: TObject);
procedure CopyButtonClick(Sender: TObject);
procedure PasteButtonClick(Sender: TObject);
procedure UndoButtonClick(Sender: TObject);
procedure FontNameComboDropDown(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Ruler1Click(Sender: TObject);
procedure InsertObject1Click(Sender: TObject);
procedure RedoButtonClick(Sender: TObject);
procedure Redo1Click(Sender: TObject);
procedure ColorButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Spelling1Click(Sender: TObject);
procedure SpellButtonClick(Sender: TObject);
procedure HighlightButtonClick(Sender: TObject);
procedure BoldButtonMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure JustifyButtonClick(Sender: TObject);
procedure PrintPreviewButtonClick(Sender: TObject);
private
tempDown: boolean;
OrigOnHint: TNotifyEvent;
FCanvas: TCanvas;
OldParent1, OldParent2: TWinControl;
Procedure RefreshControls;
Procedure SetRichEditFontName(Value: string); { Bypass VCL bug as it doesn't set the CharSet}
Procedure UpdateStatusBar;
procedure UpdateFormatToolBar(ShowToolBar, ShowFormatBar: boolean);
Procedure FormChangeHint(Sender: TObject);
Procedure ApplyIntl;
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
procedure WMMeasureItem(var Message: TWMMeasureItem); message WM_MEASUREITEM;
procedure WMDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
procedure ColorClick(Sender: TObject);
procedure InitColorMenu;
public
OrigRichEdit: TwwCustomRichEdit;
RichEdit1: TwwDBRichEdit;
RulerPanel: TwwRulerPanel;
end;
const wwCentimetersPerInch = 2.537;
//const wwCentimetersPerInch = 2.54;
var
wwRichEditForm: TwwRichEditForm;
implementation
{$R *.DFM}
uses wwcommon;
const ColorBoxWidth = 40;
type TwwPageSetupDialog = class(TCommonDialog)
public
RichEdit1: TwwCustomRichEdit;
{$ifdef wwDelphi3Up}
function Execute: Boolean; override;
{$else}
function Execute: Boolean;
{$endif}
end;
procedure TwwRichEditForm.BoldButtonClick(Sender: TObject);
begin
RichEdit1.SetStyleAttribute(fsBold, not TempDown);
{ if (TempDown) then
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style -[fsBold]
else
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style +[fsBold];}
RefreshControls;
end;
procedure TwwRichEditForm.UnderlineButtonClick(Sender: TObject);
begin
RichEdit1.SetStyleAttribute(fsUnderline, not TempDown);
{ if (TempDown) then
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style -[fsUnderline]
else
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style +[fsUnderline];}
RefreshControls;
end;
procedure TwwRichEditForm.ItalicButtonClick(Sender: TObject);
begin
RichEdit1.SetStyleAttribute(fsItalic, not TempDown);
{ if (TempDown) then
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style -[fsItalic]
else
richedit1.SelAttributes.Style:=
richedit1.SelAttributes.Style +[fsItalic];}
RefreshControls;
end;
procedure TwwRichEditForm.RightButtonClick(Sender: TObject);
begin
richedit1.Paragraph.Alignment:= taRightJustify;
RefreshControls;
end;
procedure TwwRichEditForm.CenterButtonClick(Sender: TObject);
begin
richedit1.Paragraph.Alignment:= taCenter;
RefreshControls;
end;
procedure TwwRichEditForm.LeftButtonClick(Sender: TObject);
begin
richedit1.Paragraph.Alignment:= taLeftJustify;
RefreshControls;
end;
procedure TwwRichEditForm.BulletButtonClick(Sender: TObject);
begin
RichEdit1.SetBullet(not TempDown);
RefreshControls;
end;
procedure TwwRichEditForm.RichEdit1SelectionChange(Sender: TObject);
begin
if richedit1.visible then
RefreshControls;
end;
Procedure TwwRichEditForm.RefreshControls;
var haveSelection, haveText: boolean;
begin
BoldButton.down:= fsBold in richedit1.SelAttributes.Style;
UnderlineButton.down:= fsUnderline in richedit1.SelAttributes.Style;
ItalicButton.down:= fsItalic in richedit1.SelAttributes.Style;
FontNameCombo.itemIndex:= FontNameCombo.items.indexOf(RichEdit1.SelAttributes.Name);
if FontNameCombo.itemIndex<0 then begin
FontNameCombo.text:= RichEdit1.SelAttributes.Name;
FontNameCombo.font.color:=clRed;
end
else FontNameCombo.font.color:=clWindowText;
FontSizeCombo.itemIndex:= FontSizeCombo.items.indexOf(inttostr(RichEdit1.SelAttributes.Size));
//9/5/2001- If no font size in dropdown still set text to current size. Just like wordpad.
if FontSizeCombo.itemindex = -1 then
FontSizeCombo.Text :=inttostr(RichEdit1.SelAttributes.Size);
BulletButton.down:= richedit1.Paragraph.Numbering = nsBullet;
//10/02/2001 - More accurate way of determining if background color is highlighted.
HighlightButton.Down:= (ColorToRGB(richedit1.GetTextBackgroundColor)=ColorToRGB(RichEdit1.HighlightColor));
// HighlightButton.Down:= (richedit1.GetTextBackgroundColor<>0) and
// (richedit1.GetTextBackgroundColor<>ColorToRGB(clWindow));
BulletStyle1.checked:= BulletButton.down;
if ord(richedit1.Paragraph.Alignment) = PFA_FULLJUSTIFY-1 then
JustifyButton.Down:= True
else begin
case richedit1.Paragraph.Alignment of
taLeftJustify: LeftButton.Down:= True;
taCenter: CenterButton.Down:= True;
taRightJustify: RightButton.Down:= True;
end;
end;
Paste1.enabled:= RichEdit1.CanPaste and (not RichEdit1.readonly);
PasteButton.enabled:= Paste1.enabled and (not RichEdit1.readonly);
Undo1.enabled:= RichEdit1.CanUndo;
Redo1.enabled:= RichEdit1.CanRedo;
UndoButton.enabled:= Undo1.enabled;
RedoButton.enabled:= Redo1.enabled;
haveSelection:= RichEdit1.CanCut;
// haveText:= RichEdit1.text<>''; { This line was very slow for larger buffers }
haveText:= (RichEdit1.Lines.Count>1) or
(RichEdit1.Lines.Count=1) and (RichEdit1.Lines[0]<>'');
Cut1.enabled:= haveSelection and (not RichEdit1.readonly);
CutButton.enabled:= haveSelection and (not RichEdit1.readonly);
Copy1.enabled:= haveSelection;
CopyButton.enabled:= haveSelection;
Clear1.enabled:= haveSelection and (not RichEdit1.readOnly);
SelectAll1.enabled:= haveText;
Find1.enabled:= haveText;
FindButton.enabled:= haveText;
FindNext1.enabled:= RichEdit1.CanFindNext;
Replace1.enabled:= haveText and (not RichEdit1.readOnly);
TwwRulerPanel(RulerPanel).UpdateDragIcons;
end;
procedure TwwRichEditForm.Undo1Click(Sender: TObject);
begin
SendMessage(RichEdit1.Handle, EM_UNDO, 0, 0);
RefreshControls;
{ SendMessage(RichEdit1.Handle, EM_SETOPTIONS,
ECOOP_XOR, ECO_AUTOWORDSELECTION);}
end;
procedure TwwRichEditForm.Cut1Click(Sender: TObject);
begin
Richedit1.CutToClipboard;
end;
procedure TwwRichEditForm.Copy1Click(Sender: TObject);
begin
Richedit1.CopyToClipboard;
end;
procedure TwwRichEditForm.Paste1Click(Sender: TObject);
begin
Richedit1.PasteFromClipboard;
end;
procedure TwwRichEditForm.SelectAll1Click(Sender: TObject);
begin
Richedit1.SelectAll;
end;
procedure TwwRichEditForm.Clear1Click(Sender: TObject);
begin
Richedit1.ClearSelection;
end;
procedure TwwRichEditForm.Find1Click(Sender: TObject);
begin
richedit1.ExecuteFindDialog;
end;
procedure TwwRichEditForm.FindNext1Click(Sender: TObject);
begin
RichEdit1.FindNextMatch;
end;
procedure TwwRichEditForm.Replace1Click(Sender: TObject);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -