📄 upadmain.pas
字号:
unit UPadMain;
interface
uses
Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, ActiveX,
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, OleDlg, OleErrors,
ActnList, ToolWin, ImgList, RichEdit, OleDlgs, OleCtnrs, OleConsts, OleHelpers,
StdActns;
type
TMainForm = class(TForm)
MainMenu: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileCloseItem: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
N1: TMenuItem;
FileExitItem: TMenuItem;
WindowCascadeItem: TMenuItem;
WindowTileItem: TMenuItem;
WindowArrangeItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenDialog: TOpenDialog;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
WindowMinimizeItem: TMenuItem;
StatusBar: TStatusBar;
ActionList: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
FileNew1: TAction;
FileSave1: TAction;
FileExit1: TAction;
FileOpen1: TAction;
FileSaveAs1: TAction;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowArrangeAll1: TWindowArrange;
WindowMinimizeAll1: TWindowMinimizeAll;
HelpAbout1: TAction;
FileClose1: TWindowClose;
WindowTileVertical1: TWindowTileVertical;
WindowTileItem2: TMenuItem;
ToolBar2: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton9: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ImageList: TImageList;
SaveDialog: TSaveDialog;
N2: TMenuItem;
FileRevert1: TAction;
Revert2: TMenuItem;
N3: TMenuItem;
EditUndo1: TAction;
EditPasteSpecial1: TAction;
EditDelete1: TAction;
EditSelectAll: TAction;
EditInsertObject: TAction;
EditInsertFromFile: TAction;
EditSaveSelection: TAction;
N4: TMenuItem;
EditUndo11: TMenuItem;
PasteSpecial1: TMenuItem;
Delete1: TMenuItem;
SelectAll1: TMenuItem;
N7: TMenuItem;
Object1: TMenuItem;
InsertObject1: TMenuItem;
N8: TMenuItem;
InsertFromFile1: TMenuItem;
SaveSelectionAs1: TMenuItem;
OleInsertObjectDialog: TOleInsertObjectDialog;
OleObjectPropsDialog: TOleObjectPropsDialog;
ObjectSubMenu: TMenuItem;
ObjectProps: TAction;
ObjectIcon: TAction;
ChangeIcon1: TMenuItem;
OleEditLinksDialog: TOleEditLinksDialog;
OleUpdateLinksDialog: TOleUpdateLinksDialog;
OlePromptUserDialog: TOlePromptUserDialog;
OlePasteSpecialDialog: TOlePasteSpecialDialog;
OleChangeIconDialog: TOleChangeIconDialog;
OleChangeSourceDialog: TOleChangeSourceDialog;
OleConvertDialog: TOleConvertDialog;
ObjectSource: TAction;
Changesource1: TMenuItem;
FileLinks: TAction;
FileEditLinks: TAction;
Updatealllinks1: TMenuItem;
Editlinks1: TMenuItem;
ObjectEdit: TAction;
ObjectUpdate: TAction;
Editlink1: TMenuItem;
Updatelink1: TMenuItem;
ObjectConvert: TAction;
Convert1: TMenuItem;
N10: TMenuItem;
EditPaste1: TAction;
procedure FileOpen1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure FileSaveAs1Execute(Sender: TObject);
procedure FileNew1Execute(Sender: TObject);
procedure EditInsertFromFileExecute(Sender: TObject);
procedure FileClose1Execute(Sender: TObject);
procedure FileRevert1Execute(Sender: TObject);
procedure FileSave1Execute(Sender: TObject);
procedure EditSaveSelectionExecute(Sender: TObject);
procedure EditInsertObjectExecute(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure ObjectPropsExecute(Sender: TObject);
procedure EditPasteSpecial1Execute(Sender: TObject);
procedure ObjectIconExecute(Sender: TObject);
procedure ObjectSourceExecute(Sender: TObject);
procedure FileLinksExecute(Sender: TObject);
procedure FileEditLinksExecute(Sender: TObject);
procedure ObjectEditExecute(Sender: TObject);
procedure ObjectUpdateExecute(Sender: TObject);
procedure EditSelectAllExecute(Sender: TObject);
procedure EditUndo1Execute(Sender: TObject);
procedure EditCut1Execute(Sender: TObject);
procedure EditCopy1Execute(Sender: TObject);
procedure EditPaste1Execute(Sender: TObject);
procedure EditDelete1Execute(Sender: TObject);
procedure ObjectConvertExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure File1Click(Sender: TObject);
private
FNextHandle : THandle;
procedure ObjectVerbClick (Sender: TObject);
procedure WMDrawClipboard (var Msg : TWMDrawClipboard); message WM_DrawClipboard;
procedure WMChangeCBChain (var Msg : TWMChangeCBChain); message WM_ChangeCBChain;
procedure ShowHint (Sender : TObject);
procedure UpdateEnables;
public
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
uses
UPadChild, UPadAbout;
procedure TMainForm.FormCreate(Sender: TObject);
begin
FNextHandle := SetClipboardViewer (Handle);
Application.OnHint := ShowHint;
UpdateEnables
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
ChangeClipboardChain (Handle, FNextHandle)
end;
procedure TMainForm.UpdateEnables;
begin
File1Click (Self);
Edit1Click (Self)
end;
//=== File menu ================================================================
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
TUPadForm.Create (Application);
UpdateEnables
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
var
Child : TUPadForm;
begin
OpenDialog.Title := '';
if OpenDialog.Execute then
begin
Child := TUPadForm.Create (Application);
Child.OleRE.Open (OpenDialog.Filename, 0, false);
Child.OleRE.UpdateAllLinks
end;
UpdateEnables
end;
procedure TMainForm.FileRevert1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
begin
OleRE.Revert;
OleRE.UpdateAllLinks
end
end;
procedure TMainForm.FileSave1Execute(Sender: TObject);
var
Child : TUPadForm;
begin
Child := TUPadForm(ActiveMDIChild);
if Child.OleRE.Filename = '' then
FileSaveAs1.Execute
else
Child.OleRE.Save
end;
procedure TMainForm.FileSaveAs1Execute(Sender: TObject);
var
Child : TUPadForm;
begin
Child := TUPadForm(ActiveMDIChild);
SaveDialog.Title := '';
SaveDialog.Filename := Child.OleRE.Filename;
SaveDialog.FilterIndex := Child.OleRE.FilterIndex;
if SaveDialog.Execute then
Child.OleRE.SaveAs (SaveDialog.Filename, false)
end;
procedure TMainForm.FileClose1Execute(Sender: TObject);
begin
TUPadForm(ActiveMDIChild).Close;
UpdateEnables
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close
end;
procedure TMainForm.File1Click(Sender: TObject);
var
B : boolean;
begin
B := (MDIChildCount > 0) and Assigned (ActiveMDIChild);
FileRevert1.Enabled := B and TUPadForm(ActiveMDIChild).OleRE.CanRevert;
FileClose1.Enabled := B;
FileSave1.Enabled := B;
FileSaveAs1.Enabled := B;
FileLinks.Enabled := B and (TUPadForm(ActiveMDIChild).OleRE.Links > 0);
FileEditLinks.Enabled := FileLinks.Enabled
end;
//=== EDIT MENU ================================================================
procedure TMainForm.EditInsertObjectExecute(Sender: TObject);
begin
TUPadForm(ActiveMDIChild).OleRE.InsertObjectDialog
end;
procedure TMainForm.EditInsertFromFileExecute(Sender: TObject);
var
Child : TUPadForm;
begin
Child := TUPadForm(ActiveMDIChild);
OpenDialog.Title := 'Insert from file:';
if OpenDialog.Execute then
Child.OleRE.Open (OpenDialog.Filename, 0, true)
end;
procedure TMainForm.EditSaveSelectionExecute(Sender: TObject);
var
Child : TUPadForm;
begin
Child := TUPadForm(ActiveMDIChild);
SaveDialog.Title := 'Save selection as';
SaveDialog.Filename := Child.OleRE.Filename;
SaveDialog.FilterIndex := Child.OleRE.FilterIndex;
if SaveDialog.Execute then
Child.OleRE.SaveAs (SaveDialog.Filename, false)
end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal
end;
// Edit Menu Item clicked on so set up edit menu items
procedure TMainForm.Edit1Click(Sender: TObject);
const
ObjectFixEnd = 7;
var
Verbs : TStringList;
ObjectName : string;
Available : boolean;
Item : TMenuItem;
Loop : integer;
begin
EditUndo1.Enabled := false;
EditCut1.Enabled := false;
EditCopy1.Enabled := false;
EditPaste1.Enabled := false;
EditPasteSpecial1.Enabled := false;
EditDelete1.Enabled := false;
EditSelectAll.Enabled := false;
EditInsertObject.Enabled := false;
EditInsertFromFile.Enabled := false;
EditSaveSelection.Enabled := false;
Object1.Enabled := false;
ObjectProps.Enabled := false;
if MDIChildCount > 0 then
with TUPadForm (ActiveMDIChild) do
begin
// Set up Object sub-item stuff
Available := Assigned (OleRE.Selected);
if Available then
begin
ObjectName := OleRE.ShortName;
Verbs := OleRE.Verbs;
try
with Object1 do
while Count > ObjectFixEnd do
Delete (ObjectFixEnd);
if Verbs.Count > 0 then
begin
Item := TMenuItem.Create (Self);
Item.Caption := '-';
Object1.Add(Item);
for Loop := 0 to Verbs.Count - 1 do
begin
Item := TMenuItem.Create (Self);
Item.Caption := Verbs [Loop];
Item.Tag := Loop;
Item.OnClick := ObjectVerbClick;
Object1.Add(Item)
end
end
finally
Verbs.Free
end
end;
Object1.Enabled := Available;
ObjectProps.Enabled := Available;
if Available then
if OleRE.Linked then
Object1.Caption := 'Linked ' + ObjectName + ' &Object'
else
Object1.Caption := ObjectName + ' &Object'
else
Object1.Caption := '&Object';
ObjectIcon.Enabled := Available and OleRE.Iconic;
ObjectEdit.Enabled := Available and OleRE.Linked;
ObjectSource.Enabled := ObjectEdit.Enabled;
ObjectUpdate.Enabled := ObjectEdit.Enabled;
ObjectConvert.Enabled := Available and OleRE.CanConvertOrActivateAs;
// and now the rest
EditUndo1.Enabled := RichEdit.CanUndo;
EditCut1.Enabled := RichEdit.SelLength > 0;
EditCopy1.Enabled := RichEdit.SelLength > 0;
EditPasteSpecial1.Enabled := OleRE.CanPaste;
EditPaste1.Enabled := EditPasteSpecial1.Enabled;
EditDelete1.Enabled := RichEdit.SelLength > 0;
EditSelectAll.Enabled := true;
EditInsertObject.Enabled := true;
EditInsertFromFile.Enabled := true;
EditSaveSelection.Enabled := RichEdit.SelLength > 0
end
end;
procedure TMainForm.ObjectVerbClick(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.DoVerb ((Sender as TMenuItem).Tag)
end;
procedure TMainForm.ObjectPropsExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.ObjectPropertiesDialog
end;
procedure TMainForm.ObjectIconExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.ChangeIconDialog
end;
procedure TMainForm.ObjectSourceExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.ChangeSourceDialog
end;
procedure TMainForm.FileLinksExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.UpdateAllLinks
end;
procedure TMainForm.FileEditLinksExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.EditLinksDialog
end;
procedure TMainForm.ObjectEditExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.EditLinkDialog
end;
procedure TMainForm.ObjectUpdateExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.UpdateLink
end;
procedure TMainForm.ObjectConvertExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.ConvertDialog
end;
procedure TMainForm.EditSelectAllExecute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.SelectAll
end;
procedure TMainForm.EditUndo1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.Undo
end;
procedure TMainForm.EditCut1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.CutToClipboard
end;
procedure TMainForm.EditCopy1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.CopyToClipboard
end;
procedure TMainForm.EditPaste1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.PasteFromClipboard
end;
procedure TMainForm.EditPasteSpecial1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
OleRE.PasteSpecialDialog
end;
procedure TMainForm.EditDelete1Execute(Sender: TObject);
begin
with TUPadForm(ActiveMDIChild) do
RichEdit.ClearSelection
end;
procedure TMainForm.ShowHint (Sender : TObject);
begin
Statusbar.Panels[2].Text := Application.Hint
end;
//=== handle draw clipboard message ============================================
// These procedures (see also the OnFormCreate and Destroy events) put the
// application into the clipboard view chain. This allows paste special to
// be automatically updated without the application being active.
procedure TMainForm.WMDrawClipboard (var Msg : TWMDrawClipboard);
begin
EditPasteSpecial1.Enabled := (MDIChildCount > 0) and Assigned (ActiveMDIChild) and
TUPadForm(ActiveMDIChild).OleRE.CanPaste;
EditPaste1.Enabled := EditPasteSpecial1.Enabled;
// pass message on in the chain, if we're not the last
if FNextHandle <> 0 then
SendMessage (FNextHandle, WM_DrawClipboard, 0, 0)
end;
//--- handle change to clipboard chain
procedure TMainForm.WMChangeCBChain (var Msg : TWMChangeCBChain);
begin
with Msg do
// is it an instruction to remove ourselves from the chain?
if FNextHandle = Remove then
FNextHandle := Next
else
// otherwise pass message on in the chain, if we're not the last
if FNextHandle <> 0 then
SendMessage (FNextHandle, WM_ChangeCBChain, Remove, Next)
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -