⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wwricheditbar.pas

📁 胜天进销存源码,国产优秀的进销存
💻 PAS
📖 第 1 页 / 共 3 页
字号:
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 + -