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

📄 frmmain.pas

📁 一个基于Socket的在线更新程序
💻 PAS
字号:
unit frmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, hxUpdate, ActnList, StdCtrls, ComCtrls, RzButton, ImgList,
  RzListVw, ExtCtrls, RzPanel, RzTreeVw, Mask, RzEdit, RzBtnEdt, FileCtrl,
  Menus, RzTray, IniFiles;

type
  TMainForm = class(TForm)
    ActionList1: TActionList;
    actStart: TAction;
    actStop: TAction;
    RzToolbar1: TRzToolbar;
    lvProjects: TRzListView;
    ImageList1: TImageList;
    actQuit: TAction;
    BtnPlay: TRzToolButton;
    BtnStop: TRzToolButton;
    BtnInsertRecord: TRzToolButton;
    BtnDeleteRecord: TRzToolButton;
    RzSpacer1: TRzSpacer;
    actAdd: TAction;
    actDelete: TAction;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    actConfig: TAction;
    BtnUtilities: TRzToolButton;
    N9: TMenuItem;
    PopupMenu1: TPopupMenu;
    N10: TMenuItem;
    N11: TMenuItem;
    actModify: TAction;
    RzToolButton1: TRzToolButton;
    N12: TMenuItem;
    N13: TMenuItem;
    TrayIcon: TRzTrayIcon;
    ImageList2: TImageList;
    PopupMenu2: TPopupMenu;
    N14: TMenuItem;
    N15: TMenuItem;
    actShow: TAction;
    actHide: TAction;
    RzToolButton2: TRzToolButton;
    N16: TMenuItem;
    N17: TMenuItem;
    RzSpacer2: TRzSpacer;
    N18: TMenuItem;
    N19: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure actStartUpdate(Sender: TObject);
    procedure actStopUpdate(Sender: TObject);
    procedure actStartExecute(Sender: TObject);
    procedure actStopExecute(Sender: TObject);
    procedure actQuitExecute(Sender: TObject);
    procedure actAddExecute(Sender: TObject);
    procedure actModifyExecute(Sender: TObject);
    procedure actDeleteExecute(Sender: TObject);
    procedure actDeleteUpdate(Sender: TObject);
    procedure actConfigExecute(Sender: TObject);
    procedure actModifyUpdate(Sender: TObject);
    procedure actShowExecute(Sender: TObject);
    procedure actHideExecute(Sender: TObject);
  private
    { Private declarations }
    FUpdateServer: ThxUpdateServer;
    procedure RefreshProjects;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses Types, frmConfig, hxSysUtils, ConvUtils, frmInfo;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
  Port: Integer;
begin
  RefreshProjects;
  Ini:= TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'main.ini');
  try
    Port:= Ini.ReadInteger('Server', 'Port', 9901);
  finally
    Ini.Free;
  end;
  FUpdateServer:= ThxUpdateServer.Create(Port);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  FUpdateServer.Free;
  GetProjectCollection.Free;
end;

procedure TMainForm.actStartUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= not FUpdateServer.Active;
end;

procedure TMainForm.actStopUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= FUpdateServer.Active;
end;

procedure TMainForm.actStartExecute(Sender: TObject);
begin
  FUpdateServer.StartService;
end;

procedure TMainForm.actStopExecute(Sender: TObject);
begin
  FUpdateServer.StopServerice;
end;

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

procedure TMainForm.actModifyExecute(Sender: TObject);
var
  szProjectName, szRootDir, szDescription: string;
begin
  with lvProjects.Selected do
  begin
    szProjectName:= Caption;
    szRootDir:= SubItems[0];
    szDescription:= SubItems[1];
  end;
  if ShowInfoForm(szProjectName, szRootDir, szDescription) then
  begin
    with lvProjects.Selected do
    begin
      Caption:= szProjectName;
      SubItems[0]:= szRootDir;
      SubItems[1]:= szDescription;
    end;
  end;
end;

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

procedure TMainForm.actDeleteExecute(Sender: TObject);
var
  Index: Integer;
begin
  if MessageBox(0, '是否删除选择的项目?', '提示', MB_YESNO + MB_ICONWARNING) = IDYES then
  begin
    Index:= GetProjectCollection.IndexOf(lvProjects.Selected.Caption);
    if Index <> -1 then
    begin
      GetProjectCollection.Items[Index].RemoveResTree;
      GetProjectCollection.Delete(Index);
      lvProjects.DeleteSelected;
    end;
  end;
end;

procedure TMainForm.actAddExecute(Sender: TObject);
var
  szProjectName, szRootDir, szDescription: string;
begin
  szProjectName:= '';
  szRootDir:= '';
  szDescription:= '';
  if ShowInfoForm(szProjectName, szRootDir, szDescription) then
  begin
    with lvProjects.Items.Add do
    begin
      Caption:= szProjectName;
      SubItems.Add(szRootDir);
      SubItems.Add(szDescription);
    end;
  end;
end;

procedure TMainForm.actConfigExecute(Sender: TObject);
begin
  ShowConfigForm;
end;

{ TProjectMgr }

procedure TMainForm.RefreshProjects;
var
  I: Integer;
  AItem: TProjectItem;
begin
  lvProjects.Clear;
  for I:= 0 to GetProjectCollection.Count - 1 do
  begin
    AItem:= TProjectItem(GetProjectCollection[I]);
    with lvProjects.Items.Add do
    begin
      Caption:= AItem.ProjectName;
      SubItems.Add(AItem.RootDir);
      SubItems.Add(AItem.Description);
      ImageIndex:= -1;
    end;
  end;
end;

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

procedure TMainForm.actShowExecute(Sender: TObject);
begin
  TrayIcon.RestoreApp;
end;

procedure TMainForm.actHideExecute(Sender: TObject);
begin
  TrayIcon.MinimizeApp;
end;

end.

⌨️ 快捷键说明

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