📄 editormainformu.pas
字号:
if FUpdating then
Exit;
CurrText.Disabled := not CurrText.Disabled;
DisabledItem.Checked := CurrText.Disabled;
end;
procedure TEditorMainForm.DrawLine;
var
P: TPoint;
begin
FLineVisible := not FLineVisible;
P := Point(0, 0);
Inc(P.X, FLineOfs);
with P, Editor do
begin
MoveToEx(FLineDC, X, Y, nil);
LineTo(FLineDC, X, Y + ClientHeight);
end;
end;
procedure TEditorMainForm.EditCopy(Sender: TObject);
begin
Editor.CopyToClipboard;
end;
procedure TEditorMainForm.EditCut(Sender: TObject);
begin
Editor.CutToClipboard;
end;
procedure TEditorMainForm.EditFindClick(Sender: TObject);
begin
with Editor do
FindDialog(SelText);
end;
procedure TEditorMainForm.EditFindDialogClose(Sender: TObject; Dialog: TFindDialog);
begin
FocusEditor;
end;
procedure TEditorMainForm.EditFindNextItemClick(Sender: TObject);
begin
if not Editor.FindNext then
Beep;
FocusEditor;
end;
procedure TEditorMainForm.EditObjPropsItemClick(Sender: TObject);
begin
Editor.ObjectPropertiesDialog;
end;
procedure TEditorMainForm.EditorProtectChange(Sender: TObject; StartPos,
EndPos: Integer; var AllowChange: Boolean);
begin
AllowChange := FProtectChanging;
end;
procedure TEditorMainForm.EditorTextNotFound(Sender: TObject;
const FindText: string);
begin
MessageDlg(Format('Text "%s" not found.', [FindText]), mtWarning, [mbOK], 0);
end;
procedure TEditorMainForm.EditorURLClick(Sender: TObject; const URLText: string;
Button: TMouseButton);
begin
if Button = mbLeft then
ShellExecute(Handle, nil, PChar(URLText), nil, nil, SW_SHOW);
end;
procedure TEditorMainForm.EditPaste(Sender: TObject);
begin
Editor.PasteFromClipboard;
end;
procedure TEditorMainForm.EditPasteSpecialClick(Sender: TObject);
begin
try
Editor.PasteSpecialDialog;
finally
FocusEditor;
end;
end;
procedure TEditorMainForm.EditPopupMenuGetImageIndex(Sender: TMenu;
Item: TMenuItem; State: TMenuOwnerDrawState; var ImageIndex: Integer);
begin
if (Item = CutItm) or (Item = CopyItm) or (Item = PasteItm) then
ImageIndex := Item.Tag;
end;
procedure TEditorMainForm.EditRedo(Sender: TObject);
begin
Editor.Redo;
RichEditChange(nil);
SelectionChange(nil);
end;
procedure TEditorMainForm.EditReplaceClick(Sender: TObject);
begin
with Editor do
ReplaceDialog(SelText, '');
end;
procedure TEditorMainForm.EditSelectAll(Sender: TObject);
begin
Editor.SelectAll;
end;
procedure TEditorMainForm.EditUndo(Sender: TObject);
begin
Editor.Undo;
RichEditChange(nil);
SelectionChange(nil);
end;
procedure TEditorMainForm.FileExit(Sender: TObject);
begin
Close;
end;
procedure TEditorMainForm.FileNew(Sender: TObject);
begin
CheckFileSave;
SetFileName('Untitled');
FProtectChanging := True;
try
Editor.Lines.Clear;
Editor.Modified := False;
Editor.ReadOnly := False;
SetModified(False);
with Editor do
begin
DefAttributes.Assign(Font);
SelAttributes.Assign(Font);
end;
SelectionChange(nil);
finally
FProtectChanging := False;
end;
end;
procedure TEditorMainForm.FileOpen(Sender: TObject);
begin
CheckFileSave;
if OpenDialog.Execute then
begin
Editor.Refresh;
PerformFileOpen(OpenDialog.FileName);
Editor.ReadOnly := ofReadOnly in OpenDialog.Options;
end;
end;
procedure TEditorMainForm.FilePrint(Sender: TObject);
begin
if PrintDialog.Execute then
Editor.Print(FFileName);
end;
procedure TEditorMainForm.FileSave(Sender: TObject);
begin
if FFileName = 'Untitled' then
FileSaveAs(Sender)
else
begin
Editor.Lines.SaveToFile(FFileName);
Editor.Modified := False;
SetModified(False);
RichEditChange(nil);
end;
end;
procedure TEditorMainForm.FileSaveAs(Sender: TObject);
begin
if SaveDialog.Execute then
begin
Editor.Lines.SaveToFile(SaveDialog.FileName);
SetFileName(SaveDialog.FileName);
Editor.Modified := False;
SetModified(False);
RichEditChange(nil);
end;
FocusEditor;
end;
procedure TEditorMainForm.FileSaveSelected(Sender: TObject);
begin
if SaveDialog.Execute then
begin
with Editor do
try
StreamMode := [smSelection];
Lines.SaveToFile(SaveDialog.FileName);
finally
StreamMode := [];
end;
RichEditChange(nil);
end;
FocusEditor;
end;
procedure TEditorMainForm.FirstIndMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FDragging := False;
Editor.Paragraph.FirstIndent := Max(0, RulerToIndent(FirstInd.Left + FDragOfs,
False));
LeftIndMouseUp(Sender, Button, Shift, X, Y);
end;
procedure TEditorMainForm.FocusEditor;
begin
with Editor do
if CanFocus then
SetFocus;
end;
procedure TEditorMainForm.FontNameChange(Sender: TObject);
begin
if FUpdating then
Exit;
CurrText.Name := FontName.FontName;
end;
procedure TEditorMainForm.FontSizeChange(Sender: TObject);
begin
if FUpdating then
Exit;
if FontSize.AsInteger > 0 then
CurrText.Size := FontSize.AsInteger;
end;
procedure TEditorMainForm.FormActivate(Sender: TObject);
begin
FocusEditor;
end;
procedure TEditorMainForm.FormatParaAttributes(Sender: TObject);
begin
FormatParagraph(Editor.Paragraph);
FocusEditor;
end;
procedure TEditorMainForm.FormatParaTabs(Sender: TObject);
begin
FormatTabs(Editor.Paragraph);
FocusEditor;
end;
procedure TEditorMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
try
CheckFileSave;
except
CanClose := False;
end;
end;
procedure TEditorMainForm.FormCreate(Sender: TObject);
var
I: Integer;
Item: TMenuItem;
const
SPictureFilter = '%s|%s|%s|%s';
begin
// The TComponent destructor should handle the destruction of the
// painters because we indicate the form (self) as the owner of
// the objects. But we are extra careful and destroy them ourselves
// in FormDestroy anyway.
ColorMenu.ItemPainter := TJvXPColorMenuItemPainter.Create(Self);
BackgroundMenu.ItemPainter := TJvXPColorMenuItemPainter.Create(Self);
Editor.RegisterMSTextConverters;
OpenDialog.InitialDir := ExtractFilePath(ParamStr(0));
OpenDialog.Filter := Editor.Filter(ckImport);
SaveDialog.InitialDir := OpenDialog.InitialDir;
SaveDialog.Filter := Editor.Filter(ckExport);
SetFileName('Untitled');
SetupRuler;
HandleNeeded;
SelectionChange(Self);
Editor.OnCloseFindDialog := EditFindDialogClose;
FOpenPictureDialog := TOpenPictureDialog.Create(Self);
with FOpenPictureDialog do
Filter := Format(SPictureFilter, [
GraphicFilter(TBitmap),
GraphicFilter(TMetafile),
GraphicFilter(TJPEGImage),
GraphicFilter(TJvGIFImage)
]);
with ColorMenu.Items do
begin
while Count > 0 do
Items[Count - 1].Free;
for I := 0 to 16 do
begin
Item := NewItem(ColorName(ColorValues[I]), scNone,
False, True, ColorItemClick, 0, '');
Item.RadioItem := True;
Item.Tag := ColorValues[I];
Add(Item);
end;
end;
with BackgroundMenu.Items do
begin
while Count > 0 do
Items[Count - 1].Free;
for I := 0 to 16 do
begin
Item := NewItem(ColorName(BackValues[I]), scNone,
False, True, BackgroundItemClick, 0, '');
Item.RadioItem := True;
Item.Tag := BackValues[I];
Add(Item);
end;
end;
FClipboardMonitor := TJvClipboardMonitor.Create(Self);
FClipboardMonitor.OnChange := ClipboardChanged;
SuperscriptBtn.Enabled := RichEditVersion >= 2;
SubscriptBtn.Enabled := RichEditVersion >= 2;
BackgroundBtn.Enabled := RichEditVersion >= 2;
DisabledItem.Enabled := RichEditVersion >= 2;
HiddenItem.Enabled := RichEditVersion >= 2;
JustifyBtn.Enabled := RichEditVersion >= 3;
end;
procedure TEditorMainForm.FormDestroy(Sender: TObject);
begin
ColorMenu.ItemPainter.Free;
ColorMenu.ItemPainter := nil;
BackgroundMenu.ItemPainter.Free;
BackgroundMenu.ItemPainter := nil;
{ remove ourselves from the viewer chain }
FClipboardMonitor.Free;
end;
procedure TEditorMainForm.FormPaint(Sender: TObject);
begin
SetEditRect;
end;
procedure TEditorMainForm.FormResize(Sender: TObject);
begin
SetEditRect;
SelectionChange(Sender);
end;
procedure TEditorMainForm.FormShow(Sender: TObject);
var
Res: TResourceStream;
begin
UpdateCursorPos;
DragAcceptFiles(Handle, True);
RichEditChange(nil);
FocusEditor;
ClipboardChanged(nil);
{ check if we should load a file from the command line }
if (ParamCount > 0) and FileExists(ParamStr(1)) then
PerformFileOpen(ParamStr(1))
else
begin
StartWait;
try
Res := TResourceStream.Create(HInstance, 'OVERVIEWRTF', 'RTF');
try
Editor.Lines.LoadFromStream(Res);
SetFileName('Untitled');
Editor.Modified := False;
SetModified(False);
finally
Res.Free;
end;
except
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -