📄 editormainformu.pas
字号:
{******************************************************************
JEDI-VCL Demo
Copyright (C) 2002 Project JEDI
Original author:
Contributor(s):
You may retrieve the latest version of this file at the JEDI-JVCL
home page, located at http://jvcl.sourceforge.net
The contents of this file are used with permission, subject to
the Mozilla Public License Version 1.1 (the "License"); you may
not use this file except in compliance with the License. You may
obtain a copy of the License at
http://www.mozilla.org/MPL/MPL-1_1Final.html
Software distributed under the License is distributed on an
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the License for the specific language governing
rights and limitations under the License.
******************************************************************}
unit EditorMainFormU;
interface
uses
Windows, Messages, Forms, StdCtrls, Dialogs, Mask,
ImgList, Controls, Menus, JvMenus, ComCtrls, ExtCtrls, Classes,
JvComponent, JvAppEvent, JvMaskEdit, JvSpin, JvCombobox, JvColorCombo,
JvSpeedBar, JvRichEdit, JvClipboardMonitor, JvExMask, JvExStdCtrls,
JvExExtCtrls, XPColorMenuItemPainter;
type
TEditorMainForm = class(TForm)
MainMenu: TJvMainMenu;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
FilePrintItem: TMenuItem;
FileExitItem: TMenuItem;
EditUndoItem: TMenuItem;
EditCutItem: TMenuItem;
EditCopyItem: TMenuItem;
EditPasteItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
PrintDialog: TPrintDialog;
Ruler: TPanel;
FontDialog: TFontDialog;
FirstInd: TLabel;
LeftInd: TLabel;
RulerLine: TBevel;
RightInd: TLabel;
Editor: TJvRichEdit;
StatusBar: TStatusBar;
ToolbarImages: TImageList;
InsertMenu: TMenuItem;
InsertImageItem: TMenuItem;
InsertObjectItem: TMenuItem;
EditRedoItem: TMenuItem;
FormatMenu: TMenuItem;
FormatFontItem: TMenuItem;
FormatParagraphItem: TMenuItem;
N3: TMenuItem;
EditFindItem: TMenuItem;
EditReplaceItem: TMenuItem;
ColorMenu: TJvPopupMenu;
EditPasteSpecial: TMenuItem;
SpeedBar: TJvSpeedBar;
FormatBar: TJvSpeedBar;
SpeedbarSection1: TJvSpeedBarSection;
SpeedbarSection2: TJvSpeedBarSection;
NewBtn: TJvSpeedItem;
OpenBtn: TJvSpeedItem;
SaveBtn: TJvSpeedItem;
PrintBtn: TJvSpeedItem;
CutBtn: TJvSpeedItem;
CopyBtn: TJvSpeedItem;
PasteBtn: TJvSpeedItem;
UndoBtn: TJvSpeedItem;
RedoBtn: TJvSpeedItem;
FindBtn: TJvSpeedItem;
FontName: TJvFontComboBox;
FontSize: TJvSpinEdit;
SpeedbarSection3: TJvSpeedBarSection;
BoldBtn: TJvSpeedItem;
ItalicBtn: TJvSpeedItem;
UnderlineBtn: TJvSpeedItem;
ColorBtn: TJvSpeedItem;
LeftBtn: TJvSpeedItem;
CenterBtn: TJvSpeedItem;
RightBtn: TJvSpeedItem;
SubscriptBtn: TJvSpeedItem;
SuperscriptBtn: TJvSpeedItem;
BulletsBtn: TJvSpeedItem;
N5: TMenuItem;
EditObjPropsItem: TMenuItem;
EditPopupMenu: TJvPopupMenu;
CutItm: TMenuItem;
CopyItm: TMenuItem;
PasteItm: TMenuItem;
BackgroundBtn: TJvSpeedItem;
BackgroundMenu: TJvPopupMenu;
N6: TMenuItem;
ProtectedItem: TMenuItem;
DisabledItem: TMenuItem;
HiddenItem: TMenuItem;
EditFindNextItem: TMenuItem;
EditSelectAllItem: TMenuItem;
FileSaveSelItem: TMenuItem;
App: TJvAppEvents;
FormatTabsItem: TMenuItem;
JustifyBtn: TJvSpeedItem;
procedure SelectionChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ShowHint(Sender: TObject);
procedure FileNew(Sender: TObject);
procedure FileOpen(Sender: TObject);
procedure FileSave(Sender: TObject);
procedure FileSaveAs(Sender: TObject);
procedure FilePrint(Sender: TObject);
procedure FileExit(Sender: TObject);
procedure EditUndo(Sender: TObject);
procedure EditCut(Sender: TObject);
procedure EditCopy(Sender: TObject);
procedure EditPaste(Sender: TObject);
procedure HelpAbout(Sender: TObject);
procedure SelectFont(Sender: TObject);
procedure RulerResize(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure BoldButtonClick(Sender: TObject);
procedure ItalicButtonClick(Sender: TObject);
procedure FontSizeChange(Sender: TObject);
procedure AlignButtonClick(Sender: TObject);
procedure FontNameChange(Sender: TObject);
procedure UnderlineButtonClick(Sender: TObject);
procedure BulletsButtonClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RulerItemMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RulerItemMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FirstIndMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure LeftIndMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RightIndMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
procedure RichEditChange(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure InsertObject(Sender: TObject);
procedure EditRedo(Sender: TObject);
procedure InsertBitmap(Sender: TObject);
procedure FormatParaAttributes(Sender: TObject);
procedure EditorURLClick(Sender: TObject; const URLText: string;
Button: TMouseButton);
procedure FormActivate(Sender: TObject);
procedure EditFindClick(Sender: TObject);
procedure EditReplaceClick(Sender: TObject);
procedure MainMenuGetImageIndex(Sender: TMenu; Item: TMenuItem;
State: TMenuOwnerDrawState; var ImageIndex: Integer);
procedure ColorMenuPopup(Sender: TObject);
procedure SubscriptClick(Sender: TObject);
procedure EditPasteSpecialClick(Sender: TObject);
procedure EditObjPropsItemClick(Sender: TObject);
procedure EditPopupMenuGetImageIndex(Sender: TMenu; Item: TMenuItem;
State: TMenuOwnerDrawState; var ImageIndex: Integer);
procedure BackgroundMenuPopup(Sender: TObject);
procedure ProtectedItemClick(Sender: TObject);
procedure DisabledItemClick(Sender: TObject);
procedure EditorProtectChange(Sender: TObject; StartPos,
EndPos: Integer; var AllowChange: Boolean);
procedure HiddenItemClick(Sender: TObject);
procedure EditFindNextItemClick(Sender: TObject);
procedure EditorTextNotFound(Sender: TObject; const FindText: string);
procedure EditSelectAll(Sender: TObject);
procedure FileSaveSelected(Sender: TObject);
procedure FormatParaTabs(Sender: TObject);
private
FFileName: string;
FUpdating: Boolean;
FDragOfs: Integer;
FLineOfs: Integer;
FLineDC: HDC;
FLinePen: HPen;
FLineVisible: Boolean;
FDragging: Boolean;
FProtectChanging: Boolean;
FClipboardMonitor: TJvClipboardMonitor;
FOpenPictureDialog: TOpenDialog;
function IndentToRuler(Indent: Integer; IsRight: Boolean): Integer;
function RulerToIndent(RulerPos: Integer; IsRight: Boolean): Integer;
procedure DrawLine;
procedure CalcLineOffset(Control: TControl);
function CurrText: TJvTextAttributes;
procedure SetFileName(const FileName: string);
procedure EditFindDialogClose(Sender: TObject; Dialog: TFindDialog);
procedure ColorItemClick(Sender: TObject);
procedure BackgroundItemClick(Sender: TObject);
procedure CheckFileSave;
procedure SetupRuler;
procedure SetEditRect;
procedure UpdateCursorPos;
procedure FocusEditor;
procedure ClipboardChanged(Sender: TObject);
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
procedure PerformFileOpen(const AFileName: string);
procedure SetModified(Value: Boolean);
end;
var
EditorMainForm: TEditorMainForm;
implementation
uses
Graphics, SysUtils, Math, ShellAPI, ClipBrd, ExtDlgs, Jpeg,
JvGIF, JvWinDialogs, JvJVCLUtils,
ParagraphFormatFormU, TabsFormU;
{$R *.DFM}
const
RulerAdj = 4 / 3;
GutterWid: Integer = 6;
UndoNames: array[TUndoName] of string =
('', 'typing', 'delete', 'drag and drop', 'cut', 'paste');
ColorValues: array[0..16] of TColor = (
clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray,
clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite,
clWindowText);
BackValues: array[0..16] of TColor = (
clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray,
clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite,
clWindow);
function ColorName(Color: TColor): string;
begin
if (Color = clWindowText) or (Color = clWindow) or (Color = clDefault) then
Result := 'Automatic'
else
begin
Result := ColorToString(Color);
if Pos('cl', Result) = 1 then
Delete(Result, 1, 2);
end;
end;
//=== TEditorMainForm ========================================================
procedure TEditorMainForm.AlignButtonClick(Sender: TObject);
begin
if FUpdating then
Exit;
Editor.Paragraph.Alignment := TParaAlignment(TComponent(Sender).Tag);
end;
procedure TEditorMainForm.BackgroundItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := True;
CurrText.BackColor := Tag;
end;
end;
procedure TEditorMainForm.BackgroundMenuPopup(Sender: TObject);
var
I: Integer;
C: TColor;
begin
C := CurrText.BackColor;
for I := 0 to 16 do
BackgroundMenu.Items[I].Checked := (C = BackValues[I]);
end;
procedure TEditorMainForm.BoldButtonClick(Sender: TObject);
begin
if FUpdating then
Exit;
if BoldBtn.Down then
CurrText.Style := CurrText.Style + [fsBold]
else
CurrText.Style := CurrText.Style - [fsBold];
end;
procedure TEditorMainForm.BulletsButtonClick(Sender: TObject);
begin
if FUpdating then
Exit;
Editor.Paragraph.Numbering := TJvNumbering(BulletsBtn.Down);
end;
procedure TEditorMainForm.CalcLineOffset(Control: TControl);
var
P: TPoint;
begin
with Control do
P := ClientToScreen(Point(0, 0));
P := Editor.ScreenToClient(P);
FLineOfs := P.X + FDragOfs;
end;
procedure TEditorMainForm.CheckFileSave;
var
SaveResp: Integer;
begin
if not Editor.Modified then
Exit;
SaveResp := MessageDlg(Format('Save changes to %s?', [FFileName]),
mtConfirmation, mbYesNoCancel, 0);
try
case SaveResp of
mrYes: FileSave(Self);
mrNo: {Nothing};
mrCancel: Abort;
end;
finally
FocusEditor;
end;
end;
procedure TEditorMainForm.ClipboardChanged(Sender: TObject);
var
E: Boolean;
begin
{ check to see if we can paste what's on the clipboard }
E := Editor.CanPaste;
PasteBtn.Enabled := E;
EditPasteItem.Enabled := E;
EditPasteSpecial.Enabled := E;
PasteItm.Enabled := E;
end;
procedure TEditorMainForm.ColorItemClick(Sender: TObject);
begin
with Sender as TMenuItem do
begin
Checked := True;
CurrText.Color := Tag;
end;
end;
procedure TEditorMainForm.ColorMenuPopup(Sender: TObject);
var
I: Integer;
C: TColor;
begin
C := CurrText.Color;
for I := 0 to 16 do
ColorMenu.Items[I].Checked := (C = ColorValues[I]);
end;
function TEditorMainForm.CurrText: TJvTextAttributes;
begin
if Editor.SelLength > 0 then
Result := Editor.SelAttributes
else
Result := Editor.WordAttributes;
end;
procedure TEditorMainForm.DisabledItemClick(Sender: TObject);
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -