📄 mainfrm.pas
字号:
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, ComCtrls, ToolWin, ActnList,
ImgList, ShellApi, Registry, ChildFrm, SysTray, Buttons;
const
DefaultWinWidth = 645; // 缺省窗体宽度
DefaultWinHeight = 460; // 缺省窗体高度
PageButtonWidth = 100; // PageButton 的宽度
PageButtonHeight = 18; // PageButton 的高度
WM_OPENFILE = WM_USER + 1;
type
TMainForm = class(TForm)
StatusBar: TStatusBar;
ActionList: TActionList;
OpenAction: TAction;
MainMenu: TMainMenu;
FileMenu: TMenuItem;
FileNewItem: TMenuItem;
ImageList: TImageList;
NewAction: TAction;
FileOpenItem: TMenuItem;
HelpContentAction: TAction;
AboutAction: TAction;
HelpMenu: TMenuItem;
HelpContentItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenFileDialog: TOpenDialog;
SaveAction: TAction;
SaveAsAction: TAction;
ExecuteAction: TAction;
PropertyAction: TAction;
PrintAction: TAction;
OpenFolderAction: TAction;
QuitAction: TAction;
FileN1Item: TMenuItem;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
FileExecuteItem: TMenuItem;
FilePropertyItem: TMenuItem;
FilePrintItem: TMenuItem;
FileOpenFolderItem: TMenuItem;
FileN4Item: TMenuItem;
FileQuitItem: TMenuItem;
FileN5Item: TMenuItem;
ViewMenu: TMenuItem;
ViewToolBarItem: TMenuItem;
ViewStatusBarItem: TMenuItem;
ViewN2Item: TMenuItem;
ViewOnTopItem: TMenuItem;
ToolMenu: TMenuItem;
WindowMenu: TMenuItem;
WinMgrItem: TMenuItem;
WinMgrAction: TAction;
WinCascAction: TAction;
WinHoriTileAction: TAction;
WinArrangeAction: TAction;
WinCascItem: TMenuItem;
WinTileItem: TMenuItem;
WinArrangeItem: TMenuItem;
WinN1Item: TMenuItem;
CloseAction: TAction;
FileCloseItem: TMenuItem;
OptionsAction: TAction;
ToolOptionsItem: TMenuItem;
HelpHomePageItem: TMenuItem;
HelpEmailItem: TMenuItem;
HelpN1Item: TMenuItem;
ToolN3Item: TMenuItem;
ToolFileSplitItem: TMenuItem;
ToolFileCombinItem: TMenuItem;
ToolN1Item: TMenuItem;
ToolDiskReadItem: TMenuItem;
ToolDiskWriteItem: TMenuItem;
ToolN2Item: TMenuItem;
ToolNumBaseConvItem: TMenuItem;
ToolCalItem: TMenuItem;
ToolDecHexTableItem: TMenuItem;
ToolASCIITableItem: TMenuItem;
FileMRU1Item: TMenuItem;
FileMRU2Item: TMenuItem;
FileMRU3Item: TMenuItem;
FileMRU4Item: TMenuItem;
OnTopAction: TAction;
ExportAction: TAction;
E1: TMenuItem;
CloseAllAction: TAction;
L1: TMenuItem;
FileN6Item: TMenuItem;
SaveAllAction: TAction;
V1: TMenuItem;
FileN3Item: TMenuItem;
SaveDialog: TSaveDialog;
ToolBkmkMgrItem: TMenuItem;
DataInspectorAction: TAction;
ViewDataInspItem: TMenuItem;
FilePrintSetupItem: TMenuItem;
PrinterSetupDialog: TPrinterSetupDialog;
EditorAction: TAction;
FileEditorItem: TMenuItem;
FileN8Item: TMenuItem;
ViewN1Item: TMenuItem;
ViewLanguageItem: TMenuItem;
ViewLangAutoItem: TMenuItem;
ViewLangChineseItem: TMenuItem;
ViewLangEnglishItem: TMenuItem;
SysTray: TSysTray;
SysTrayPopupMenu: TPopupMenu;
STPopupHelpItem: TMenuItem;
STPopupAboutItem: TMenuItem;
STPopupQuitItem: TMenuItem;
STPopupN2Item: TMenuItem;
STPopupShowMainWinItem: TMenuItem;
STPopupN1Item: TMenuItem;
ToolN4Item: TMenuItem;
ToolToolsItem: TMenuItem;
ToolToolsN1Item: TMenuItem;
ToolToolsMgrItem: TMenuItem;
T1: TMenuItem;
WinVertTileAction: TAction;
ToolsMgrAction: TAction;
ToolDiskToolItem: TMenuItem;
TopSplitterPanel: TPanel;
CoolBar: TCoolBar;
ToolBar: TToolBar;
NewToolButton: TToolButton;
OpenToolButton: TToolButton;
SaveToolButton: TToolButton;
ToolButton6: TToolButton;
PropToolButton: TToolButton;
PrintToolButton: TToolButton;
SearchToolButton: TToolButton;
ToolButton10: TToolButton;
CutToolButton: TToolButton;
CopyToolButton: TToolButton;
PasteToolButton: TToolButton;
ToolButton12: TToolButton;
UndoToolButton: TToolButton;
RedoToolButton: TToolButton;
ToolButton15: TToolButton;
OnTopToolButton: TToolButton;
ToolButton1: TToolButton;
OptionToolButton: TToolButton;
CalcToolButton: TToolButton;
ToolButton22: TToolButton;
CascToolButton: TToolButton;
TileHoriToolButton: TToolButton;
TileVertToolButton: TToolButton;
ToolButton5: TToolButton;
HelpContentToolButton: TToolButton;
FileN7Item: TMenuItem;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
PageHeaderScroller: TPageScroller;
PageHeaderPanel: TPanel;
ViewPageHeaderItem: TMenuItem;
ViewN3Item: TMenuItem;
HelpN2Item: TMenuItem;
GotoToolButton: TToolButton;
procedure NewActionExecute(Sender: TObject);
procedure OpenActionExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure SaveActionExecute(Sender: TObject);
procedure SaveAsActionExecute(Sender: TObject);
procedure CloseActionExecute(Sender: TObject);
procedure ExecuteActionExecute(Sender: TObject);
procedure PropertyActionExecute(Sender: TObject);
procedure PrintActionExecute(Sender: TObject);
procedure OpenFolderActionExecute(Sender: TObject);
procedure QuitActionExecute(Sender: TObject);
procedure OptionsActionExecute(Sender: TObject);
procedure WinMgrActionExecute(Sender: TObject);
procedure WinCascActionExecute(Sender: TObject);
procedure WinHoriTileActionExecute(Sender: TObject);
procedure WinArrangeActionExecute(Sender: TObject);
procedure HelpContentActionExecute(Sender: TObject);
procedure AboutActionExecute(Sender: TObject);
procedure HelpHomePageItemClick(Sender: TObject);
procedure HelpEmailItemClick(Sender: TObject);
procedure ViewToolBarItemClick(Sender: TObject);
procedure ViewStatusBarItemClick(Sender: TObject);
procedure OnTopActionExecute(Sender: TObject);
procedure ToolFileSplitItemClick(Sender: TObject);
procedure ToolFileCombinItemClick(Sender: TObject);
procedure ToolDiskReadItemClick(Sender: TObject);
procedure ToolDiskWriteItemClick(Sender: TObject);
procedure ToolNumBaseConvItemClick(Sender: TObject);
procedure ToolDecHexTableItemClick(Sender: TObject);
procedure ToolASCIITableItemClick(Sender: TObject);
procedure ToolCalItemClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FileMRU1ItemClick(Sender: TObject);
procedure CloseAllActionExecute(Sender: TObject);
procedure ExportActionExecute(Sender: TObject);
procedure SaveAllActionExecute(Sender: TObject);
procedure ToolBkmkMgrItemClick(Sender: TObject);
procedure DataInspectorActionExecute(Sender: TObject);
procedure FilePrintSetupItemClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure EditorActionExecute(Sender: TObject);
procedure STPopupShowMainWinItemClick(Sender: TObject);
procedure WinVertTileActionExecute(Sender: TObject);
procedure CutToolButtonClick(Sender: TObject);
procedure CopyToolButtonClick(Sender: TObject);
procedure PasteToolButtonClick(Sender: TObject);
procedure UndoToolButtonClick(Sender: TObject);
procedure RedoToolButtonClick(Sender: TObject);
procedure SearchToolButtonClick(Sender: TObject);
procedure ToolsMgrActionExecute(Sender: TObject);
procedure SysTrayIconMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PageHeaderScrollerResize(Sender: TObject);
procedure ViewPageHeaderItemClick(Sender: TObject);
procedure GotoToolButtonClick(Sender: TObject);
private
{ Private declarations }
FAppMinimized: Boolean;
procedure ShowToolBar(Value: Boolean = True);
procedure ShowStatusBar(Value: Boolean = True);
procedure ShowPageHeader(Value: Boolean = True);
procedure ShowDataInsp(Value: Boolean = True);
procedure SetOnTop(Value: Boolean = True);
procedure ShowKeyState;
procedure InitMRUMenuItem;
procedure InitToolsMenuItem;
procedure SaveFormRect;
procedure LoadFormRect;
function DoParam: Boolean;
function FindChildForm(const FileName: string): TChildForm;
function OpenFile(FileName: string): Boolean;
procedure ShowMDIClientEdge;
procedure AdjustUIEnabled(Active: Boolean);
procedure AddPageButton(Form: TChildForm; const DisplayName: string);
procedure DeletePageButton(Form: TChildForm);
function FindPageButton(Form: TChildForm): TSpeedButton;
procedure ActivePageButton(Form: TChildForm);
procedure RenamePageButton(Form: TChildForm);
procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;
procedure WMOpenFile(var Message: TMessage); message WM_OPENFILE;
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
procedure AppMinimize(Sender: TObject);
procedure AppRestore(Sender: TObject);
procedure ToolsItemClick(Sender: TObject);
procedure PageButtonClick(Sender: TObject);
procedure DoFileDropMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
procedure ShowMainWindow;
procedure AddToContentMenu(Add: Boolean);
function GetMDIClientRect: TRect;
function GetCurDoc: TChildForm;
function GetDocCount: Integer;
procedure ShowStatusMsg(Msg: string);
procedure ReDrawAllDoc;
procedure ChangeMaxUndo(Value: Integer);
procedure ArrangeForCompare(Form1, Form2: TChildForm);
procedure ChildOpenNotify(Form: TChildForm);
procedure ChildCloseNotify(Form: TChildForm);
procedure ChildActiveNotify(Form: TChildForm);
procedure ChildRenameNotify(Form: TChildForm);
procedure ChildSaveNotify(Form: TChildForm; AddToMRU: Boolean);
end;
var
MainForm: TMainForm;
CheckPreInsAtom: TAtom;
implementation
uses
Global, Misc, PrjMisc, MRUMgr, ToolsMgr, BkmkMgr, SysOptMgr, WinVer,
OptionFrm, FilePropFrm, NumBaseConvFrm, SetSizeFrm, DecHexFrm,
AsciiFrm, BkmkMgrFrm, WinMgrFrm, DataInspFrm, AboutFrm,
ToolsMgrFrm, DiskIOFrm, FileSplitFrm, FileCombinFrm;
{$R *.DFM}
{$R Pictures.res}
procedure TMainForm.ShowToolBar(Value: Boolean);
begin
ToolBar.Visible := Value;
ViewToolBarItem.Checked := Value;
end;
procedure TMainForm.ShowStatusBar(Value: Boolean);
begin
StatusBar.Visible := Value;
ViewStatusBarItem.Checked := Value;
end;
procedure TMainForm.ShowPageHeader(Value: Boolean);
begin
PageHeaderScroller.Visible := Value;
ViewPageHeaderItem.Checked := Value;
end;
procedure TMainForm.ShowDataInsp(Value: Boolean);
begin
ShowDataInspForm(Value);
if GetCurDoc <> nil then GetCurDoc.FillDataInspector;
DataInspectorAction.Checked := Value;
Self.BringToFront;
end;
procedure TMainForm.SetOnTop(Value: Boolean);
begin
SetStayOnTop(Self, Value);
OnTopAction.Checked := Value;
end;
procedure TMainForm.ShowKeyState;
var
Cap, Num, Ins: Boolean;
begin
Ins := ByteBool(GetKeyState(VK_INSERT) and 1);
Cap := ByteBool(GetKeyState(VK_CAPITAL) and 1);
Num := ByteBool(GetKeyState(VK_NUMLOCK) and 1);
if Ins then StatusBar.Panels[1].Text := 'INS'
else StatusBar.Panels[1].Text := '';
if Cap then StatusBar.Panels[2].Text := 'CAP'
else StatusBar.Panels[2].Text := '';
if Num then StatusBar.Panels[3].Text := 'NUM'
else StatusBar.Panels[3].Text := '';
end;
function TMainForm.GetCurDoc: TChildForm;
begin
if Self.ActiveMDIChild is TChildForm then
Result := Self.ActiveMDIChild as TChildForm
else
Result := nil;
end;
function TMainForm.GetDocCount: Integer;
var
I: Integer;
begin
Result := 0;
for I := 0 to Self.MDIChildCount - 1 do
begin
if Self.MDIChildren[I] is TChildForm then
Inc(Result);
end;
end;
procedure TMainForm.InitMRUMenuItem;
var
I: Integer;
MenuItem: TMenuItem;
begin
for I := 1 to MRUManager.Items.Count do
begin
MenuItem := FindComponent('FileMRU' + IntToStr(I) + 'Item') as TMenuItem;
MenuItem.Caption := '&' + IntToStr(MenuItem.Tag) + ' ' + MRUManager.GetDisplayString(I - 1);
MenuItem.Visible := True;
end;
FileN5Item.Visible := MRUManager.Items.Count > 0;
end;
procedure TMainForm.InitToolsMenuItem;
var
I: Integer;
MenuItem: TMenuItem;
begin
I := 0;
while I < ToolToolsItem.Count do
begin
MenuItem := ToolToolsItem.Items[I];
if MenuItem.Tag <> -1 then
ToolToolsItem.Delete(I)
else
Inc(I);
end;
for I := 0 to High(ToolsManager.Items) do
begin
MenuItem := TMenuItem.Create(Self);
ToolToolsItem.Insert(I, MenuItem);
MenuItem.Tag := I;
MenuItem.Caption := ToolsManager.Items[I].Title;
MenuItem.OnClick := ToolsItemClick;
if I < 9 then
MenuItem.ShortCut := ShortCut(Word(Ord('1')+I), [ssAlt]);
end;
ToolToolsN1Item.Visible := Length(ToolsManager.Items) > 0;
end;
procedure TMainForm.SaveFormRect;
var
R: TRect;
begin
if WindowState = wsMaximized then
R := Screen.WorkAreaRect else
R := BoundsRect;
OptMgr.Values[SOptWinLeft] := R.Left;
OptMgr.Values[SOptWinTop] := R.Top;
OptMgr.Values[SOptWinRight] := R.Right;
OptMgr.Values[SOptWinBottom] := R.Bottom;
end;
procedure TMainForm.LoadFormRect;
var
DefRect, R: TRect;
begin
DefRect.Left := (Screen.Width - DefaultWinWidth) div 2;
DefRect.Top := (Screen.Height - DefaultWinHeight) div 2;
DefRect.Right := DefRect.Left + DefaultWinWidth;
DefRect.Bottom := DefRect.Top + DefaultWinHeight;
if OptMgr.Values[SOptSaveWinSize] then
begin
R.Left := OptMgr.Values[SOptWinLeft];
R.Top := OptMgr.Values[SOptWinTop];
R.Right := OptMgr.Values[SOptWinRight];
R.Bottom := OptMgr.Values[SOptWinBottom];
if (R.Right - R.Left > Screen.Width) or (R.Bottom - R.Top > Screen.Height) then
FillChar(R, SizeOf(R), 0);
if (R.Left >= R.Right) or (R.Top >= R.Bottom) then
R := DefRect;
BoundsRect := R;
MakeFullyVisible;
end else
begin
BoundsRect := DefRect;
end;
end;
function TMainForm.DoParam: Boolean;
var
I: Integer;
begin
for I := 1 to ParamCount do
begin
OpenFile(ParamStr(I));
end;
Result := (ParamCount >= 1);
end;
function TMainForm.FindChildForm(const FileName: string): TChildForm;
var
Form: TChildForm;
I: Integer;
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -