⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 -个人文档管理专家V1.10版本源码
💻 PAS
📖 第 1 页 / 共 4 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, SUIForm, SUIMgr, Menus, SUIMainMenu, ToolWin, ComCtrls,
  ImgList, StdCtrls, SUIPageControl, SUITabControl, SUITreeView, OleCtrls,
  SHDocVw, SUIComboBox, mshtml, activex,PublicUnit,
  SUIGroupBox, SUIMemo, SUIEdit, Buttons,StrUtils, DB, ADODB, ActnList,
  SUIProgressBar, Gauges,ShellAPI, SUIPopupMenu, SUIToolBar,{QDialogs,}
  SUIImagePanel,ShlObj,Inifiles, SUIListBox, SUIButton;
type

  TDBookBrowser = Class (TObject)
  private
    FModeCount:integer;
    FModeContent:TStrings;
    FModeName:TStrings;
    FHtmStr:String;
    FWebbrowser:TWebBrowser;
  public
    constructor Create;
    destructor Destroy;override;
    procedure GoToURL(URL:String);
    procedure Init;
    procedure SetHtmStr(ClassDoc:TClassDoc);overload;
    procedure SetHtmStr(TmpNode:TTreeNode;IsExport:Boolean);overload;
    function  GetHtmStr:String;
    procedure LoadHtmlMode;
    procedure DisplayHtmlPage;
    procedure DisplayModalPage(ATitle,AInfo: String);
    procedure ExportNodeToHtm(currentNode:TtreeNode);
    procedure ExportSubjectToHtm(subject:String);
    
  end;

  TMainFrm = class(TForm)
    suiForm1: TsuiForm;
    Tbar_Main: TsuiToolBar;
    TB_NewSubject: TToolButton;
    TB_NewRootNode: TToolButton;
    ImageList1: TImageList;
    Pnl_TopMain: TPanel;
    TB_NewNode: TToolButton;
    TB_NewDoc: TToolButton;
    Pnl_BottomMain: TPanel;
    Pnl_LeftMain: TPanel;
    Pnl_RightMain: TPanel;
    Splitter1: TSplitter;
    spcl_Main: TsuiPageControl;
    stst_EditMode: TsuiTabSheet;
    stst_ViewMode: TsuiTabSheet;
    ToolButton6: TToolButton;
    TB_EditNode: TToolButton;
    TB_DelNode: TToolButton;
    TB_AdvanceApply: TToolButton;
    TB_ExportNode: TToolButton;
    pnl_LTop: TPanel;
    pnl_LBottom: TPanel;
    StaticText1: TStaticText;
    scbb_Subject: TsuiComboBox;
    Panel1: TPanel;
    WebBrowser1: TWebBrowser;
    Pnl_REditTop: TPanel;
    Pnl_REditBottom: TPanel;
    suiGroupBox1: TsuiGroupBox;
    mem_DocText: TMemo;
    suiPageControl2: TsuiPageControl;
    suiTabSheet3: TsuiTabSheet;
    suiTabSheet4: TsuiTabSheet;
    sTV_Main: TsuiTreeView;
    sedt_title: TsuiEdit;
    StaticText2: TStaticText;
    sedt_Description: TsuiEdit;
    StaticText3: TStaticText;
    sedt_memo: TsuiEdit;
    StaticText4: TStaticText;
    sBtn_Submit: TSpeedButton;
    scbb_HtmlMode: TsuiComboBox;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ImageList2: TImageList;
    ActionList1: TActionList;
    NewSubject: TAction;
    NewRootNode: TAction;
    NewNode: TAction;
    NewDoc: TAction;
    DelNode: TAction;
    EditNode: TAction;
    lbl_Status: TLabel;
    TB_ExportSubject: TToolButton;
    gge_MainStatus: TGauge;
    TB_Help: TToolButton;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    TB_About: TToolButton;
    TB_Exit: TToolButton;
    At_ExportSubject: TAction;
    At_ExportNode: TAction;
    At_ExitApplication: TAction;
    At_help: TAction;
    At_About: TAction;
    At_HideWindows: TAction;
    StaticText5: TStaticText;
    sPopMenu_Icon: TsuiPopupMenu;
    mnl_show: TMenuItem;
    Exit1: TMenuItem;
    About1: TMenuItem;
    suiImagePanel1: TsuiImagePanel;
    suiImagePanel2: TsuiImagePanel;
    suiGroupBox2: TsuiGroupBox;
    slb_SearchRecList: TsuiListBox;
    sedt_Search: TsuiEdit;
    sb_search: TSpeedButton;
    scb_like: TsuiCheckBox;
    scbb_keyclass: TsuiComboBox;
    StaticText6: TStaticText;
    sbtn_hideLeftPnl: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure sTV_MainChange(Sender: TObject; Node: TTreeNode);
    procedure NewSubjectExecute(Sender: TObject);
    procedure NewRootNodeExecute(Sender: TObject);
    procedure NewNodeExecute(Sender: TObject);
    procedure NewDocExecute(Sender: TObject);
    procedure scbb_SubjectChange(Sender: TObject);
    procedure sBtn_SubmitClick(Sender: TObject);
    procedure DelNodeExecute(Sender: TObject);
    procedure EditNodeExecute(Sender: TObject);
    procedure TB_AdvanceApplyClick(Sender: TObject);
    procedure WebBrowser1BeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    procedure Pnl_RightMainMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure TB_NewSubjectMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure At_ExportSubjectExecute(Sender: TObject);
    procedure At_ExportNodeExecute(Sender: TObject);
    procedure At_ExitApplicationExecute(Sender: TObject);
    procedure At_helpExecute(Sender: TObject);
    procedure At_HideWindowsExecute(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure mnl_showClick(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure At_AboutExecute(Sender: TObject);
    procedure sb_searchClick(Sender: TObject);
    procedure slb_SearchRecListClick(Sender: TObject);
    procedure sbtn_hideLeftPnlClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
  private
    DBookBrowser:TDBookBrowser;
    MyIconData:NOTIFYICONDATA;//任务栏通知区图标信息
    FSearchList:TList;
    { Private declarations }
  public

    procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;       //注册热键
    procedure WMSysMin(var Msg : TWMSYSCOMMAND); message WM_SYSCOMMAND; //扑捉最小化事件
    procedure IconOnClick(var msg:TMessage); message WM_USER+1;    //点击托盘图标时发生事件
    procedure DBookInit;
    function  GetPassword(UserID:String):String;
    procedure createNodeDir(currentNode:TtreeNode;basePath:string);
    procedure LoadSubjectList;
    procedure LoadSubjectNodeData(Subject:String;TreeView:TsuiTreeView);
    function  IsDocNode(TmpNode:TTreeNode):Boolean;
    procedure DisplayTheNode(TmpNode:TTreeNode);
    function  GetRandomID(Table:String):integer;
    function  GetNodeId(TmpNode:TTreeNode):integer;
    function  getLastNode(CurNode:TTreeNode;Var NextNode:TtreeNode;Var isPnode:boolean):TtreeNode;
    function  getNodeCount(TmpNode:TTreeNode):integer;        //获得当前节点所有子节点的数量(包括自己)
    function  getNodeNum(CurNode:TTreeNode):integer;    //获得当前节点在全树中的排行
    function  getNodePath(currentNode,baseNode:TtreeNode;basePath:String):String;
    procedure DelNodes(CurNode:TTreeNode);
    procedure DelNodeRec(CurNode:TTreeNode);
    procedure SaveIndexNode(CurNode:TTreeNode;AClass:TClassID );
    procedure SaveDoc(CurNode:TTreeNode; ClassDoc: TClassDoc);
    procedure UpdateIndexNode(CurNode:TTreeNode;AClass:TClassID);overload;
    procedure UpdateIndexNode(TmpNode:TTreeNode);overload;
    procedure UpdateDoc(ID:integer;ClassDoc:TClassDoc);
    function RegHotKey(hwnd:THandle;AHotKey:String):Boolean;
    { Public declarations }
  end;

var
  MainFrm: TMainFrm;


implementation
uses AddUnit,AdvanceUnit,TempUnit,SplashUnit,LoginUnit;
{$R *.dfm}

{TForm}
//=============================================================================//

procedure TMainFrm.DBookInit;
var
  ClassDoc:TClassDoc;
  DBPath,ConnectStr,TempStr,LastSubjectStr:String;
  inifile:TInifile;
  Index:integer;
begin
  SplashFrm.sPB_Splash.Visible:=True;
  SplashFrm.sPB_Splash.Max:=10;
  SplashFrm.sPB_Splash.StepBy(1);
  //初始化程序数据
  ExePath:=ExtractFileDir(ParamStr(0));
  UserID:='Demosoft';
  if ExePath[Length(ExePath)]='\' then Delete(ExePath,Length(ExePath),1);
  IniFileName:=ExePath+'\data\Config.ini';
  HtmlModeFileName:=ExePath+'\data\HtmlCfg.dat';
  if Not DirectoryExists(ExePath+'\data') then CreateDir(ExePath+'\data');
  HotKeyId:=GlobalAddAtom('DBook.Demosoft');   //注册全局热键原子
  FSearchList:=TList.Create;    //初始化搜索字段(保存节点ID的LIST)
  SplashFrm.sPB_Splash.StepIt;  //1
  //初始化ini文件
  inifile:=TInifile.Create(IniFileName);
  TempStr:=inifile.ReadString('常用设置','系统热键','');
  if TempStr<>'' then RegHotKey(handle,TempStr);
  ExportPath:=ExePath+'\OutPath';        //缺省的导出路径
  if Not DirectoryExists(ExportPath) then CreateDir(ExportPath);
  ExportPath:=inifile.ReadString('常用设置','导出网页路径',ExportPath);
  if Not DirectoryExists(ExportPath) then ExportPath:=ExePath+'\OutPath'; //用缺省的路径
  LastSubjectStr:=inifile.ReadString('常用设置','最近课题','');
  inifile.Free;
  //初始化TDBookBrowser类
  DBookBrowser:=TDBookBrowser.Create;
  DBookBrowser.Init;
  SplashFrm.sPB_Splash.StepIt;
  SplashFrm.sPB_Splash.StepIt;  //3
  //连接数据库
  DBPath:=ExePath+'\data\Data.ddb';
  ConnectStr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+
  DBPath+';Jet OLEDB:Database Password=DEMOSOFT;Persist Security Info=False';
  with ADOConnection1 do
  begin
    if Connected then Connected := False;
    ConnectionString := ConnectStr;
  end;
  ADOQuery1.Connection:=ADOConnection1;
  SplashFrm.sPB_Splash.StepIt;  //4
  //加载数据库数据
  LoadSubjectList;       //加载课题列表
  Index:= scbb_Subject.Items.IndexOf(LastSubjectStr);
  if Index<>-1 then scbb_Subject.ItemIndex:=Index;
  SplashFrm.sPB_Splash.StepIt;
  SplashFrm.sPB_Splash.StepIt;
  LoadSubjectNodeData(scbb_Subject.Text,sTV_Main);  //加载课题数据
  PUserPassword:=GetPassword(UserID);         //获得用户密码
  if PUserPassword<>'' then
    PIsNeedLogin:=True
  else
    PIsNeedLogin:=False;
  SplashFrm.sPB_Splash.StepIt;
  SplashFrm.sPB_Splash.StepIt;
  SplashFrm.sPB_Splash.StepIt;  //9
  //制作托盘图标
  MyIconData.cbSize :=sizeof(MyIconData);
  MyIconData.Wnd :=handle;
  MyIconData.uID :=1;
  MyIconData.uFlags :=7;
  MyIconData.uCallbackMessage :=WM_USER+1;
  MyIconData.hIcon :=Application.Icon.Handle ;{用自己的icon}
  TempStr:=Application.Title;
  StrCopy(MyIconData.szTip,PChar(TempStr));
  Shell_NotifyIcon(NIM_ADD,@MyIconData);
  SplashFrm.sPB_Splash.StepIt; //10
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin

  DBookInit;
end;

procedure TMainFrm.FormShow(Sender: TObject);
begin
  if PIsNeedLogin then
  begin
    With TLoginFrm.Create(Self) Do
    begin
      if ShowModal<>mrOk then
        Application.Terminate
      else
      begin
        PIsNeedLogin:=False;
        Free;
      end;
    end;

  end;
end;


procedure TMainFrm.FormClose(Sender: TObject; var Action: TCloseAction);
var
  inifile:TIniFile;
begin
  inifile:=TInifile.Create(IniFileName);
  inifile.WriteString('常用设置','最近课题',scbb_Subject.Text);
  inifile.Free;

end;

procedure TMainFrm.FormDestroy(Sender: TObject);
begin
  FSearchList.Free;
  Shell_NotifyIcon(NIM_DELETE,@MyIconData);
end;

//=============================================================================//


{Windows消息函数区}
//=============================================================================//
procedure TMainFrm.IconOnClick(var msg: TMessage);
var
 p: TPoint;
begin
  if (msg.lParam = WM_LBUTTONDBLCLK) then
  begin
    Show;
    Application.Restore;
    Application.BringToFront;
    Exit;
  end;
  if (msg.lParam = WM_RBUTTONDOWN) then
  begin
    GetCursorPos(p);
    if Self.Visible=True then
      mnl_show.Caption:='隐藏(&H)'
    else
      mnl_show.Caption:='显示(&S)';
    sPopMenu_Icon.Popup( p.x ,p.y );
    exit;
  end;
end;

procedure TMainFrm.WMHotKey(var Msg: TWMHotKey);
begin
  if (Msg.HotKey =HotKeyID) and (Self.Visible=False) then
  begin
    Show;
    Application.Restore;
    Application.BringToFront;
  end;
end;

procedure TMainFrm.WMSysMin(var Msg: TWMSYSCOMMAND);
begin
 if (Msg.CmdType =61472) then
 begin
  //showMessage('最小化,对不对?');
  Application.Minimize;
  Hide;
  Inherited;//调用先前的处理函数
 end
 else
  Inherited;
end;

//=============================================================================//


{ TDBookBrowser }
//=============================================================================//

constructor TDBookBrowser.Create;
begin
  FWebbrowser:= MainFrm.WebBrowser1;
  FModeName:=TStringList.Create;
  FModeContent:=TStringList.Create;
  FModeCount:=0;
  FHtmStr:='';
end;

destructor TDBookBrowser.Destroy;
begin
  FModeName.Free;
  FModeContent.Free;
  inherited;
end;

procedure TDBookBrowser.DisplayHtmlPage;
var
  VTmp: Variant;
  HTMLDocument: IHTMLDocument2;
begin

  VTmp := VarArrayCreate([0, 0], varVariant);
  VTmp[0]:=FHtmStr;
  HTMLDocument :=FWebBrowser.Document as IHTMLDocument2;
  HTMLDocument.Write(PSafeArray(TVarData(VTmp).VArray));
  HTMLDocument.Close;
end;

procedure TDBookBrowser.DisplayModalPage(ATitle,AInfo: String);
var
  VTmp: Variant;
  HTMLDocument: IHTMLDocument2;
  TempStr,Buf:String;
  TextF:Text;
begin
  Assignfile(TextF,ExePath+'\data\ModalPage.dat');
  Reset(TextF);
  While Not Eof(TextF) Do
  begin
    Readln(TextF,Buf);
    TempStr:=TempStr+Buf;
  end;
  CloseFile(TextF);
  TempStr:=AnsiReplaceStr(TempStr,'[TITLE]',ATitle);
  TempStr:=AnsiReplaceStr(TempStr,'[INFO]',AInfo);
  VTmp := VarArrayCreate([0, 0], varVariant);
  VTmp[0]:=TempStr;
  HTMLDocument :=FWebBrowser.Document as IHTMLDocument2;
  HTMLDocument.Write(PSafeArray(TVarData(VTmp).VArray));
  HTMLDocument.Close;
end;

procedure TDBookBrowser.ExportNodeToHtm(currentNode: TtreeNode);
var
 pi_id,pi_pid,pi_tmp:^integer;
 s_Exepath,s_path,s_filename,s_dir,s_cpt,s_memo,s_content,s_des,s_subject,s_ltmf,s_ct:String;
 str_html,str_temp:TStrings;
 tmpNode,nextNode:TtreeNode;
 isPnode:Boolean;
 ClassDoc:TClassDoc;
begin
 str_html:=TStringList.Create;
 str_temp:=TStringList.Create;
 s_Exepath:=ExtractFileDir(application.ExeName);
 pi_id:=currentNode.Data;
 isPnode:=false;
 with MainFrm Do
 begin
  tempFrm:=TtempFrm.Create(MainFrm);
  tempFrm.Caption:='导出当前节点';
  tempFrm.Show;
  tempFrm.Gauge1.MaxValue:=getNodeCount(currentNode);
  //tempFrm.Gauge1.StepBy(1);
  CreateNodeDir(currentNode,currentNode.Text);
  tmpNode:=currentNode;
  Repeat
   tmpNode:=getLastNode(tmpNode,nextNode,isPnode);
   pi_tmp:=tmpNode.Data;
   if isDocNode(tmpNode) then
   begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from DocData');
    ADOQuery1.SQL.Add('Where id ='+InttoStr(getNodeId(tmpNode)));
    ADOQuery1.Open;
    ClassDoc.Title :=ADOQuery1.fieldbyName('Caption').AsString;
    ClassDoc.MemoText :=ADOQuery1.fieldbyName('MemoText').AsString;
    ClassDoc.Description :=ADOQuery1.fieldbyName('Description').AsString;
    ClassDoc.LastModified:=ADOQuery1.fieldbyName('LastModified').AsString;
    ClassDoc.CreateTime:=ADOQuery1.fieldbyName('CreateTime').AsString;
    ClassDoc.DocText :=ADOQuery1.fieldbyName('DocText').AsString;
    ClassDoc.Subject:=ADOQuery1.fieldbyName('Subject').AsString;
    ClassDoc.HtmlMode:=ADOQuery1.fieldbyName('HtmlMode').AsString;
    ClassDoc.UserID:=UserID;
    setHtmStr(ClassDoc);
   end
   else
   begin
    setHtmStr(tmpNode,True);
   end;
   s_dir:=s_Exepath+'\'+getNodePath(tmpNode,currentNode,currentNode.Text);
   s_filename:= s_dir+'.htm';
   str_html.Clear;
   str_html.Add(FHtmStr);
   str_html.SaveToFile(s_filename);
   tempFrm.lbl_Status.Caption:='正在导出文件'+s_filename;
   //tempFrm.Gauge1.StepIt;
   tempFrm.Gauge1.Progress :=tempFrm.Gauge1.Progress +1;
   Application.ProcessMessages;
   tmpNode:=nextNode;
  Until pi_tmp^=pi_id^;
  str_html.Free;
  str_temp.Free;
  tempFrm.Free;
 end;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -