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

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

?? frmmain.pas

?? 一個基于Socket的在線更新程序
?? PAS
字號:
unit frmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActnList, StdCtrls, hxUpdate, ComCtrls, RzButton, ExtCtrls,
  RzPanel, GIFImage, RzTreeVw, RzBorder, RzPrgres, RzLabel, RzListVw,
  RzLstBox, hxFileRes, hxClasses, hxVersion, hxPopup, Menus;

type
  TMainForm = class(TForm)
    RzPanel1: TRzPanel;
    RzPanel2: TRzPanel;
    RzPanel3: TRzPanel;
    Notebook1: TNotebook;       
    ActionList1: TActionList;
    actOpen: TAction;
    actClose: TAction;
    actDownloadFileList: TAction;
    actDowloadSelectedFiles: TAction;
    actDownloadNewFiles: TAction;
    actBack: TAction;
    actNext: TAction;
    actCancel: TAction;
    actFinish: TAction;
    RzButton2: TRzButton;
    RzButton3: TRzButton;
    RzButton4: TRzButton;
    RzPanel4: TRzPanel;
    Image1: TImage;
    RzPanel5: TRzPanel;
    tvNewFiles: TRzCheckTree;
    RzPanel6: TRzPanel;
    lvUpdateFiles: TRzListView;
    RzLabel1: TRzLabel;
    pbTotalDownload: TRzProgressBar;
    lblDownloadFileName: TRzLabel;
    pbFileDownload: TRzProgressBar;
    RzPanel7: TRzPanel;
    RzLabel3: TRzLabel;
    RzLabel4: TRzLabel;
    RzLabel5: TRzLabel;
    lbInstalled: TRzListBox;
    RzLabel6: TRzLabel;
    RzLabel7: TRzLabel;
    RzButton1: TRzButton;
    actConfig: TAction;
    RzLabel8: TRzLabel;
    RzLabel9: TRzLabel;
    RzLabel10: TRzLabel;
    pbFileList: TRzProgressBar;
    lblDownloadFileList: TRzLabel;
    RzLabel12: TRzLabel;
    RzLabel2: TRzLabel;
    actViewFileInfo: TAction;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    Label1: TRzLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure actOpenUpdate(Sender: TObject);
    procedure actCloseUpdate(Sender: TObject);
    procedure actOpenExecute(Sender: TObject);
    procedure actCloseExecute(Sender: TObject);
    procedure actDownloadFileListUpdate(Sender: TObject);
    procedure actDowloadSelectedFilesExecute(Sender: TObject);
    procedure actDowloadSelectedFilesUpdate(Sender: TObject);
    procedure actDownloadFileListExecute(Sender: TObject);
    procedure actDownloadNewFilesUpdate(Sender: TObject);
    procedure actBackUpdate(Sender: TObject);
    procedure actNextUpdate(Sender: TObject);
    procedure actFinishUpdate(Sender: TObject);
    procedure actBackExecute(Sender: TObject);
    procedure actNextExecute(Sender: TObject);
    procedure actCancelExecute(Sender: TObject);
    procedure actFinishExecute(Sender: TObject);
    procedure actCancelUpdate(Sender: TObject);
    procedure actConfigExecute(Sender: TObject);
    procedure actViewFileInfoUpdate(Sender: TObject);
    procedure actViewFileInfoExecute(Sender: TObject);
  private
    { Private declarations }
    FPopup: ThxPopup;
    FVersionList: TVersionList;
    procedure DoDownloadFileList(Sender: TObject; DownloadStatus: TDownloadStatus;
      const WorkCount: Integer);
    procedure DoDownloadFiles(Sender: TObject; DownloadStatus: TDownloadStatus;
      const WorkCount: Integer);

    function GetNewVersion(FileName: string): TVersion;
    function GetOldVersion(FileName: string): TVersion;
    procedure RefreshInstalledFiles;
    procedure RefreshFileList(TreeNodes: TTreeNodes; Tree: TResTree);
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses
  frmConfig, hxClientApp, hxSysUtils;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Caption:= 'LiveUpdate - ' + ParamStr(1);
  FPopup:= ThxPopup.Create(nil);
  G_ClientApp:= ThxClientApp.Create(ParamStr(1));
  // 顯示已安裝的文件列表
  FVersionList:= TVersionList.Create(ExtractFilePath(ParamStr(0)) + ParamStr(1) + '.ver');
  RefreshInstalledFiles;
  Notebook1.PageIndex:= 0;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FVersionList.Free;
  G_ClientApp.Free;
  FPopup.Free;
end;

procedure TMainForm.actOpenUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= not GetClientApp.UpdateClient.Active;
end;

procedure TMainForm.actCloseUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= GetClientApp.UpdateClient.Active;
end;

procedure TMainForm.actOpenExecute(Sender: TObject);
begin
  with GetClientApp.Settings do
    GetClientApp.UpdateClient.Open(ServerIP, ServerPort);
end;

procedure TMainForm.actCloseExecute(Sender: TObject);
begin
  GetClientApp.UpdateClient.Close;
end;

procedure TMainForm.actDownloadFileListUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= GetClientApp.UpdateClient.Active;
end;

procedure TMainForm.actDowloadSelectedFilesExecute(Sender: TObject);
var
  I: Integer;
  slFiles: TStrings;
  TreeNode: TTreeNode;
begin
  slFiles:= TStringList.Create;
  try
    for I:= 0 to tvNewFiles.Items.Count - 1 do
      if tvNewFiles.Items[I].Selected then
      begin
        TreeNode:= tvNewFiles.Items[I];
        case PResInfo(TreeNode.Data)^.ResType of
          rtFile: slFiles.Add(PResInfo(TreeNode.Data)^.DownloadURL);
          rtDirectory:
          begin
            TreeNode:= TreeNode.getFirstChild;
            while TreeNode <> nil do
            begin
              if PResInfo(TreeNode.Data)^.ResType = rtFile then
                slFiles.Add(PResInfo(TreeNode.Data)^.DownloadURL);
              TreeNode:= TreeNode.getNextSibling;
            end;
          end;
        end;
      end;

    GetClientApp.UpdateClient.DownloadFiles(slFiles, nil);
  finally
    slFiles.Free;
  end;
end;

procedure TMainForm.actDowloadSelectedFilesUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= GetClientApp.UpdateClient.Active;
end;

procedure TMainForm.actDownloadFileListExecute(Sender: TObject);
begin
  GetClientApp.UpdateClient.DownloadFileList(nil);
end;

procedure TMainForm.actDownloadNewFilesUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= GetClientApp.UpdateClient.Active;
end;

procedure TMainForm.actBackUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= (Notebook1.PageIndex > 0) and
    (Notebook1.PageIndex <> Notebook1.Pages.Count - 1) and
    ((Sender as TAction).Tag = 0);
end;

procedure TMainForm.actNextUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= Notebook1.PageIndex < Notebook1.Pages.Count - 1;
end;

procedure TMainForm.actFinishUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= Notebook1.PageIndex = Notebook1.Pages.Count - 1;
end;

procedure TMainForm.actBackExecute(Sender: TObject);
begin
  Notebook1.PageIndex:= Notebook1.PageIndex - 1;
end;

procedure TMainForm.actNextExecute(Sender: TObject);
var
  I: Integer;
  slFiles: TStrings;
  FileSize: Integer;
  pInfo: PResInfo;
begin
  Notebook1.PageIndex:= Notebook1.PageIndex + 1;
  case Notebook1.PageIndex of
    1:  // download file list
    begin
      if GetClientApp.UpdateClient.Active then
        GetClientApp.UpdateClient.Close;
      lblDownloadFileList.Caption:= '正在連接服務器...';
      with GetClientApp.Settings do
        GetClientApp.UpdateClient.Open(ServerIP, ServerPort);
      GetClientApp.UpdateClient.DownloadFileList(DoDownloadFileList);
    end;
    2: // download files
    begin
      slFiles:= TStringList.Create;
      try
        lvUpdateFiles.Clear;
        FileSize:= 0;
        for I:= 0 to tvNewFiles.Items.Count - 1 do
        begin
          pInfo:= PResInfo(tvNewFiles.Items[I].Data);
          if (tvNewFiles.ItemState[I] = csChecked) and (pInfo^.ResType <> rtDirectory) then
          begin
            slFiles.Add(pInfo^.DownloadURL);
            FileSize:= FileSize + pInfo^.FileSize;

            with lvUpdateFiles.Items.Add do
            begin
              Caption:= pInfo^.FileName;
              SubItems.Add(IntToStr(pInfo^.FileSize));
              SubItems.Add('0');
              Data:= pInfo;
            end;
          end;
        end;

        if slFiles.Count <> 0 then
        begin
          pbTotalDownload.TotalParts:= FileSize;
          GetClientApp.UpdateClient.DownloadFiles(slFiles, DoDownloadFiles);
        end
        else
          Notebook1.PageIndex:= 3;
      finally
        slFiles.Free;
      end;
    end;
  end;
end;

procedure TMainForm.actCancelExecute(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.actFinishExecute(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.actCancelUpdate(Sender: TObject);
begin
  if Notebook1.PageIndex = Notebook1.Pages.Count - 1 then
    (Sender as TAction).Caption:= '關閉'
  else
    (Sender as TAction).Caption:= '取消';
end;

procedure TMainForm.actConfigExecute(Sender: TObject);
begin
  // Todo:配置網絡
  ShowConfigForm;
end;

procedure TMainForm.DoDownloadFileList(Sender: TObject; DownloadStatus: TDownloadStatus;
  const WorkCount: Integer);
begin
  case DownloadStatus of
    dsBegin:
    begin
      pbFileList.Percent:= 0;
      lblDownloadFileList.Caption:= '正在下載最新文件列表...';
    end;
    dsEnd:
    begin
      RefreshFileList(tvNewFiles.Items, (Sender as TDownloadFileListThread).ResTree);
      pbFileList.Percent:= 100;
      lblDownloadFileList.Caption:= '文件列表下載完畢';
    end;
  end;
end;

procedure TMainForm.DoDownloadFiles(Sender: TObject; DownloadStatus: TDownloadStatus;
  const WorkCount: Integer);

  function IndexOfNewFile(FileName: string): Integer;
  var
    I: Integer;
  begin
    Result:= -1;
    for I:= 0 to lvUpdateFiles.Items.Count - 1 do
      if SameText(PResInfo(lvUpdateFiles.Items[I].Data)^.DownloadURL, FileName) then
      begin
        Result:= I;
        Exit;
      end;
  end;

var
  Index: Integer;
  FileName, NewVersion: string;
begin
  case DownloadStatus of
    dsBegin:
    begin
      //pbTotalDownload.TotalParts:= WorkCount;
      pbTotalDownload.PartsComplete:= 0;
    end;
    dsFileBegin:
    begin
      pbFileDownload.TotalParts:= WorkCount;
      pbFileDownload.PartsComplete:= 0;
      lblDownloadFileName.Caption:= (Sender as TDownloadFilesThread).DownloadFileName;
    end;
    dsFileData:
    begin
      pbFileDownload.IncParts(WorkCount);
      pbTotalDownload.IncParts(WorkCount);
      FileName:= (Sender as TDownloadFilesThread).DownloadFileName;
      Index:= IndexOfNewFile(FileName);
      if Index <> -1 then
        lvUpdateFiles.Items[Index].SubItems[1]:= IntToStr(pbFileDownload.Percent);
    end;
    dsFileEnd:
    begin
      // 更新歷史版本號
      FileName:= (Sender as TDownloadFilesThread).DownloadFileName;
      Index:= IndexOfNewFile(FileName);
      if Index <> -1 then
      begin
        NewVersion:= PResInfo(lvUpdateFiles.Items[Index].Data)^.Version;
        FVersionList.Update((Sender as TDownloadFilesThread).DownloadFileName, NewVersion);
      end;
      pbFileDownload.Percent:= 100;
      //pbTotalDownload.PartsComplete:= pbTotalDownload.PartsComplete + WorkCount;
    end;
    dsEnd:
    begin
      FPopup.Title:= '提示';
      FPopup.Text:= '程序更新完畢。';
      FPopup.Popup;
      // 自動跳到最后一頁
      Notebook1.PageIndex:= Notebook1.Pages.Count - 1;
      actBack.Tag:= 1;
    end;
  end;
end;

procedure TMainForm.RefreshFileList(TreeNodes: TTreeNodes; Tree: TResTree);

  procedure TravelTree(Node: TNode; TreeNode: TTreeNode);
  var
    I: Integer;
  begin
    if Node = nil then Exit;
    with PResInfo(Node.Data)^ do
      case ResType of
        rtDirectory:
        begin
          TreeNode:= TreeNodes.AddChild(TreeNode, Node.Text);
          TreeNode.Data:= Node.Data;
        end;
      else
        // 在此處比較版本
        if not SameVersion(Version, GetOldVersion(DownloadURL)) then
        begin
          TreeNode:= TreeNodes.AddChild(TreeNode, Node.Text);
          TreeNode.Data:= Node.Data;
          tvNewFiles.ItemState[tvNewFiles.Items.Count - 1]:= csChecked;
        end;
      end;
    for I:= 0 to Node.Count - 1 do
      TravelTree(Node.Children[I], TreeNode);
  end;

var
  I: Integer;
  Node: TNode;
begin
  TreeNodes.BeginUpdate;
  try
    TreeNodes.Clear;
    Node:= Tree.RootNode;
    for I:= 0 to Node.Count - 1 do
      TravelTree(Node.Children[I], nil);

    // 刪除空目錄
    for I:= TreeNodes.Count - 1 downto 0 do
      if PResInfo(TreeNodes.Item[I].Data)^.ResType = rtDirectory then
        if not TreeNodes.Item[I].HasChildren then
          TreeNodes.Item[I].Delete;

  finally
    TreeNodes.EndUpdate;
  end;
end;


procedure TMainForm.RefreshInstalledFiles;
var
  I: Integer;
begin
  lbInstalled.Items.BeginUpdate;
  try
    lbInstalled.Items.Clear;
    for I:= 0 to FVersionList.Count - 1 do
      lbInstalled.Items.Add(FVersionList[I]^.FileName);
  finally
    lbInstalled.Items.EndUpdate;
  end;
end;

procedure TMainForm.actViewFileInfoUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= tvNewFiles.Selected <> nil;
end;

procedure TMainForm.actViewFileInfoExecute(Sender: TObject);
var
  Str: string;
begin
  with PResInfo(tvNewFiles.Selected.Data)^ do
  begin
    Str:= 'FileName:' + FileName + #13#10;
    Str:= Str + 'Description:' + Description + #13#10;
    Str:= Str + 'FileSize:' + IntToStr(FileSize) + #13#10;
    Str:= Str + 'FileAttr:' + IntToStr(FileAttr) + #13#10;
    Str:= Str + 'Version:' + Version + #13#10;
    Str:= Str + 'ResType:' + IntToStr(Integer(ResType)) + #13#10;
    Str:= Str + 'DownloadURL:' + DownloadURL;
    ShowMessage(Str);
  end;
end;

function TMainForm.GetOldVersion(FileName: string): string;
var
  Index: Integer;
begin
  Index:= FVersionList.IndexOf(FileName);
  if Index <> -1 then
    Result:= FVersionList[Index].Version
  else
    Result:= 'Unknown';
end;

function TMainForm.GetNewVersion(FileName: string): TVersion;
var
  I: Integer;
begin
  Result:= '0';
  for I:= 0 to tvNewFiles.Items.Count - 1 do
  begin
    if SameText(PResInfo(tvNewFiles.Items[I].Data)^.FileName, FileName) then
    begin
      Result:= PResInfo(tvNewFiles.Items[I].Data)^.Version;
      Break;
    end;
  end;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99免费精品视频| 久久午夜色播影院免费高清| 欧美xingq一区二区| 亚洲欧美另类久久久精品2019| 午夜精品成人在线视频| 97久久久精品综合88久久| 精品久久人人做人人爰| 一片黄亚洲嫩模| 国产成人高清视频| 欧美大片免费久久精品三p| 亚洲午夜av在线| 色综合色综合色综合| 国产拍揄自揄精品视频麻豆| 美女被吸乳得到大胸91| 欧美日韩午夜在线视频| 亚洲另类春色国产| 91在线观看美女| 欧美日韩国产另类一区| 欧美va亚洲va香蕉在线| 亚洲综合视频网| 成人动漫一区二区| 国产欧美一区二区三区鸳鸯浴 | 欧美专区日韩专区| 中文字幕五月欧美| 成人av在线资源网| 中文字幕精品在线不卡| 国产精品一区久久久久| 久久品道一品道久久精品| 青青草伊人久久| 日韩一区二区在线免费观看| 欧美a级理论片| 欧美一区二区三区四区久久| 美国精品在线观看| 精品国产91久久久久久久妲己| 久久99精品久久久| 精品国产3级a| 成人av网站大全| 亚洲人成在线观看一区二区| 色婷婷综合久久| 亚洲第四色夜色| 欧美一级夜夜爽| 国内一区二区视频| 欧美激情一区二区三区蜜桃视频 | 五月激情六月综合| 91精品国产综合久久小美女| 久草这里只有精品视频| 久久久久久电影| 99久久免费视频.com| 一卡二卡欧美日韩| 91精品福利在线一区二区三区| 久久99精品一区二区三区 | 亚洲精品成人a在线观看| 欧美中文字幕亚洲一区二区va在线| 亚洲成人黄色影院| 精品国产一区二区在线观看| 成人精品免费看| 一区二区三区欧美| 日韩午夜小视频| av一区二区三区| 五月天亚洲精品| 久久久久久99久久久精品网站| 一本一道综合狠狠老| 免费观看91视频大全| 国产精品久久久久久久浪潮网站 | 91官网在线免费观看| 日产欧产美韩系列久久99| 久久久久久**毛片大全| 在线中文字幕不卡| 国产一区91精品张津瑜| 亚洲一区二区在线免费观看视频 | 亚洲日本护士毛茸茸| 欧美精品黑人性xxxx| 豆国产96在线|亚洲| 天天影视涩香欲综合网| 国产拍欧美日韩视频二区| 欧美猛男男办公室激情| 成人黄色av网站在线| 久久精品国产亚洲高清剧情介绍 | 色狠狠桃花综合| 国产主播一区二区| 亚洲综合视频网| 国产精品午夜在线观看| 日韩视频在线观看一区二区| 99这里只有精品| 国产精品中文字幕日韩精品| 亚洲成人av电影在线| 中文字幕佐山爱一区二区免费| 91精品国产高清一区二区三区| 91在线视频18| 国产成人丝袜美腿| 麻豆一区二区在线| 性做久久久久久久久| ...av二区三区久久精品| 久久久久久久久久久久久女国产乱| 91精品国产综合久久香蕉麻豆| 一本一本久久a久久精品综合麻豆| 国产精品99久久久| 精品中文字幕一区二区| 免费在线观看视频一区| 亚洲第一福利一区| 亚洲综合一区二区| 亚洲精品视频免费看| 亚洲欧洲精品成人久久奇米网| 国产日本欧美一区二区| 久久先锋影音av鲁色资源网| 日韩美女天天操| 日韩丝袜情趣美女图片| 欧美年轻男男videosbes| 欧美网站一区二区| 日本韩国欧美国产| 色综合网色综合| 色国产精品一区在线观看| 91麻豆福利精品推荐| av电影在线观看一区| 99久久99久久综合| 91免费精品国自产拍在线不卡| 99精品国产热久久91蜜凸| 91视频免费看| 欧美无乱码久久久免费午夜一区 | 97se亚洲国产综合自在线| 波多野结衣中文字幕一区| 波多野结衣精品在线| 91丨porny丨中文| 欧美综合天天夜夜久久| 欧美日韩一卡二卡三卡| 91精品国产高清一区二区三区蜜臀| 91精品久久久久久久99蜜桃| 日韩欧美国产午夜精品| 国产午夜亚洲精品理论片色戒| 国产精品日韩精品欧美在线| 一色屋精品亚洲香蕉网站| 一区二区视频免费在线观看| 婷婷中文字幕一区三区| 久久99精品网久久| 不卡在线观看av| 欧美日本一区二区三区四区| 精品国产伦一区二区三区免费| 久久久久久**毛片大全| 一区二区三区中文在线观看| 日韩av不卡在线观看| 国产精品18久久久久久久久| 99精品视频在线播放观看| 欧美老人xxxx18| 久久蜜桃香蕉精品一区二区三区| 中文字幕一区二区三区精华液 | 91麻豆精品国产91久久久使用方法| 精品国产亚洲在线| 亚洲美女视频在线| 麻豆成人久久精品二区三区红 | 黄色精品一二区| 一本一道综合狠狠老| 日韩欧美不卡在线观看视频| 国产精品丝袜一区| 99精品欧美一区二区三区小说 | 久久精品夜色噜噜亚洲a∨ | 久久精品视频免费观看| 一级中文字幕一区二区| 国产美女一区二区三区| 91福利在线免费观看| 久久久久国产精品麻豆| 亚洲成人先锋电影| 成人性生交大片免费| 91精品国模一区二区三区| 亚洲色图清纯唯美| 国产一区二区导航在线播放| 欧美日韩一区小说| 国产精品久久久久天堂| 极品尤物av久久免费看| 91成人看片片| 国产精品不卡在线观看| 国模无码大尺度一区二区三区| 91电影在线观看| 国产精品白丝在线| 国产一区二区三区四区五区美女 | 中文久久乱码一区二区| 麻豆高清免费国产一区| 欧美喷水一区二区| 亚洲午夜久久久久久久久电影院| 成人自拍视频在线观看| 精品国产123| 另类的小说在线视频另类成人小视频在线| 色婷婷久久久久swag精品| 欧美经典三级视频一区二区三区| 久草在线在线精品观看| 91麻豆精品国产91久久久更新时间| 亚洲色欲色欲www| 99久久99久久久精品齐齐| 久久久久久久久久久久久夜| 狠狠狠色丁香婷婷综合激情 | 久久99精品视频| 欧美一三区三区四区免费在线看| 国产精品白丝jk黑袜喷水| 欧美一卡二卡三卡四卡| 婷婷激情综合网| 91麻豆精品国产91久久久使用方法 | 自拍偷拍亚洲综合| 91欧美激情一区二区三区成人| 亚洲色欲色欲www| 色狠狠一区二区三区香蕉| 尤物在线观看一区|