亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mainfun.~pas

?? 一個漂亮的電子書籍閱讀管理器
?? ~PAS
字號:
//---------------------------------------------------------------------------
//(R)CopyRight KivenSoft International ,inc 1999
//單元名稱:主窗口附屬單元
//程序名稱:電子書庫
//作    者:李會文
//開始時間:1997.07.01
//最后修改:1999.07.15
//備注:此單元定義了主窗口一些實用函數段
//---------------------------------------------------------------------------
unit MainFun;


interface

function SaveItem:boolean;            //儲存當前節點的變動內容
function SaveIndex:boolean;           //儲存變動后的索引內容
function SaveSrm:boolean;             //保存主窗口中的數據庫
function CloseSrm:boolean;            //關閉數據庫
function CloseSrmQuery:boolean;       //是否保存對數據庫的改動
function OpenSrm(Fn:string):boolean;  //打開數據庫文件在主窗口中并裝入索引
function BrowseFolder:string;         //目錄瀏覽,返回被選擇的目錄,空為無選擇
function GetLastPathName(var Pn:string):string;//提取最后的路徑名
procedure SetOpenSrmWithApp(Value:boolean);//在注冊表文件中設置SRM文件關聯或取消
procedure ImportDir(var Dir,Mask:string);  //引入目錄下文件
function FormatTreeNodeString(Value:string):string;
                                      //格式化樹形視圖節點字符串防止無效字符


implementation
uses
  Classes, SysUtils, Controls, Windows, Registry, Forms, ComCtrls, CommCtrl,
  Messages, FileCtrl, ShlObj, MainUnit, SrmConst, SrmUnit, InputPw, RegUnit;

//儲存當前節點的變動內容--------------------------------------
function SaveItem:boolean;
var
  Ms:TMemoryStream;
  pInt:^integer;
begin
  Result:=true;
  if Srm=nil then Exit;

  with SrmForm do
  begin
    if TreeView.Selected=nil then Exit;   //要保存的節點為空時退出

    if (Srm.ItemHeadChanged) or (TreeView.Selected.Data=pointer(-1)) then
                                          //標題屬性有改變或是新增節點時
      with Srm.DataHead do
      begin
        ContextAuthorEdit.GetTextBuf(Author,16);
        ContextPasswordEdit.GetTextBuf(Password,12);
        ContextIndexEdit.GetTextBuf(SearchKey,52);
        pInt:=@DataType;
        pInt^:=TreeView.Selected.ImageIndex;
      end;

    if (RichEdit.Modified) or (TreeView.Selected.Data=pointer(-1)) then
                                          //內容有改變或是新增節點時
    begin
      with Srm.DataHead do
        if (RichEdit.GetTextLen<>0) then Num:=1 else Num:=0;
      TreeView.Selected.Data:=pointer(Srm.AddItemHead);
      Srm.IndexChanged:=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 (Srm.ItemHeadChanged) and (not Srm.ItemDataChanged) and
        (not RichEdit.Modified) then      //已有節點屬性改變但內容不變時
    begin
      Srm.EditItemHead(integer(TreeView.Selected.Data));
    end;

    RichEdit.Modified:=false;             //置相應的標志復位
    Srm.ItemHeadChanged:=false;
    Srm.ItemDataChanged:=false;
  end;
end;
//儲存變動后的索引內容-----------------------------------
function SaveIndex:boolean;
var
  Msh,Msd:TMemoryStream;
  i,n:integer;
  p:PTreeData;
  AList:TStringList;
  ANode:TTreeNode;
begin
  Result:=true;
  if Srm=nil then Exit;
  if not Srm.IndexChanged then Exit;      //索引沒改變時

  Msh:=TMemoryStream.Create;
  Msd:=TMemoryStream.Create;
  AList:=TStringList.Create;
  Msd.SetSize(sizeof(TTreeData)*SrmForm.TreeView.Items.Count);
  p:=Msd.Memory;
  n:=SrmForm.TreeView.Items.Count -1;
  ANode:=SrmForm.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);
  AList.Free;
  Srm.SaveIndex(Msh,Msd);
  Srm.IndexChanged:=false;
  Msh.Free;
  Msd.Free;
end;
//保存主窗口中的數據庫-------------------------------------
function SaveSrm:boolean;
begin
  Result:=true;
  if Srm=nil then Exit;
  SaveItem;
  SaveIndex;
  if Srm.DbChanged then                   //如果數據庫屬性有變動
  begin
    with Srm.FileHead,SrmForm do
    begin
      DbAuthorEdit.GetTextBuf(Author,16);
      DbPasswordEdit.GetTextBuf(Password,12);
      Srm.SaveSrmFile;
      Srm.IndexChanged:=false;
      Srm.DbChanged:=false;
    end;
  end;
end;
//關閉數據庫-------------------------------------------
function CloseSrm:boolean;
begin
  Result:=true;
  if Srm<>nil then
  begin
    SaveSrm;
    Srm.Free;
    Srm:=nil;
  end;
  with SrmForm.TreeView do  //清空樹形視圖
  begin
    SendMessage(Handle,TVM_SELECTITEM,TVGN_CARET,LPARAM(0));
    SendMessage(Handle,WM_SETREDRAW,0,0);
                                            //禁止重繪
    SendMessage(Handle, TVM_DELETEITEM, 0, Longint(TVI_ROOT));
                                            //刪除所有節點
    SendMessage(Handle,WM_SETREDRAW,-1,0);
                                            //允許重繪
    Selected:=nil;
  end;
  with SrmForm do          //編輯框和其它的清空
  begin
    RichEdit.Text:='';
    DbAuthorEdit.Text:='';
    DbPasswordEdit.Text:='';
    DbBuildDateEdit.Text:='';
    DbEditDateEdit.Text:='';
    ContextAuthorEdit.Text:='';
    ContextPasswordEdit.Text:='';
    ContextPubDateEdit.Text:='';
    ContextIndexEdit.Text:='';
    ContextTypeRadioGroup.ItemIndex:=-1;
  end;
end;
//是否保存對數據庫的改動------------------------------------------
function CloseSrmQuery:boolean;
begin
  Result:=true;
  if Srm=nil then Exit;                   //沒有打開的數據文件
  if not AppIni.DelRecordQuery then exit; //不提示即保存
  if (SrmForm.RichEdit.Modified or Srm.ItemDataChanged or Srm.ItemHeadChanged or
      Srm.IndexChanged or Srm.DbChanged) then
  begin
    case MessageBox(SrmForm.Handle,csSaveQuery,csAppName,MB_YESNOCANCEL or
                    MB_ICONQUESTION) of
      IDYES:Result:=true;
      IDNO:
      begin
        Result:=true;
        SrmForm.RichEdit.Modified:=false;
        Srm.ItemHeadChanged:=false;
        Srm.ItemDataChanged:=false;
        Srm.IndexChanged:=false;
        Srm.DbChanged:=false;
      end;
      IDCANCEL:Result:=false;
    end;
  end;
end;
//打開數據庫文件在主窗口中并裝入索引--------------------------
function OpenSrm(Fn:string):boolean;
var
  Ps,UserPs:string;
  Msh,Msd:TMemoryStream;
  i,j,n:integer;
  p:PTreeData;
  AList: TStringList;
  ALevel,AOldLevel:integer;
  AParentNode:TTreeNode;
  StrBuf:PChar;
begin
  Result:=true;
  Application.ProcessMessages;            //恢復原窗口

  Srm:=TSrmObject.Create(Fn,fmOpenReadWrite);

 { if Srm.FileHead.Password[0]<>#0 then    //密碼保護
  begin
    InPwForm:=TInPwForm.Create(SrmForm);
    with InPwForm do
    begin
      Caption:=csAppName;
      InputLabel.Caption:=csPasswordTitle;
      if ShowModal=mrCancel then
      begin
        Srm.Free;
        Srm:=nil;
        Free;
        Result:=false;
        Exit;
      end;
      Ps:=Edit.Text;
      UserPs:=string(Srm.FileHead.Password);
      if Ps<>UserPs then
      begin
        if ModalResult<>mrCancel then
          Application.MessageBox(csAppName,csPasswordError,MB_OK);
        Srm.Free;
        Srm:=nil;
        Result:=false;
        Free;
        Exit;
      end;
      Free;
    end;
  end;       }

  Screen.Cursor:=crHourGlass;
  Msh:=TMemoryStream.Create;
  Msd:=TMemoryStream.Create;
  Srm.LoadIndex(Msh,Msd);                 //裝入索引

  AList := TStringList.Create;
  SrmForm.TreeView.Items.BeginUpdate;
  AList.LoadFromStream(Msh);              //裝入到字符串列表中
  SendMessage(SrmForm.TreeView.Handle, TVM_DELETEITEM, 0, Longint(TVI_ROOT));
  AOldLevel := 0;
  AParentNode := nil;
  n:=AList.Count-1;
  p:=Msd.Memory;
  for i:=0 to n do                        //根據TAB的多少得到相應級別
  begin
    StrBuf:=PChar(AList.Strings[i]);
    ALevel:=0;
    while StrBuf^=#9 do                   //得該項所在層數
    begin
      Inc(StrBuf);
      Inc(ALevel);
    end;
    if (ALevel<AOldLevel) or (AParentNode<>nil) then
    begin                                 //返回該項的上級節點
      for j:=AOldLevel downto ALevel do
      begin
        AParentNode:=AParentNode.Parent;
      end;
    end;
    AParentNode:=SrmForm.TreeView.Items.AddChildObject(AParentNode,StrBuf,
                                      pointer(p.Pos));
    AParentNode.ImageIndex:=p.DataType;   //得該節點類型
    AOldLevel:=ALevel;
    p:=pointer(integer(p)+sizeof(TTreeData));
  end;
  SrmForm.TreeView.Items.EndUpdate;
  AList.Free;
  Msd.Free;
  Msh.Free;

  with Srm.FileHead,SrmForm do            //顯示文件屬性
  begin
    DbAuthorEdit.Text:=String(Author);
    DbPasswordEdit.Text:=String(Password);
    DbBuildDateEdit.Text:=DateToStr(BuildDate);
    DbEditDateEdit.Text:=DateToStr(EditDate);
  end;

  SrmForm.TreeView.Selected:=nil;         //置當前選擇項為空
  with Srm do
  begin
    DbChanged:=false;                     //數據庫變動標志復原
    IndexChanged:=false;                  //索引變動標志復原
    ItemHeadChanged:=false;
    ItemDataChanged:=false;
  end;

  Screen.Cursor:=crDefault;
end;
//目錄瀏覽,返回被選擇的目錄,空為無選擇---------------------------
function BrowseFolder:string;
var
  Info:TBrowseInfo;
  Dir:array[0..260] of char;
  ItemId:PItemIDList;
begin
  with Info do
  begin
    hwndOwner:=SrmForm.Handle;
    pidlRoot:=nil;
    pszDisplayName:=nil;
    lpszTitle:=csBrowseFolderInfo;
    ulFlags:=0;
    lpfn:=nil;
    lParam:=0;
    iImage:=0;
  end;
  ItemId:=SHBrowseForFolder(Info);
  if ItemId<>nil then
  begin
  SHGetPathFromIDList(ItemId,@Dir);
  Result:=string(Dir);
  end;
end;
//提取最后的路徑名----------------------------------------------
function GetLastPathName(var Pn:string):string;
var
  Size:integer;
begin
  Result:=Pn;
  if Result[Length(Result)]='\' then Delete(Result,Length(Result),1);
  repeat
    Size:=Pos('\',Result);
    if Size>0 then Delete(Result,1,Size);
  until Size=0;
end;
//在注冊表文件中設置SRM文件關聯或取消-----------------------------
procedure SetOpenSrmWithApp(Value:boolean);
var
  s:string;
begin
  with TRegistry.Create do
  begin
    RootKey:=HKEY_CLASSES_ROOT;
    s:=csSrmFileType;
    if Value then                         //建立相應的鍵值
    begin
      OpenKey(s,true);                    //s:='\.srm'
      Delete(s,1,2);
      WriteString('',s);                  //:s='srm'
      Insert('\',s,1);
      OpenKey(s,true);                    //s:='\srm';
      WriteString('',csSrmFileDescribe);
      OpenKey(csSrmCommand,true);
      WriteString('','"'+Application.ExeName+'" %1');
    end
    else                                  //刪除相應的鍵值
    begin
      DeleteKey(s);
      Delete(s,2,1);
      DeleteKey(s);                       //s:='\srm'
    end;
    Free;
  end;
end;
//從目錄中引入--------------------------------------------------------------
procedure ImportDir(var Dir,Mask:string);
var
  SRec: TSearchRec;
  ANode,OldNode:TTreeNode;
  Path,Fn:string;
  retval,oldlen:integer;
  SubFlag,ItemFlag:boolean;
begin
  Path:=Dir;  //搜索路徑
  oldlen := Length(Dir);
  retval := FindFirst( Dir+Mask,faAnyFile,SRec);
  ItemFlag:=true;
  SubFlag:=true;
  OldNode:=SrmForm.TreeView.Selected;
  ANode:=nil;

  While retval=0 Do
  Begin
    If (SRec.Attr and (faDirectory or faVolumeID)) = 0 Then //是文件
    begin
      Fn:=SRec.Name;
      Delete(Fn,Length(Fn)-3,4);
      if ItemFlag then
      begin
        ItemFlag:=false;
        ANode:=SrmForm.TreeView.Items.AddChildObjectFirst
                       (SrmForm.TreeView.Selected,Fn,pointer(-1));
      end
      else
        ANode:=SrmForm.TreeView.Items.AddObjectFirst
                       (SrmForm.TreeView.Selected,Fn,pointer(-1));
      ANode.ImageIndex:=2;  //初始化添加數據

      with Srm.DataHead do
      begin
        DataType:=2;
        Author[0]:=#0;
        Password[0]:=#0;
      end;
      SrmForm.TreeView.Selected:=ANode;
      SrmForm.RichEdit.Lines.LoadFromFile(Dir+SRec.Name);
    end;
    retval := FindNext(SRec);
  End;
  SysUtils.FindClose(SRec);
  if not ItemFlag then SrmForm.TreeView.Selected:=ANode.Parent;

  retval:=FindFirst(path+'*.*',faDirectory,SRec); //目錄搜索
  While retval=0 Do
  Begin
    If (SRec.Attr and faDirectory)<>0 Then //是目錄
      If (SRec.Name <> '.') and (SRec.Name <> '..') Then
      Begin
        Path:=Path+SRec.Name+'\';

        if SubFlag then
        begin
          SubFlag:=false;
          ANode:=SrmForm.TreeView.Items.AddChildObjectFirst
                     (SrmForm.TreeView.Selected,GetLastPathName(Path),
                      pointer(-1));
        end
        else
          ANode:=SrmForm.TreeView.Items.AddObjectFirst
                     (SrmForm.TreeView.Selected,GetLastPathName(Path),
                      pointer(-1));
        ANode.ImageIndex:=1;
        with Srm.DataHead do
        begin
          DataType:=1;
          Author[0]:=#0;
          Password[0]:=#0;
        end;
        SrmForm.TreeView.Selected:=ANode;
        SrmForm.RichEdit.Modified:=true;

        ImportDir(path,mask);
        Delete(path,oldlen+1,260);
      End;
    retval := FindNext(SRec);
  End;
  SysUtils.FindClose(SRec);
  SrmForm.TreeView.Selected:=OldNode;
end;
//格式化樹形視圖節點字符串防止無效字符-----------------------------------
function FormatTreeNodeString(Value:string):string;
var
  Ap,At:pchar;
begin
  Value:=TrimLeft(Value);
  Value:=TrimRight(Value);
  Ap:=pchar(Value);
//  while Ap^ in [#1..#32] do inc(Ap);      //去掉開頭小于等于空格的字符
  At:=Ap;
  while At^<>#0 do
  begin
    if At^ in [#1..#31] then At^:=#32;    //將小于空格的無效字符替換成空格
    inc(At);
  end;
  Result:=string(Ap);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级一级性生活免费录像| 欧美一级二级三级乱码| 欧美日韩三级一区| 久久久国产综合精品女国产盗摄| 亚洲免费三区一区二区| 久久精品国产999大香线蕉| 色偷偷88欧美精品久久久| 欧美α欧美αv大片| 亚洲国产aⅴ成人精品无吗| 国产成人av电影在线播放| 欧美一区二区视频观看视频| 亚洲人成7777| 丰满岳乱妇一区二区三区| 欧美va亚洲va香蕉在线| 亚洲成人你懂的| 99视频国产精品| 欧美国产日韩亚洲一区| 国模少妇一区二区三区| 欧美一区二区三区免费在线看| 一区二区三区免费在线观看| 成人免费精品视频| 亚洲国产精华液网站w| 韩国v欧美v日本v亚洲v| 日韩一级二级三级| 欧美aaaaaa午夜精品| 555www色欧美视频| 婷婷综合五月天| 欧美剧情电影在线观看完整版免费励志电影| 国产精品成人一区二区三区夜夜夜| 国产精品中文字幕一区二区三区| 精品99999| 国产一区二区三区美女| 久久精品水蜜桃av综合天堂| 精品无人码麻豆乱码1区2区| 欧美精品一区二区不卡| 九九精品一区二区| 精品国产乱码久久久久久浪潮 | 欧美激情在线免费观看| 国产一区中文字幕| 中文字幕的久久| 国产白丝网站精品污在线入口| 国产精品色在线| 99精品欧美一区二区三区小说 | 亚洲图片欧美综合| 91精品国产品国语在线不卡| 蜜臀精品久久久久久蜜臀| 日韩视频一区在线观看| 国产一区二区三区精品视频| 久久久噜噜噜久噜久久综合| 成人v精品蜜桃久久一区| 亚洲三级在线观看| 欧美日韩不卡一区二区| 精品一区二区三区蜜桃| 日韩手机在线导航| 亚洲国产日韩精品| 毛片一区二区三区| 日本高清不卡aⅴ免费网站| 久久91精品久久久久久秒播| 另类小说视频一区二区| 欧美www视频| 成人精品gif动图一区| 一区二区三区在线视频免费| 欧美精品电影在线播放| 国产精品12区| 一区二区三区免费在线观看| 91麻豆精品国产91久久久使用方法| 久久精品国产一区二区| 中文字幕在线观看不卡| 欧美午夜一区二区三区免费大片| 久久se精品一区精品二区| 国产精品国产三级国产aⅴ入口 | 亚洲视频香蕉人妖| 欧洲激情一区二区| 国产精品美女久久久久av爽李琼| 国产v综合v亚洲欧| 日韩美女主播在线视频一区二区三区| 国内偷窥港台综合视频在线播放| 国产精品女人毛片| 欧美一级高清片| 91美女在线观看| 激情综合网av| 性欧美疯狂xxxxbbbb| 亚洲国产精品99久久久久久久久 | 久久99精品久久久久久国产越南| 综合激情成人伊人| 欧美白人最猛性xxxxx69交| 在线观看视频欧美| 国产高清久久久久| 美国一区二区三区在线播放| 樱桃视频在线观看一区| 国产精品人妖ts系列视频| 日韩色在线观看| 欧美美女一区二区在线观看| av不卡免费电影| 国产不卡在线视频| 精品亚洲免费视频| 青青国产91久久久久久| 亚洲国产精品久久艾草纯爱| 亚洲色图在线视频| 国产精品久久久久久福利一牛影视 | 99视频一区二区| 久久99精品一区二区三区| 天天影视网天天综合色在线播放 | 国模一区二区三区白浆| 日韩和欧美一区二区三区| 亚洲一区二区五区| 亚洲日本韩国一区| 综合分类小说区另类春色亚洲小说欧美| 久久伊人中文字幕| 精品国产第一区二区三区观看体验 | 成人福利电影精品一区二区在线观看| 婷婷国产在线综合| 亚洲第一在线综合网站| 亚洲国产一区二区视频| 一区二区三区国产| 亚洲国产一区二区a毛片| 亚洲一区日韩精品中文字幕| 亚洲国产精品久久久久秋霞影院 | 免费观看在线色综合| 麻豆高清免费国产一区| 日韩高清一级片| 蜜桃av一区二区在线观看| 另类小说色综合网站| 激情综合色综合久久| 国产精品一区在线观看你懂的| 国产精品一区二区视频| caoporn国产精品| 色婷婷久久久亚洲一区二区三区| 色婷婷久久综合| 5566中文字幕一区二区电影| 日韩免费一区二区三区在线播放| 精品福利一区二区三区| 中文一区二区在线观看| 一区二区三区在线观看国产| 亚洲大片在线观看| 久久99久久99精品免视看婷婷| 国产精品99久久久久久宅男| 9久草视频在线视频精品| 日本黄色一区二区| 欧美一区二区三区四区视频| 国产亚洲欧美日韩俺去了| 亚洲色图视频网| 性感美女极品91精品| 国产精品一区二区x88av| av色综合久久天堂av综合| 欧美日韩国产一二三| 2023国产一二三区日本精品2022| 国产精品久久久爽爽爽麻豆色哟哟 | 国产日韩欧美电影| 亚洲青青青在线视频| 亚洲一区二区三区小说| 激情综合色综合久久综合| 91视视频在线直接观看在线看网页在线看| 欧美日韩中文一区| 国产亚洲综合av| 日韩专区中文字幕一区二区| 国产传媒久久文化传媒| 欧美性大战久久久| 国产欧美一二三区| 日韩精品成人一区二区在线| 国产不卡在线一区| 日韩网站在线看片你懂的| 亚洲日本va午夜在线电影| 激情六月婷婷综合| 精品视频999| 最新国产精品久久精品| 美腿丝袜亚洲色图| 欧美日韩免费电影| 中文字幕一区二区三| 国产麻豆精品一区二区| 欧美日韩久久不卡| 一区二区三区精品在线| 国产99精品视频| 日韩免费成人网| 亚洲国产成人av| 一本大道av伊人久久综合| 国产日韩三级在线| 久久99精品网久久| 91精品国产品国语在线不卡| 亚洲一区二区在线播放相泽 | 韩国欧美一区二区| 在线不卡中文字幕播放| 一区二区三区精品| 91啪九色porn原创视频在线观看| 久久蜜桃一区二区| 久久电影网电视剧免费观看| 欧美日韩三级在线| 亚洲午夜一二三区视频| 色94色欧美sute亚洲线路一ni | 欧美精品一区二区三区蜜臀| 日本欧美一区二区| 884aa四虎影成人精品一区| 亚洲一区二区欧美| 欧美色综合天天久久综合精品| 亚洲欧美一区二区在线观看| www.久久久久久久久| 国产精品剧情在线亚洲| 99视频有精品| 亚洲欧美视频在线观看视频| 色综合一个色综合|