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

📄 frminfo.pas

📁 一个基于Socket的在线更新程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
end;

procedure TInfoForm.actRefreshDirectoryExecute(Sender: TObject);
begin
  RefreshTreeView(tvDirectory.Items);
end;

procedure TInfoForm.FormShow(Sender: TObject);
begin
  RefreshTreeView(tvDirectory.Items);
  RefreshListView(nil);
end;

procedure TInfoForm.actDeleteFileExecute(Sender: TObject);
begin
  FResTree.RemoveNode(TResNode(lvFiles.Selected.Data));
  lvFiles.DeleteSelected;
end;

procedure TInfoForm.actDeleteFileUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= lvFiles.Selected <> nil;
end;

procedure TInfoForm.actAddFileExecute(Sender: TObject);
var
  ParentNode: TResNode;
  CurrentDir: string;
begin
  ParentNode:= TResNode(tvDirectory.Selected.Data);
  dlgOpen.Filter:= '所有文件(*.*)|*.*';
  dlgOpen.InitialDir:= FormatDirectoryName(FRootDir) + PResInfo(ParentNode.Data)^.DownloadURL;
  dlgOpen.FileEditStyle:= fsEdit;
  if dlgOpen.Execute then
    AddFileToListView(tvDirectory.Selected, dlgOpen.FileName);
end;

procedure TInfoForm.actAddFileUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= tvDirectory.Selected <> nil;
end;

procedure TInfoForm.edtFloatKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then
  begin
    lvFiles.Selected.SubItems[1]:= edtFloat.Text;
    edtFloat.Visible:= False;
    with PResInfo(TResNode(lvFiles.Selected.Data).Data)^ do
    begin
      ModifyTime:= StrToDateTime(lvFiles.Selected.SubItems[0]);
      Version:= edtFloat.Text;
    end;
  end;
end;

procedure TInfoForm.lvFilesClick(Sender: TObject);
begin
  if lvFiles.Selected <> nil then
  begin
    edtFloat.Visible:= True;
    edtFloat.SetFocus;
  end;
end;

procedure TInfoForm.lvFilesGetImageIndex(Sender: TObject; Item: TListItem);
var
  szOldTime: string;
begin
  szOldTime:= DateTimeToStr(PResInfo(TResNode(Item.Data).Data)^.ModifyTime);
  if SameText(Item.SubItems[0], szOldTime) then
    Item.ImageIndex:= 0
  else
    Item.ImageIndex:= -1;
end;

procedure TInfoForm.actDeleteDirectoryUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= (tvDirectory.Selected <> nil) and (tvDirectory.Selected.AbsoluteIndex <> 0);
end;

procedure TInfoForm.lvFilesColumnClick(Sender: TObject; Column: TListColumn);
begin
  FSortIndex := Column.Index;
  FSortAsc := FSortAsc * -1;
  (Sender as TCustomListView).AlphaSort;
end;

procedure TInfoForm.lvFilesCompare(Sender: TObject; Item1, Item2: TListItem;
  Data: Integer; var Compare: Integer);
var
  ix: Integer;
begin
  if FSortIndex = 0 then
    Compare := CompareText(Item1.Caption,Item2.Caption) * FSortAsc
  else begin
   ix := FSortIndex - 1;
   Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]) * FSortAsc;
  end;

end;

procedure TInfoForm.actAddDirectoryExecute(Sender: TObject);
var
  szRoot, szDir: string;
  ResNode: TResNode;
begin
  if tvDirectory.Selected.AbsoluteIndex = 0 then
    szRoot:= FormatDirectoryName(FRootDir)
  else
    szRoot:= FormatDirectoryName(FRootDir) + PResInfo(TResNode(tvDirectory.Selected.Data).Data)^.DownloadURL;
  if SelectDirectory('选择目录', szRoot, szDir) then
  begin
    ResNode:= FResTree.AddDirectory(TResNode(tvDirectory.Selected.Data), szDir);
    RefreshTreeView(tvDirectory.Items);
    GetTreeNodeByResNode(ResNode).Selected:= True;
  end;
end;

procedure TInfoForm.SetDescription(const Value: string);
begin
  FDescription := Value;
  edtDescription.Text:= FDescription;
end;

procedure TInfoForm.SetProjectName(const Value: string);
begin
  FProjectName := Value;
  edtProjectName.Text:= FProjectName;
end;

procedure TInfoForm.SetRootDir(const Value: string);
begin
  FRootDir := Value;
  edtRootDir.Text:= FRootDir;
end;

function TInfoForm.GetDescription: string;
begin
  Result:= edtDescription.Text;
end;

function TInfoForm.GetProjectName: string;
begin
  Result:= edtProjectName.Text;
end;

function TInfoForm.GetRootDir: string;
begin
  Result:= edtRootDir.Text;
end;

procedure TInfoForm.actAddDirectoryUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= tvDirectory.Selected <> nil;
end;

procedure TInfoForm.AddNodeToListView(ResNode: TResNode);
var
  pInfo: PResInfo;
begin
  pInfo:= PResInfo(ResNode.Data);
  if pInfo^.ResType = rtFile then
    with lvFiles.Items.Add do
    begin
      Caption:= pInfo^.FileName;
      SubItems.Add(FormatDateTime('YYYY-MM-DD HH:MM:SS', FileDateToDateTime(FileAge(FResTree.RootNode.Text +
        pInfo^.DownloadURL))));
      SubItems.Add(pInfo.Version);
      SubItems.Add(pInfo^.DownloadURL);
      Data:= ResNode;
    end;
end;

constructor TInfoForm.Create(AOwner: TComponent; AProjectItem: TProjectItem);
var
  Index: Integer;
begin
  inherited Create(AOwner);
  // 接受拖放
  DragAcceptFiles(lvFiles.Handle, True);

  FResTree:= TResTree.Create;

  ProjectName:= AProjectItem.ProjectName;
  RootDir:= AProjectItem.RootDir;
  Description:= AProjectItem.Description;
  AProjectItem.LoadResTree;
  FResTree.Assign(AProjectItem.ResTree);

  FSortAsc:= 1;
  RefreshTreeView(tvDirectory.Items);
  RefreshListView(nil);
end;

destructor TInfoForm.Destroy;
begin
  FResTree.Free;
  inherited Destroy;
end;

function TInfoForm.GetTreeNodeByResNode(ResNode: TResNode): TTreeNode;
var
  I: Integer;
begin
  if ResNode = nil then
    Result:= tvDirectory.Items.GetFirstNode
  else
    for I:= 1 to tvDirectory.Items.Count - 1 do
      if tvDirectory.Items[I].Data = ResNode then
      begin
        Result:= tvDirectory.Items[I];
        Break;
      end;
end;

procedure TInfoForm.DropFiles(var Msg: TMessage);
var
  I, C: Integer;
  Buffer: array[0..1023] of char;
begin
  inherited;
  // Todo:RzListView截断了WM_DROPFILES消息,以下代码执行不到!!
  C:= DragQueryFile(Msg.WParam, $FFFFFFFF, nil, 0);
  for I:= 0 to C - 1 do
  begin
    FillChar(Buffer, SizeOf(Buffer), #0);
    DragQueryFile(Msg.WParam, I, Buffer, SizeOf(Buffer));
    Caption:= Buffer;
    AddFileToListView(tvDirectory.Selected, Buffer);
  end;
end;

procedure TInfoForm.AddFileToListView(TreeNode: TTreeNode; FileName: string);
var
  ParentNode: TResNode;
  CurrentDir, NewFileName: string;
begin
  ParentNode:= TResNode(TreeNode.Data);
  CurrentDir:= FormatDirectoryName(FRootDir) + FormatDirectoryName(PResInfo(ParentNode.Data)^.DownloadURL);
  NewFileName:= FileName;
  if not SameText(CurrentDir, ExtractFilePath(FileName)) then
  begin
    if MessageBox(0, '所选文件与不在当前目录,是否将其拷贝到当前目录?', '提示',
      MB_YESNO + MB_ICONINFORMATION) = IDYES then
    begin
      NewFileName:= CurrentDir + ExtractFileName(FileName);
      CopyFile(PAnsiChar(FileName), PAnsiChar(NewFileName), True);
    end
    else
      Exit;
  end;
  AddNodeToListView(FResTree.AddFile(ParentNode, NewFileName));
end;

procedure TInfoForm.actBrowseFilesUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= tvDirectory.Selected <> nil;
end;

procedure TInfoForm.actBrowseFilesExecute(Sender: TObject);
var
  CurrentDir: string;
begin
  if tvDirectory.Selected.AbsoluteIndex = 0 then
    CurrentDir:= FRootDir
  else
    CurrentDir:= FormatDirectoryName(FRootDir) + PResInfo(TResNode(tvDirectory.Selected.Data).Data)^.DownloadURL;
  ShellExecute(0, 'open', PChar(CurrentDir), '', '', SW_NORMAL);
end;

procedure TInfoForm.actRefreshVersionExecute(Sender: TObject);
begin
  lvFiles.Selected.SubItems[1]:= GetFileVersion(FormatDirectoryName(RootDir) +
    PResInfo(TResNode(lvFiles.Selected.Data).Data)^.DownloadURL);
  //edtFloat.Perform(WM_KEYDOWN, VK_RETURN, 0);
end;

procedure TInfoForm.actRefreshVersionUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled:= lvFiles.Selected <> nil;
end;

end.

⌨️ 快捷键说明

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