📄 main.pas
字号:
lbl_Caption.Caption:='子类别名';
lbl_Info.Caption :='注意字数不要超过255个ASCII字符';
if ShowModal=mrOk then
begin
pi_id^:=getRandomId('IndexData');
if srb_Borther.Checked then
begin
TmpNode:=sTV_Main.Items.AddObject(sTV_Main.Selected,sedt_caption.text,pi_id);
end
else
begin
TmpNode:=sTV_Main.Items.AddChildObject(sTV_Main.Selected,sedt_caption.text,pi_id);
end;
TmpNode.ImageIndex:=2;
TmpNode.SelectedIndex:=TmpNode.ImageIndex; //保持选中时和没有选中时节点图标相同
SaveIndexNode(TmpNode,CIDNode);
TmpNode.Selected :=True;
TempStr:='<b>提示</b><p>'
+'现在您可以选择添加文档,如果您想分得更细的话可以新建子类别<br><br>'
+'如果您还想新建同级类别可以在新建子类别时选择同级类别<br>';
DBookBrowser.DisplayModalPage('新建子类别'+sedt_caption.Text,Tempstr);
end;
free;
end;
end;
procedure TMainFrm.NewDocExecute(Sender: TObject);
var
pi_id:^integer;
TmpNode:TTreeNode;
ClassDoc:TClassDoc;
begin
New(pi_id);
if sTV_Main.Selected =nil then Exit;
with TAddFrm.Create(self) do
begin
Caption:='新建文档';
lbl_Caption.Caption:='文档名';
lbl_Info.Caption :='注意字数不要超过255个ASCII字符';
if ShowModal=mrOk then
begin
pi_id^:=getRandomId('IndexData');
if Not IsDocNode(sTV_Main.Selected) then //子集文档
TmpNode:=sTV_Main.Items.AddChildObject(sTV_Main.Selected,sedt_caption.text,pi_id)
else //同级文档
TmpNode:=sTV_Main.Items.AddObject(sTV_Main.Selected,sedt_caption.text,pi_id);
TmpNode.ImageIndex:=3;
TmpNode.SelectedIndex:=TmpNode.ImageIndex; //保持选中时和没有选中时节点图标相同
ClassDoc.Title:=sedt_caption.text;
ClassDoc.Description :='在此处输入简单摘要';
ClassDoc.MemoText :='在此处输入备注';
ClassDoc.CreateTime:=DateToStr(Date)+' '+TimeToStr(Time);
ClassDoc.LastModified :=ClassDoc.CreateTime;
ClassDoc.DocText :='';
ClassDoc.Subject :=scbb_Subject.Text;
ClassDoc.UserID:=UserID;
ClassDoc.HtmlMode:='默认格式';
SaveIndexNode(TmpNode,CIDDoc);
SaveDoc(TmpNode,ClassDoc);
TmpNode.Selected :=True;
spcl_Main.ActivePage:= stst_EditMode;
mem_DocText.Text :='请在这里输入您要保存的文档...';
mem_DocText.SelectAll;
end;
free;
end;
end;
procedure TMainFrm.DelNodeExecute(Sender: TObject);
var
TmpNode:TTreeNode;
s_name,s_tmp:String;
begin
TmpNode:=sTV_Main.Selected;
if Not Assigned(TmpNode) then Exit;
if isDocNode(tmpNode) then
begin
if MessageBox(handle,'真的要删除该文档记录吗?','提示',MB_OKCANCEL+MB_ICONWARNING)=IDOK then
begin
delNodes(tmpNode); //如果为文档类型就在数据库删除文件
sTV_Main.SetFocus;
end;
end
else
begin
s_name:=tmpNode.Text;
if tmpNode.HasChildren Then
s_tmp:='此操作将会使 "'+s_name+'" 类别下所有子类别和子文档全部被清除,真的要删除该类别吗?'
else
s_tmp:='将要删除类别"'+s_name+'",真的要删除吗?';
if MessageBox(handle,PChar(s_tmp),'提示',MB_OKCANCEL+MB_ICONWARNING)=IDOK then
delNodes(tmpNode);
end;
end;
procedure TMainFrm.EditNodeExecute(Sender: TObject);
var
TmpNode:TTreeNode;
ClassID:TClassId;
begin
TmpNode:= sTV_Main.Selected;
if Not Assigned(TmpNode) then Exit;
if IsDocNode(TmpNode) then
begin
spcl_Main.ActivePage :=stst_EditMode;
sBtn_Submit.Enabled:=True;
mem_DocText.SelectAll;
end
else
begin
With TAddFrm.Create(Self) Do
begin
AddsFrm.Caption:='编辑类别';
Caption:='编辑类别';
lbl_caption.Caption:='类别名';
lbl_info.Caption :='注意不要超过50个';
sEdt_caption.Text :=TmpNode.Text;
srb_Borther.Visible :=False;
srb_Son.Visible :=False;
if ShowModal =mrOk then
begin
TmpNode.Text:=sEdt_caption.Text;
UpdateIndexNode(TmpNode);
end;
Free;
end;
end;
end;
procedure TMainFrm.At_ExportSubjectExecute(Sender: TObject);
begin
if scbb_Subject.Text ='' then Exit;
DBookBrowser.ExportSubjectToHtm(scbb_Subject.Text);
end;
procedure TMainFrm.At_ExportNodeExecute(Sender: TObject);
var
PathStr,OutPathStr:String;
begin
if Not Assigned(sTV_Main.Selected) then Exit;
DBookBrowser.ExportNodeToHtm(sTV_Main.Selected);
end;
procedure TMainFrm.At_ExitApplicationExecute(Sender: TObject);
begin
Application.Terminate;
end;
procedure TMainFrm.At_helpExecute(Sender: TObject);
var
TempStr:String;
begin
TempStr:=ExePath+'\data\help\Index.htm';
//MessageBox(Handle,'很容易的,自己用着吧!','提示',MB_OK+MB_ICONINFORMATION);
shellexecute(0,'Open',PChar(TempStr), '','',1);
end;
procedure TMainFrm.At_HideWindowsExecute(Sender: TObject);
begin
Application.Minimize;
Hide;
end;
//=============================================================================//
procedure TMainFrm.sTV_MainChange(Sender: TObject; Node: TTreeNode);
begin
DisplayTheNode(Node);
spcl_Main.ActivePage :=stst_ViewMode;
end;
procedure TMainFrm.scbb_SubjectChange(Sender: TObject);
var
vv: Variant;
HTMLDocument: IHTMLDocument2;
s_htm:String;
i_num1,i_num2,i:integer;
begin
sTV_Main.Items.Clear;
//禁止编辑模式
mem_DocText.Lines.Clear;
sedt_title.Text:='';
sedt_Description.Text:='';
sedt_memo.Text:='';
scbb_HtmlMode.ItemIndex:=-1;
sBtn_Submit.Enabled:=False;
sBtn_Submit.Enabled:=False;
gge_MainStatus.Progress:=0;
gge_MainStatus.Visible:=True;
LoadSubjectNodeData(scbb_Subject.Text,sTV_Main);
Sleep(10);
gge_MainStatus.Visible:=False;
i_num1:=0;
i_num2:=0;
for i:=0 to sTV_Main.Items.Count-1 Do
begin
if isDocNode(sTV_Main.items[i]) then
i_num1:=i_num1+1
else
i_num2:=i_num2+1;
end;
s_htm:='<html>'
+'<head>'
+'<title>[课题:'+scbb_Subject.Text+']</title>'
+'<style type="text/css">'
+'A:visited{TEXT-DECORATION: none;Color:#333333;}'
+'A:active{TEXT-DECORATION: none;Color:#333333;}'
+'A:hover{TEXT-DECORATION: underline;Color:red;}'
+'A:link{text-decoration: none;Color:#000000;}'
+'body{font-family: "Arial";font-size: 10.5pt;};'
+'</style>'
+'</head>'
+'<body bgcolor="#eeeeee">'
+'<b>课题:'+scbb_Subject.Text+'</b>'
+'<hr>'
+'<br>'
+'相关记录如下...<br>'
+'<br>'
+'该课题总共有节点'+InttoStr(sTV_Main.Items.Count)+'个<br>'
+'该课题总共有文档'+InttoStr(i_num1)+'个<br>'
+'该课题总共有类别'+InttoStr(i_num2)+'个<br>'
+'<br>'
+'<hr>'
+'</body>'
+'</html>';
vv := VarArrayCreate([0, 0], varVariant);
vv[0]:=s_htm;
HTMLDocument :=MainFrm.WebBrowser1.Document as IHTMLDocument2;
HTMLDocument.Write(PSafeArray(TVarData(vv).VArray));
HTMLDocument.Close;
end;
procedure TMainFrm.sBtn_SubmitClick(Sender: TObject);
var
ClassDoc:TClassDoc;
id:Integer;
begin
if Not Assigned(sTV_Main.Selected) then
begin
showMessage('没有选中的文档可更新');
Exit;
end;
ClassDoc.LastModified :=DateToStr(Date)+' '+TimeToStr(Time);
ClassDoc.Title:=sedt_title.Text;
ClassDoc.Description :=sedt_Description.Text;
ClassDoc.MemoText:=sedt_Memo.Text;
ClassDoc.DocText:=mem_DocText.Text;
ClassDoc.HtmlMode:=scbb_HtmlMode.Text;
ClassDoc.Subject:=scbb_Subject.Text;
ClassDoc.UserID:=UserID;
sTV_Main.Selected.Text:=sedt_title.Text;
id:=GetNodeId(sTV_Main.Selected);
UpdateDoc(id,ClassDoc);
UpdateIndexNode(sTV_Main.Selected,CIDDoc);
DisplayTheNode(sTV_Main.Selected);
spcl_Main.ActivePage :=stst_ViewMode;
end;
procedure TMainFrm.TB_AdvanceApplyClick(Sender: TObject);
begin
with TAdvanceFrm.Create(Self) Do
begin
ShowModal;
Free;
end;
DBookBrowser.LoadHtmlMode;
end;
procedure TMainFrm.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
s_nodeText,s_tmp:String;
i_count,i_size,i:integer;
tmpNode:TtreeNode;
begin
i_size:=Length(CS_LINKPL);
tmpNode:=sTV_Main.Selected;
if MidStr(URL,1,i_size)=CS_LINKPL then
begin
s_tmp:=MidStr(URL,i_size+1,(Length(URL)-i_size));
s_tmp:=AnsiReplaceStr(s_tmp,'%20',' ');
tmpNode:=tmpNode.getFirstChild;
while InttoStr(tmpNode.index)<>s_tmp Do
begin
tmpNode:=tmpNode.getNextSibling;
end;
tmpNode.Selected:=True;
end;
end;
procedure TMainFrm.Pnl_RightMainMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
lbl_Status.Caption:='';
end;
procedure TMainFrm.TB_NewSubjectMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
var
TagIndex:Integer;
begin
TagIndex:=(Sender As TToolButton).Tag;
Case TagIndex of
1:lbl_Status.Caption:='新建一个课题';
2:lbl_Status.Caption:='新建一个根类别(根目录)';
3:lbl_Status.Caption:='新建一个子类别(子目录)';
4:lbl_Status.Caption:='新建一个文档';
5:lbl_Status.Caption:='编辑类别或者文档';
6:lbl_Status.Caption:='删除一个类别或者文档';
7:lbl_Status.Caption:='高级应用,系统设置等';
8:lbl_Status.Caption:='将当前选中的节点导出成网页';
9:lbl_Status.Caption:='将当前课题导出成网页';
10:lbl_Status.Caption:='帮助主题,有任何疑问请来信 etu5@163.com';
11:lbl_Status.Caption:='关于DBook';
12:lbl_Status.Caption:='隐藏主窗口 -它将最小化存在于您的托盘内';
end;
end;
//=============================================================================//
procedure TMainFrm.mnl_showClick(Sender: TObject);
begin
if mnl_show.Caption ='显示(&S)' then
begin
Show;
Application.Restore;
Application.BringToFront;
end
else
begin
Application.Minimize;
Hide;
end;
end;
procedure TMainFrm.Exit1Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TMainFrm.At_AboutExecute(Sender: TObject);
begin
//MessageBox(Handle,'哈哈 外星人你还不认识? 打你屁股 :)','提示',MB_OK+MB_ICONINFORMATION);
With TSplashFrm.Create(Self) Do
begin
sPB_Splash.Visible:=False;
lbl_Close.Visible:=True;
ShowModal;
Free;
end;
end;
procedure TMainFrm.sb_searchClick(Sender: TObject);
var
SubjectStr,KeyStr,KeyClass,TempStr:String;
IsLikeSearch:Boolean;
Index:Integer;
P_id:^Integer;
begin
slb_SearchRecList.Items.Clear;
FSearchList.Clear;
SubjectStr:=scbb_Subject.Text;
KeyStr:=sedt_Search.Text;
if scb_like.Checked then
IsLikeSearch:=True
else
IsLikeSearch:=False;
Index:=scbb_keyclass.Items.IndexOf(scbb_keyclass.Text);
case Index of
0:KeyClass:='Caption';
1:KeyClass:='Description';
2:KeyClass:='MemoText';
3:KeyClass:='DocText';
4:KeyClass:='CreateTime';
5:KeyClass:='LastModified';
end;
if IsLikeSearch then
TempStr:= 'Where Subject="'+SubjectStr+'" and '+KeyClass+' like "'+KeyStr+'%"'
else
TempStr:= 'Where Subject="'+SubjectStr+'" and '+KeyClass+' = "'+KeyStr+'"';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select Caption,ID From DocData');
ADOQuery1.SQL.Add(TempStr);
ADOQuery1.Open;
While Not ADOQuery1.Eof Do
begin
New(p_id);
TempStr:=ADOQuery1.fieldByName('Caption').AsString;
p_id^:= ADOQuery1.fieldByName('ID').AsInteger;
slb_SearchRecList.Items.Add(TempStr);
FSearchList.Add(p_id);
ADOQuery1.Next;
end;
end;
procedure TMainFrm.slb_SearchRecListClick(Sender: TObject);
var
Index,i:Integer;
p_id,P_tmpid:^Integer;
ClassDoc:TClassDoc;
begin
Index:=slb_SearchRecList.ItemIndex;
p_id:=FSearchList.Items[Index];
//遍历全部节点
for i:=0 to sTV_Main.Items.Count-1 Do
begin
P_tmpid:=sTV_Main.Items[i].Data;
if p_tmpid^=p_id^ then
begin
sTV_Main.Items[i].Selected:=True;
end;
end;
{ 垃圾
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from DocData');
ADOQuery1.SQL.Add('Where ID='+IntToStr(p_id^));
ADOQuery1.Open;
if ADOQuery1.RecordCount >0 then
begin
ClassDoc.Title:=ADOQuery1.FieldByName('Caption').AsString;
ClassDoc.Description:=ADOQuery1.FieldByName('Description').AsString;
ClassDoc.MemoText:=ADOQuery1.FieldByName('MemoText').AsString;
ClassDoc.DocText:=ADOQuery1.FieldByName('DocText').AsString;
ClassDoc.HtmlMode:=ADOQuery1.FieldByName('HtmlMode').AsString;
ClassDoc.LastModified:=ADOQuery1.FieldByName('LastModified').AsString;
ClassDoc.CreateTime:=ADOQuery1.FieldByName('CreateTime').AsString;
ClassDoc.UserID:=ADOQuery1.FieldByName('UserID').AsString;
scbb_HtmlMode.ItemIndex:=scbb_HtmlMode.Items.IndexOf(ClassDoc.HtmlMode);
sedt_title.Text:=ClassDoc.Title;
sedt_Description.Text:=ClassDoc.Description;
sedt_memo.Text:=ClassDoc.MemoText;
mem_DocText.Text:=ClassDoc.DocText;
sBtn_Submit.Enabled:=True;
DBookBrowser.SetHtmStr(ClassDoc);
DBookBrowser.DisplayHtmlPage;
spcl_Main.ActivePage :=stst_ViewMode;
end;
}
end;
procedure TMainFrm.sbtn_hideLeftPnlClick(Sender: TObject);
begin
if Pnl_LeftMain.Visible=True then
begin
Pnl_LeftMain.Visible:=False;
sbtn_hideLeftPnl.Caption:='显示左面板';
end
else
begin
Pnl_LeftMain.Visible:=True;
sbtn_hideLeftPnl.Caption:='隐藏左面板';
end;
end;
Initialization
OleInitialize(nil);
Finalization
try
OleUninitialize;
except
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -