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

📄 mainunit.pas

📁 初次上传,不太会规类.这是一个电子文档收集的软件.支持从浏览器窗口中托拽到本地窗口中.个人以为比网文快抓,webcollecter之类的好.小,绿色,适用.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
//---------------------------------------------------------------------------
//(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 + -