📄 mainunit.pas
字号:
//---------------------------------------------------------------------------
//(R)CopyRight KivenSoft International ,inc 1998
//程序名称:电子书库
//单元名称:主窗口单元
//作 者:李会文
//单元名称:主程序单元
//开始时间:1998.07.28
//最后修改:1999.03.18
//---------------------------------------------------------------------------
unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, ComCtrls, CommCtrl, ExtCtrls, ToolWin, Registry, ShellApi,
MyLabel, SrmUnit, SrmConst, ShlObj, FileCtrl;
type
TSrmForm = class(TForm)
Splitter: TSplitter;
StatusBar: TStatusBar;
LeftPanel: TPanel;
LeftBottomPanel: TPanel;
RightPanel: TPanel;
MainFormMenu: TMainMenu;
FileMenuItem: TMenuItem;
NewMenuItem: TMenuItem;
OpenMenuItem: TMenuItem;
CloseMenuItem: TMenuItem;
N1: TMenuItem;
SaveMenuItem: TMenuItem;
FImportMenuItem: TMenuItem;
ExportMenuItem: TMenuItem;
N3: TMenuItem;
PrintMenuItem: TMenuItem;
N4: TMenuItem;
MyLoveMenuItem: TMenuItem;
N5: TMenuItem;
ExitMenuItem: TMenuItem;
EditMenuItem: TMenuItem;
UndoMenuItem: TMenuItem;
RedoMenuItem: TMenuItem;
N6: TMenuItem;
CutMenuItem: TMenuItem;
CopyMenuItem: TMenuItem;
PasteMenuItem: TMenuItem;
N7: TMenuItem;
SelAllMenuItem: TMenuItem;
N8: TMenuItem;
FindMenuItem: TMenuItem;
FindNextMenuItem: TMenuItem;
ReplaceMenuItem: TMenuItem;
N9: TMenuItem;
DelSpaceMenuItem: TMenuItem;
ViewMenuItem: TMenuItem;
ToolsMenuItem: TMenuItem;
StatusMenuItem: TMenuItem;
TitleMenuItem: TMenuItem;
ReadOnlyMenuItem: TMenuItem;
BigFontMenuItem: TMenuItem;
SmallFontMenuItem: TMenuItem;
N10: TMenuItem;
OptionsMenuItem: TMenuItem;
OperatorMenuItem: TMenuItem;
AddNodeMenuItem: TMenuItem;
AddSubNodeMenuItem: TMenuItem;
EditNodeMenuItem: TMenuItem;
DelNodeMenuItem: TMenuItem;
N11: TMenuItem;
SortMenuItem: TMenuItem;
N12: TMenuItem;
CompressMenuItem: TMenuItem;
UnDelMenuItem: TMenuItem;
RepareMenuItem: TMenuItem;
HelpMenuItem: TMenuItem;
AboutMenuItem: TMenuItem;
ReadmeMenuItem: TMenuItem;
N13: TMenuItem;
HomePageMenuItem: TMenuItem;
ImageList: TImageList;
SaveDialog: TSaveDialog;
OpenDialog: TOpenDialog;
FindDialog: TFindDialog;
ReplaceDialog: TReplaceDialog;
TreeViewPopupMenu: TPopupMenu;
AddNodePopMenuItem: TMenuItem;
AddSubNodePopMenuItem: TMenuItem;
N14: TMenuItem;
DelNodePopMenuItem: TMenuItem;
EditNodePopMenuItem: TMenuItem;
RichEditPopupMenu: TPopupMenu;
CutPopMenuItem: TMenuItem;
CopyPopMenuItem: TMenuItem;
PastePopMenuItem: TMenuItem;
SelAllPopMenuItem: TMenuItem;
N15: TMenuItem;
DelSpacePopMenuItem: TMenuItem;
CovertMenuItem: TMenuItem;
CoolBar: TCoolBar;
ToolBar: TToolBar;
OpenToolButton: TToolButton;
SaveToolButton: TToolButton;
ToolButton2: TToolButton;
CutToolButton: TToolButton;
CopyToolButton: TToolButton;
PasteToolButton: TToolButton;
FindToolButton: TToolButton;
ToolButton3: TToolButton;
PrevToolButton: TToolButton;
NextToolButton: TToolButton;
ToolButton4: TToolButton;
BigToolButton: TToolButton;
SmallToolButton: TToolButton;
ToolButton11: TToolButton;
AddToolButton: TToolButton;
DelToolButton: TToolButton;
LeftPanelToolButton: TToolButton;
ToolButton7: TToolButton;
ReadOnlyToolButton: TToolButton;
EMailMenuItem: TMenuItem;
OtherMenuItem: TMenuItem;
ToolButton1: TToolButton;
ExitToolButton: TToolButton;
DImportMenuItem: TMenuItem;
SetTitlePopMenuItem: TMenuItem;
CutNodePopMenuItem: TMenuItem;
CopyNodePopMenuItem: TMenuItem;
PasteNodePopMenuItem: TMenuItem;
LeftPageControl: TPageControl;
RightPageControl: TPageControl;
IndexTabSheet: TTabSheet;
TreeView: TTreeView;
DrawTabSheet: TTabSheet;
RichEdit: TRichEdit;
RightTopPanel: TPanel;
PropertiyTabSheet: TTabSheet;
SearchTabSheet: TTabSheet;
ProTabSheet: TTabSheet;
DbAuthorLabel: TLabel;
DbPasswordLabel: TLabel;
BuildDateLabel: TLabel;
DbEditDateLabel: TLabel;
DbAuthorEdit: TEdit;
DbPasswordEdit: TEdit;
DbBuildDateEdit: TEdit;
DbEditDateEdit: TEdit;
ContextAuthorLabel: TLabel;
ContextPasswordLabel: TLabel;
ContextPubDateLabel: TLabel;
ContextIndexLabel: TLabel;
ContextAuthorEdit: TEdit;
ContextPasswordEdit: TEdit;
ContextPubDateEdit: TEdit;
ContextIndexEdit: TEdit;
SetIndexPopMenuItem: TMenuItem;
SetAuthorPopMenuItem: TMenuItem;
SearchListBox: TListBox;
ContextTypeRadioGroup: TRadioGroup;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure StatusBarDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
procedure NewMenuItemClick(Sender: TObject);
procedure CovertMenuItemClick(Sender: TObject);
procedure OpenMenuItemClick(Sender: TObject);
procedure TreeViewChange(Sender: TObject; Node: TTreeNode);
procedure CloseMenuItemClick(Sender: TObject);
procedure SaveMenuItemClick(Sender: TObject);
procedure TreeViewEdited(Sender: TObject; Node: TTreeNode;
var S: String);
procedure FImportMenuItemClick(Sender: TObject);
procedure ExportMenuItemClick(Sender: TObject);
procedure PrintMenuItemClick(Sender: TObject);
procedure ExitMenuItemClick(Sender: TObject);
procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure UndoMenuItemClick(Sender: TObject);
procedure RedoMenuItemClick(Sender: TObject);
procedure CutMenuItemClick(Sender: TObject);
procedure CopyMenuItemClick(Sender: TObject);
procedure PasteMenuItemClick(Sender: TObject);
procedure SelAllMenuItemClick(Sender: TObject);
procedure FindMenuItemClick(Sender: TObject);
procedure FindNextMenuItemClick(Sender: TObject);
procedure ReplaceMenuItemClick(Sender: TObject);
procedure DelSpaceMenuItemClick(Sender: TObject);
procedure FindDialogFind(Sender: TObject);
procedure ReplaceDialogReplace(Sender: TObject);
procedure ToolsMenuItemClick(Sender: TObject);
procedure StatusMenuItemClick(Sender: TObject);
procedure TitleMenuItemClick(Sender: TObject);
procedure ReadOnlyMenuItemClick(Sender: TObject);
procedure BigFontMenuItemClick(Sender: TObject);
procedure SmallFontMenuItemClick(Sender: TObject);
procedure OptionsMenuItemClick(Sender: TObject);
procedure AddNodeMenuItemClick(Sender: TObject);
procedure AddSubNodeMenuItemClick(Sender: TObject);
procedure EditNodeMenuItemClick(Sender: TObject);
procedure DelNodeMenuItemClick(Sender: TObject);
procedure SortMenuItemClick(Sender: TObject);
procedure CompressMenuItemClick(Sender: TObject);
procedure UnDelMenuItemClick(Sender: TObject);
procedure RepareMenuItemClick(Sender: TObject);
procedure MyLoveMenuItemClick(Sender: TObject);
procedure HomePageMenuItemClick(Sender: TObject);
procedure AboutMenuItemClick(Sender: TObject);
procedure ReadmeMenuItemClick(Sender: TObject);
procedure EMailMenuItemClick(Sender: TObject);
procedure OtherMenuItemClick(Sender: TObject);
procedure DImportMenuItemClick(Sender: TObject);
procedure SetTitlePopMenuItemClick(Sender: TObject);
procedure TreeViewDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure CutNodePopMenuItemClick(Sender: TObject);
procedure CopyNodePopMenuItemClick(Sender: TObject);
procedure PasteNodePopMenuItemClick(Sender: TObject);
procedure TreeViewPopupMenuPopup(Sender: TObject);
procedure RichEditPopupMenuPopup(Sender: TObject);
procedure FileMenuItemClick(Sender: TObject);
procedure EditMenuItemClick(Sender: TObject);
procedure DbAuthorEditChange(Sender: TObject);
procedure ContextAuthorEditChange(Sender: TObject);
procedure SetAuthorPopMenuItemClick(Sender: TObject);
procedure SetIndexPopMenuItemClick(Sender: TObject);
procedure TreeViewEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure PrevToolButtonClick(Sender: TObject);
procedure NextToolButtonClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure ContextTypeRadioGroupClick(Sender: TObject);
procedure RichEditChange(Sender: TObject);
private
{ Private declarations }
MainWidth,MainHeight,MainLeft,MainTop:integer;
Srm: TSrmObject; //Srm读写类
FileChange,IndexChange,DataChange:boolean; //各种改动标志
OpenedFileName: array[0..6] of string; //最近打开文件列表
ActiveNode,CcpNode: TTreeNode; //标题编辑所需
CcpMode:integer;
RunPath: string; //程序运行的路径
PanelHint:string; //在线提示
TitleLabel,KivenLabel:TMyLabel;
DefaultFont: TFont;
procedure LoadFromReg; //装入应用程序状态
procedure SaveToReg; //保存应用程序状态
procedure SaveData; //改动数据存盘
procedure SaveIndex; //新索引存盘
procedure OpenSrm(Fn:string); //打开数据库并装入索引
procedure SaveSrm; //保存数据库
procedure CloseSrm; //关闭数据库
function CloseSrmQuery:boolean; //是否保存对数据库的改动
function BrowseFolder:string; //目录浏览
function GetLastPathName(var Pn:string):string; //提取最后的路径名
procedure ImportDir(var Dir,Mask:string); //引入目录下文件
procedure FormMove(var Msg:TMessage); message WM_MOVE;
public
{ Public declarations }
end;
var
SrmForm: TSrmForm;
implementation
uses SrmAbout;
{$R *.DFM}
//****************************************************************
//装入注册表信息-------------------------------------------------------
procedure TSrmForm.LoadFromReg;
var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
with Reg do
begin
RootKey:=HKEY_USERS;
if OpenKey(csRegKey,false) then //打开相应的键值
begin
Width:=ReadInteger(csWidth);
Height:=ReadInteger(csHeight); //窗体的高和宽
Left:=ReadInteger(csLeft);
Top:=ReadInteger(csTop);
WindowState:=TWindowState(ReadInteger(csState));
LeftPanel.Width:=ReadInteger(csLPanelWidth); //左边的宽
ToolsMenuItem.Checked:=ReadBool(csToolBarShow);
StatusMenuItem.Checked:=ReadBool(csStatusBarShow); //工具和状态栏的显示状态
TitleMenuItem.Checked:=ReadBool(csLPanelShow);
TreeView.Font.Size:=ReadInteger(csTvFontSize);
RichEdit.Color:=ReadInteger(csReBkColor);
DefaultFont.Name:=ReadString(csDfFontName); //缺省字体
DefaultFont.Size:=ReadInteger(csDfFontSize);
DefaultFont.Color:=ReadInteger(csDfFontColor);
OpenedFileName[0]:=ReadString(csFile0);
OpenedFileName[6]:=ReadString(csFile6);
MainWidth:=Width;
MainHeight:=Height;
MainLeft:=Left;
MainTop:=Top;
Splitter.Visible:=TitleMenuItem.Checked;
LeftPanel.Visible:=TitleMenuItem.Checked;
LeftPanelToolButton.Down:=TitleMenuItem.Checked;
CoolBar.Visible:=ToolsMenuItem.Checked;
StatusBar.Visible:=StatusMenuItem.Checked;
RichEdit.Font.Size:=DefaultFont.Size;
end
else //第一次运行本程序
begin
WriteString('',csAppName);
end;
Free;
end;
end;
//保存注册表信息----------------------------------------------------------
procedure TSrmForm.SaveToReg;
var
Reg:TRegistry;
begin
DefaultFont.Size:=RichEdit.Font.Size;
Reg:=TRegistry.Create;
with Reg do
begin
RootKey:=HKEY_USERS;
OpenKey(csRegKey,true); //打开相应的键值
WriteInteger(csWidth,MainWidth);
WriteInteger(csHeight,MainHeight); //窗体的高和宽
WriteInteger(csLeft,MainLeft);
WriteInteger(csTop,MainTop);
WriteInteger(csState,integer(WindowState));
WriteInteger(csLPanelWidth,LeftPanel.Width); //左边的宽
WriteBool(csToolBarShow,ToolsMenuItem.Checked);
WriteBool(csStatusBarShow,StatusMenuItem.Checked); //工具和状态栏的显示状态
WriteBool(csLPanelShow,TitleMenuItem.Checked);
WriteInteger(csTvFontSize,TreeView.Font.Size);
WriteInteger(csReBkColor,RichEdit.Color);
WriteString(csDfFontName,DefaultFont.Name);
WriteInteger(csDfFontSize,DefaultFont.Size);
WriteInteger(csDfFontColor,DefaultFont.Color);
WriteString(csFile0,OpenedFileName[0]);
WriteString(csFile6,OpenedFileName[6]);
Free;
end;
end;
//****************************************************************
//保存数据------------------------------------------------------------------
procedure TSrmForm.SaveData;
var
Ms:TMemoryStream;
pInt:^integer;
begin
if ActiveNode=nil then Exit; //要保存的节点为空
ContextAuthorEdit.GetTextBuf(Srm.DataHead.Author,16); //取相应的属性
ContextPasswordEdit.GetTextBuf(Srm.DataHead.Password,12);
ContextIndexEdit.GetTextBuf(Srm.DataHead.SearchKey,52);
pInt:=@Srm.DataHead.DataType;
pInt^:=ActiveNode.ImageIndex;
if RichEdit.Modified then //内容有改变时
begin
with Srm.DataHead do
if (RichEdit.GetTextLen<>0) then Num:=1 else Num:=0;
ActiveNode.Data:=pointer(Srm.AddItemHead);
IndexChange:=true;
if RichEdit.GetTextLen<>0 then
begin
Ms:=TMemoryStream.Create;
Ms.SetSize(RichEdit.GetTextLen+1);
RichEdit.GetTextBuf(Ms.Memory,Ms.Size);
Srm.AddItemData(Ms);
Ms.Free;
end;
end;
if (DataChange and (not RichEdit.Modified)) then //节点属性改变时
begin
Srm.EditItemHead(integer(ActiveNode.Data));
end;
end;
//保存索引-----------------------------------------------------------------
procedure TSrmForm.SaveIndex;
var
Msh,Msd:TMemoryStream;
i,n:integer;
p:PTreeData;
AList:TStringList;
ANode:TTreeNode;
begin
if not IndexChange then Exit; //索引没改变时
Msh:=TMemoryStream.Create;
Msd:=TMemoryStream.Create;
AList:=TStringList.Create;
Msd.SetSize(sizeof(TTreeData)*TreeView.Items.Count);
p:=Msd.Memory;
n:=TreeView.Items.Count -1;
ANode:=TreeView.Items.GetFirstNode;
with ANode do
begin
for i:=0 to n do //添加相应级别的TAB字符
begin
AList.Add(StringOfChar(#9,Level)+Text);
p^.Pos:=integer(Data);
p^.DataType:=ImageIndex;
ANode:=GetNext;
p:=pointer(integer(p)+sizeof(TTreeData));
end;
end;
AList.SaveToStream(Msh);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -