📄 wwricheditbar.pas
字号:
unit wwricheditbar;
{
//
// Components : TwwRichEditBar
//
// Copyright (c) 2007 by Woll2Woll Software
}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, StdCtrls, ComCtrls, wwriched, Mask, wwdbedit,
Wwdotdot, Wwdbcomb, ToolWin, ExtCtrls, wwtrackicon, printers,
RichEdit, wwintl;
type
TwwRichEditBarOption=(rebShowLoad, rebShowSaveAs, rebShowPrint, rebShowPrintPreview,
rebShowPageSetup,
rebShowFormatBar, rebShowToolBar,
rebShowHints, rebShowRuler, rebShowInsertObject,
rebFlatButtons, rebShowSpellCheck,
rebShowJustifyButton);
TwwRichEditBarOptions=Set of TwwRichEditbAROption;
TwwRichBarFrame = class(TFrame)
RichEditBar: TPanel;
FormatBarBevel: TBevel;
RulerBevel: TBevel;
FormatBar: TToolBar;
FontNameCombo: TwwDBComboBox;
FontSizeCombo: TwwDBComboBox;
BoldButton: TToolButton;
ItalicButton: TToolButton;
UnderlineButton: TToolButton;
ColorButton: TToolButton;
ToolButton3: TToolButton;
LeftButton: TToolButton;
CenterButton: TToolButton;
RightButton: TToolButton;
JustifyButton: TToolButton;
ToolButton1: TToolButton;
BulletButton: TToolButton;
HighlightButton: TToolButton;
Toolbar: TToolBar;
NewButton: TToolButton;
LoadButton: TToolButton;
SaveAsButton: TToolButton;
PrintButton: TToolButton;
ToolButton5: TToolButton;
FindButton: TToolButton;
SpellButton: TToolButton;
ToolButton7: TToolButton;
CutButton: TToolButton;
CopyButton: TToolButton;
PasteButton: TToolButton;
ToolButton6: TToolButton;
UndoButton: TToolButton;
RedoButton: TToolButton;
ToolButton8: TToolButton;
RichEditButtonIcons: TImageList;
PrintDialog1: TPrintDialog;
SaveDialog1: TSaveDialog;
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;
OpenDialog1: TOpenDialog;
PrintPreviewButton: TToolButton;
ToolButton4: TToolButton;
procedure FontNameComboCloseUp(Sender: TwwDBComboBox; Select: Boolean);
procedure FontSizeComboCloseUp(Sender: TwwDBComboBox; Select: Boolean);
procedure FindButtonClick(Sender: TObject);
procedure CutButtonClick(Sender: TObject);
procedure CopyButtonClick(Sender: TObject);
procedure ColorButtonClick(Sender: TObject);
procedure CenterButtonClick(Sender: TObject);
procedure BulletButtonClick(Sender: TObject);
procedure BoldButtonMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure BoldButtonClick(Sender: TObject);
procedure LeftButtonClick(Sender: TObject);
procedure RightButtonClick(Sender: TObject);
procedure JustifyButtonClick(Sender: TObject);
procedure ItalicButtonClick(Sender: TObject);
procedure UnderlineButtonClick(Sender: TObject);
procedure RedoButtonClick(Sender: TObject);
procedure UndoButtonClick(Sender: TObject);
procedure PasteButtonClick(Sender: TObject);
procedure SpellButtonClick(Sender: TObject);
procedure PrintButtonClick(Sender: TObject);
procedure SaveAsButtonClick(Sender: TObject);
procedure LoadButtonClick(Sender: TObject);
procedure NewButtonClick(Sender: TObject);
procedure HighlightButtonClick(Sender: TObject);
procedure PrintPreviewButtonClick(Sender: TObject);
procedure RichEditBarEnter(Sender: TObject);
private
{ Private declarations }
FCanvas: TCanvas;
tempDown: boolean;
RichEdit1: TwwDBRichEdit;
procedure InitColorMenu;
procedure ColorClick(Sender: TObject);
Procedure SetRichEditFontName(Value: string); { Bypass VCL bug as it doesn't set the CharSet}
public
wwRulerPanel : TwwRulerPanel;
procedure ResizeBar; virtual;
destructor Destroy; override;
procedure RefreshControls;
procedure Initialize;
end;
TwwRichEditBar = class (TPanel)
private
FCanvas: TCanvas;
RichEdit1: TwwDBRichEdit;
FOptions: TwwRichEditBarOptions;
procedure WMMeasureItem(var Message: TWMMeasureItem); message WM_MEASUREITEM;
procedure WMDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
function GetRichEdit: TwwDBRichEdit;
procedure SetRichEdit(value: TwwDBRichEdit);
procedure SetOptions(val: TwwRichEditBarOptions);
// function GetToolBar: TToolBar;
procedure CreateComponent(Reader: TReader;
ComponentClass: TComponentClass; var Component: TComponent);
procedure RichEditSelectionChange(Sender: TObject);
protected
// procedure WriteComponents(Writer: TWriter); override;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure ReadState(Reader: TReader); override;
procedure SetParent(AParent: TWinControl); override;
procedure Loaded; override;
procedure RichEditBarFrameNeeded;
procedure ApplyIntl; virtual;
public
RichEditBarFrame: TwwRichBarFrame;
constructor Create(AOwner: TComponent); override;
procedure CreateWnd; override;
procedure DestroyHandle; override;
destructor Destroy; override;
procedure Resize; override;
procedure UpdateControlPositions;
// property ToolBar: TToolBar read GetToolBar;
published
property RichEdit: TwwDBRichEdit read GetRichEdit;// stored false;// write SetRichEdit;
property Options: TwwRichEditBarOptions read FOptions write SetOptions default
[rebShowLoad, rebShowSaveAs, rebShowPrint, rebShowPrintPreview,
rebShowPageSetup,
rebShowFormatBar, rebShowToolBar,
rebShowHints, rebShowRuler, rebShowInsertObject,
rebFlatButtons, rebShowJustifyButton];
end;
implementation
{$R *.dfm}
const ColorBoxWidth = 40;
function TwwRichEditBar.GetRichEdit: TwwDBRichEdit;
begin
result:= RichEdit1;
end;
//function TwwRichEditBar.GetToolBar: TToolBar;
//begin
// result:= RichEditBarFrame.Toolbar;
//end;
procedure TwwRichEditBar.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
inherited;
if RichEdit<>nil then begin
Proc(RichEdit);
end;
end;
procedure TwwRichEditBar.SetRichEdit(value: TwwDBRichEdit);
begin
// RichEditBarFrame.RichEdit1:= value;
end;
procedure TwwRichEditBar.SetParent(AParent: TWinControl);
begin
// if csLoading in ComponentState then
// exit;
inherited SetParent(AParent);
end;
procedure TwwRichEditBar.Loaded;
begin
inherited Loaded;
if csDesigning in ComponentState then exit;
RichEditBarFrameNeeded;
// RichEditBarFrame.ResizeBar;
UpdateControlPositions;
RichEdit1.Visible:=true;
RichEditBarFrame.RefreshControls;
if RichEdit1.EffectiveEditWidth = rewPrinterSize then // editwidth streamed in after createwnd
begin
RichEditBarFrame.wwRulerPanel.UpdateSize(RichEdit1);
RichEditBarFrame.wwRulerPanel.UpdateDragIcons;
RichEditBarFrame.wwRulerPanel.UpdateRulerProp(RichEditBarFrame.wwRulerPanel.RightDragButton);
end;
end;
{
procedure TRichBarFrame.CreateWnd;
begin
inherited CreateWnd;
Initialize;
end;
}
procedure TwwRichEditBar.ReadState(Reader: TReader);
begin
Classes.RegisterClass(TwwDBRichEdit); // necessary or TwwDBRichEdit class not recognized
Reader.OnCreateComponent := CreateComponent;
inherited;
Reader.OnCreateComponent := Nil;
end;
procedure TwwRichEditBar.CreateComponent(Reader: TReader;
ComponentClass: TComponentClass; var Component: TComponent);
begin
// Do not create new instances of the subcomponents
// but use the ones created by the constructor.
if (ComponentClass = TwwDBRichEdit) then
begin
Component := RichEdit1;
end;
end;
constructor TwwRichEditBar.Create(AOwner: TComponent);
begin
RichEditBarFrame:=nil;
inherited Create(AOwner);
FCanvas:= TCanvas.create;
RichEdit1 := TwwDBRichEdit.Create(Self);
RichEdit1.HideScrollBars:=false;
RichEdit1.HideSelection:= false;
Richedit1.ScrollBars:= ssVertical;
// RichEdit1.Parent := Self;
RichEdit1.SetSubComponent(True);
RichEdit1.Name:= 'RichEdit';
RichEdit1.ParentFont:= false;
// RichEdit1.TabOrder:=0;
FOptions:=
[rebShowLoad, rebShowSaveAs, rebShowPrint, rebShowPrintPreview,
rebShowPageSetup,
rebShowFormatBar, rebShowToolBar,
rebShowHints, rebShowRuler, rebShowInsertObject,
rebFlatButtons, rebShowJustifyButton];
//FPanel.Name := 'FilterPanel';
if csDesigning in ComponentState then
ControlStyle:= ControlStyle - [csAcceptsControls]; // Don't allow controls to be dropped in at design time
end;
destructor TwwRichEditBar.Destroy;
begin
if RichEditBarFrame<>nil then
begin
RichEditBarFrame.Free;
RichEditBarFrame:=nil;
end;
inherited Destroy;
FCanvas.Free;
end;
destructor TwwRichBarFrame.Destroy;
begin
inherited Destroy;
FCanvas.Free;
// RichEdit.Free;
end;
procedure TwwRichEditBar.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notification(AComponent, Operation);
if (Operation = opRemove) then
begin
// if (RichEdit=AComponent) then
// SetRichEdit(nil);
end;
end;
procedure TwwRichBarFrame.ResizeBar;
//var
// frameoffset: integer;
// RichEditTop, RichEditHeight, RulerPanelTop: integer;
begin
// Vista support
//frameOffset:=GetSystemMetrics(sm_cxframe) * 2;
//wwRulerPanel.Top:= FormatBar.Top + FormatBar.height;
if (richedit1.EffectiveEditWidth <> rewPrinterSize) then
begin
wwRulerPanel.Width:= RichEditBar.Width;// - frameOffset;
TwwRulerPanel(wwRulerPanel).RulerRect:= Rect(6, 4, wwRulerPanel.Width-6, wwRulerPanel.Height-4);
end;
TwwRulerPanel(wwRulerPanel).RightDragButton.MaxValue:=
TwwRulerPanel(wwRulerPanel).RulerRect.Right-(TwwRulerPanel(wwRulerPanel).RightDragButton.Width div 2);
TwwRulerPanel(wwRulerPanel).UpdateDragIcons;
RichEdit1.top:= wwRulerpanel.Top + wwRulerPanel.Height + 2;
RichEdit1.Height:= RichEditBar.Height - RichEdit1.Top - 2;
RichEdit1.Left:= 4;
RichEdit1.Width:= RichEditBar.Width - 8;
//! Refer to options here
end;
procedure TwwRichEditBar.ApplyIntl;
begin
with wwInternational.RichEdit, RichEditBarFrame do begin
if (reoShowHints in richedit1.EditorOptions) then begin
FontNameCombo.ShowHint := True;
FontSizeCombo.ShowHint := True;
NewButton.ShowHint := True;
LoadButton.ShowHint := True;
SaveAsButton.ShowHint := True;
PrintButton.ShowHint := True;
PrintPreviewButton.ShowHint := True;
FindButton.ShowHint := True;
CutButton.ShowHint := True;
CopyButton.ShowHint := True;
UndoButton.ShowHint := True;
RedoButton.ShowHint := True;
PasteButton.ShowHint := True;
BoldButton.ShowHint := True;
UnderlineButton.ShowHint := True;
ColorButton.ShowHint := True;
ItalicButton.ShowHint := True;
LeftButton.ShowHint := True;
CenterButton.ShowHint := True;
RightButton.ShowHint := True;
JustifyButton.ShowHint := True;
BulletButton.ShowHint := True;
HighlightButton.ShowHint:= True;
SpellButton.ShowHint:= True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -