📄 frminfo.pas
字号:
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 + -