📄 rmd_expfrm.pas
字号:
try
FReportExplorer.GetItems(itRecycleBin, itAllFolders, sl);
if sl.Count > 0 then
begin
FRecycleBinNode.ImageIndex := 1;
FRecycleBinNode.SelectedIndex := 1;
end
else
begin
FRecycleBinNode.ImageIndex := 3;
FRecycleBinNode.SelectedIndex := 3;
end;
finally
sl.Free;
end;
end;
procedure TRMDFormReportExplorer.padFilePrintClick(Sender: TObject); //打印报表
begin
if FListView.ItemName <> '' then
FReportExplorer.Print(FListView.ItemName, FListView.ItemId);
end;
procedure TRMDFormReportExplorer.padFilePrintPreviewClick(Sender: TObject); //预览报表
begin
if FListView.ItemName <> '' then
FReportExplorer.PrintPreview(FListView.ItemName, FListView.ItemId);
end;
procedure TRMDFormReportExplorer.padFileOpenClick(Sender: TObject);
begin
if trvFolders.Focused then
begin
if (trvFolders.Selected <> nil) and (not trvFolders.Selected.Expanded) then
trvFolders.Selected.Expanded := True;
end
else
OpenItem;
end;
procedure TRMDFormReportExplorer.padFileNewReportClick(Sender: TObject); //新报表
var
i: Integer;
begin
if trvFolders.Selected <> nil then
i := Integer(trvFolders.Selected.Data)
else
i := itAllFolders;
FReportExplorer.New(i);
end;
procedure TRMDFormReportExplorer.padFileNewFolderClick(Sender: TObject); //新文件夹
var
Item: TTreeNode;
lsName: string;
FolderId: Integer;
begin
Item := trvFolders.Selected;
if (Item = nil) or (Integer(Item.Data) = itRecycleBin) then Exit;
trvFolders.Items.BeginUpdate;
lsName := FReportExplorer.GetNewFolderName(Integer(Item.Data));
if (trvFolders.Selected <> nil) then
FReportExplorer.AddFolder(Integer(trvFolders.Selected.Data), lsName, FolderID)
else
FReportExplorer.AddFolder(itAllFolders, lsName, FolderId);
Item := trvFolders.Items.AddChild(trvFolders.Selected, lsName);
Item.Data := TObject(FolderID);
Item.ImageIndex := 0;
Item.SelectedIndex := 2;
if (Item.Parent <> nil) then
Item.Parent.Expand(False);
trvFolders.Selected := Item;
trvFolders.Items.EndUpdate;
trvFolders.Selected.EditText;
end;
procedure TRMDFormReportExplorer.padFileDeleteClick(Sender: TObject);
var
Node: TTreeNode;
NewNode: TTreeNode;
FolderId: Integer;
begin
Node := trvFolders.Selected;
if Node = nil then Exit;
if trvFolders.Focused then
begin
FolderId := Integer(Node.Data);
if (FolderId = itRecycleBin) or (FolderId = itAllFolders) then Exit;
if Application.MessageBox('真的删除这个文件夹吗?', '删除', MB_ICONQUESTION + MB_YESNO) = IDYES then
begin
if FReportExplorer.ChangeParentFolder(FolderId, itRecycleBin) then
begin
NewNode := FindNearestNode(Node);
SelectFolder(Integer(NewNode.Data));
Node.Free;
end;
end;
end
else
FListView.DeleteSelection;
UpdateRecycleBin;
end;
procedure TRMDFormReportExplorer.padViewListClick(Sender: TObject);
begin
SetViewStyle(True);
end;
procedure TRMDFormReportExplorer.padViewDetailsClick(Sender: TObject);
begin
SetViewStyle(False);
end;
procedure TRMDFormReportExplorer.padViewToolbarClick(Sender: TObject);
begin
SetViewToolbar(not (padViewToolbar.Checked));
end;
procedure TRMDFormReportExplorer.padViewStatusBarClick(Sender: TObject);
begin
SetViewStatusBar(not (padViewStatusBar.Checked));
end;
procedure TRMDFormReportExplorer.padFileCloseClick(Sender: TObject);
begin
Close;
end;
procedure TRMDFormReportExplorer.trvFoldersEdited(Sender: TObject; Node: TTreeNode;
var S: string); //重命名文件夹
begin
FReportExplorer.RenameFolder(Integer(Node.Data), S);
end;
procedure TRMDFormReportExplorer.padFileRenameClick(Sender: TObject); //重命名报表
var
Node: TTreeNode;
begin
if trvFolders.Focused then
begin
Node := trvFolders.Selected;
if (Node <> nil) and (Integer(Node.Data) > itAllFolders) then
Node.EditText;
end
else
FListView.RenameItem;
end;
procedure TRMDFormReportExplorer.ListDoubleClickEvent(Sender: TObject);
begin
OpenItem;
end;
procedure TRMDFormReportExplorer.ListRenameFolderEvent(Sender: TObject; aFolderId: Integer; const aNewName: string);
var
TreeNode: TTreeNode;
begin
TreeNode := FindDataInTreeView(trvFolders, aFolderId);
TreeNode.Text := aNewName;
end;
function TRMDFormReportExplorer.FindDataInTreeView(aTreeView: TTreeView; aData: Integer): TTreeNode;
var
Index: Integer;
TreeNode: TTreeNode;
begin
Result := nil;
if (aTreeView.Items.Count = 0) then Exit;
Index := 0;
TreeNode := aTreeView.Items[Index];
while (Index < aTreeView.Items.Count) and (Integer(TreeNode.Data) <> aData) do
begin
Inc(Index);
TreeNode := aTreeView.Items[Index];
end;
Result := TreeNode;
end;
procedure TRMDFormReportExplorer.ListFolderChangeEvent(Sender: TObject);
begin
// UpdateTreeView;
SelectFolder(FListView.FolderId);
end;
procedure TRMDFormReportExplorer.ListSelectionChangeEvent(Sender: TObject);
begin
UpdateStatusBar;
end;
procedure TRMDFormReportExplorer.trvFoldersEditing(Sender: TObject; Node: TTreeNode; var AllowEdit: Boolean);
begin
if (Integer(Node.Data) = itAllFolders) or (Integer(Node.Data) = itRecycleBin) then
AllowEdit := False;
end;
procedure TRMDFormReportExplorer.trvFoldersDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
Item: TTreeNode;
tmpSelected: TTreeNode;
begin
Accept := False;
tmpSelected := trvFolders.Selected;
if (tmpSelected = nil) then Exit;
if (Source = trvFolders) and ((tmpSelected = FAllFoldersNode) or (tmpSelected = FRecycleBinNode)) then Exit;
Item := trvFolders.GetNodeAt(X, Y);
if (Source = trvFolders) and (Item <> nil) then
Accept := (Item <> tmpSelected) and (Item <> tmpSelected.Parent)
else
Accept := True;
end;
procedure TRMDFormReportExplorer.trvFoldersDragDrop(Sender, Source: TObject; X, Y: Integer);
var
TargetItem: TTreeNode;
SourceItem: TTreeNode;
NewNode: TTreeNode;
TargetFolderId: Integer;
SourceFolderId: Integer;
FolderId: Integer;
begin
TargetItem := trvFolders.GetNodeAt(X, Y);
if TargetItem <> nil then
begin
TargetFolderId := Integer(TargetItem.Data);
if Source = trvFolders then
begin
SourceItem := trvFolders.Selected;
if SourceItem = nil then Exit;
SourceFolderId := Integer(SourceItem.Data);
if FReportExplorer.ChangeParentFolder(SourceFolderId, TargetFolderId) then
begin
if TargetFolderId = itRecycleBin then
begin
NewNode := FindNearestNode(SourceItem);
if NewNode <> nil then
FolderId := Integer(NewNode.Data)
else
FolderId := itAllFolders;
end
else
FolderId := SourceFolderId;
UpdateTreeView;
SelectFolder(FolderId);
end;
end
else if Source = FListView then
begin
FListView.MoveSelectionToFolder(TargetFolderId);
SourceItem := trvFolders.Selected;
if SourceItem = nil then Exit;
SourceFolderId := Integer(SourceItem.Data);
if TargetFolderId = itRecycleBin then
UpdateRecycleBin
else if SourceFolderId = itRecycleBin then
UpdateRecycleBin
end;
end;
end;
function TRMDFormReportExplorer.FindNearestNode(aNode: TTreeNode): TTreeNode;
begin
Result := aNode.GetNextSibling;
if (Result <> nil) then Exit;
Result := aNode.GetPrevSibling;
if (Result <> nil) then Exit;
Result := aNode.Parent;
if (Result <> nil) then Exit;
Result := trvFolders.Items[0];
end;
procedure TRMDFormReportExplorer.UpdateTreeView;
var
Index: Integer;
Items: TTreeNodes;
Item: TTreeNode;
Folders: TStringList;
FolderNodes: TStringList;
FolderInfo: TRMFolderInfo;
ParentIndex: Integer;
ParentNode: TTreeNode;
begin
Folders := TStringList.Create;
FolderNodes := TStringList.Create;
FReportExplorer.GetFolders(Folders);
Items := trvFolders.Items;
Items.BeginUpdate;
Items.Clear;
try
FAllFoldersNode := trvFolders.Items.AddObject(nil, '所有文件夹', TObject(itAllFolders));
FAllFoldersNode.ImageIndex := 0;
FAllFoldersNode.SelectedIndex := 2;
FolderNodes.AddObject(IntToStr(itAllFolders), FAllFoldersNode);
FRecycleBinNode := trvFolders.Items.AddObject(nil, '回收站', TObject(itRecycleBin));
FolderNodes.AddObject(IntToStr(itRecycleBin), FRecycleBinNode);
while Folders.Count > 0 do
begin
Index := 0;
FolderInfo := TRMFolderInfo(Folders.Objects[Index]);
ParentIndex := FolderNodes.IndexOf(IntToStr(FolderInfo.ParentId));
while (ParentIndex = -1) and (Index < Folders.Count - 1) do
begin
Inc(Index);
FolderInfo := TRMFolderInfo(Folders.Objects[Index]);
ParentIndex := FolderNodes.IndexOf(IntToStr(FolderInfo.ParentId));
end;
if (ParentIndex <> -1) then
ParentNode := TTreeNode(FolderNodes.Objects[ParentIndex])
else
ParentNode := FAllFoldersNode;
Item := Items.AddChild(ParentNode, FolderInfo.Name);
Item.Data := TObject(FolderInfo.FolderId);
Item.ImageIndex := 0;
Item.SelectedIndex := 2;
FolderNodes.AddObject(IntToStr(FolderInfo.FolderId), Item);
FolderInfo.Free;
Folders.Delete(Index);
end;
finally
UpdateRecycleBin;
Items.EndUpdate;
Folders.Free;
FolderNodes.Free;
FAllFoldersNode.Expanded := True;
end;
end;
procedure TRMDFormReportExplorer.ppmReportsPopup(Sender: TObject);
var
Node: TTreeNode;
FolderId: Integer;
begin
Node := trvFolders.Selected;
if Node = nil then Exit;
FolderId := Integer(Node.Data);
if FolderId = itRecycleBin then
begin
ppmReportsNewFolder.Enabled := False;
ppmReportsNewReport.Enabled := False;
ppmReportsRename.Enabled := False;
end
else
begin
ppmReportsNewFolder.Enabled := True;
ppmReportsNewReport.Enabled := True;
ppmReportsRename.Enabled := True;
end;
end;
procedure TRMDFormReportExplorer.ppmFoldersPopup(Sender: TObject);
var
Node: TTreeNode;
FolderId: Integer;
begin
Node := trvFolders.Selected;
if Node = nil then Exit;
FolderId := Integer(Node.Data);
ppmFoldersEmptyRecycleBin.Visible := (FolderId = itRecycleBin);
if FolderId = itRecycleBin then
begin
ppmFoldersExplore.Enabled := False;
ppmFoldersOpen.Enabled := False;
ppmFoldersNewFolder.Enabled := False;
ppmFoldersNewReport.Enabled := False;
ppmFoldersDelete.Enabled := False;
ppmFoldersRename.Enabled := False;
end
else if FolderId = itAllFolders then
begin
ppmFoldersExplore.Enabled := False;
ppmFoldersOpen.Enabled := False;
ppmFoldersNewFolder.Enabled := True;
ppmFoldersNewReport.Enabled := True;
ppmFoldersDelete.Enabled := False;
ppmFoldersRename.Enabled := False;
end
else
begin
ppmFoldersExplore.Enabled := True;
ppmFoldersOpen.Enabled := True;
ppmFoldersNewFolder.Enabled := True;
ppmFoldersNewReport.Enabled := True;
ppmFoldersDelete.Enabled := True;
ppmFoldersRename.Enabled := True;
end;
end;
procedure TRMDFormReportExplorer.FormCreate(Sender: TObject);
begin
Localize;
FReportExplorer := nil;
FListView := TRMItemList.Create(Self);
FListView.Parent := pnlReports;
FListView.Align := alClient;
FListView.MultiSelect := True;
FListView.PopupMenu := ppmReports;
FListView.ViewStyle := vsList;
FListView.SmallImages := ImageListListView;
FListView.HideSelection := FALSE;
FListView.OnDoubleClick := ListDoubleClickEvent;
FListView.OnFolderChange := ListFolderChangeEvent;
FListView.OnRenameFolder := ListRenameFolderEvent;
FListView.OnSelectionChange := ListSelectionChangeEvent;
end;
procedure TRMDFormReportExplorer.FormDestroy(Sender: TObject);
begin
SaveToIniFile;
end;
procedure TRMDFormReportExplorer.FormShow(Sender: TObject);
begin
LoadFromIniFile;
UpdateTreeView;
SelectFolder(FListView.FolderId);
end;
procedure TRMDFormReportExplorer.ppmFoldersEmptyRecycleBinClick(Sender: TObject);
begin
FListView.EmptyRecycleBin;
UpdateRecycleBin;
end;
procedure TRMDFormReportExplorer.trvFoldersChange(Sender: TObject;
Node: TTreeNode);
begin
if Node <> nil then
SelectFolder(Integer(Node.Data));
end;
procedure TRMDFormReportExplorer.btnUpOneLevelClick(Sender: TObject);
var
Item: TTreeNode;
begin
Item := trvFolders.Selected;
if (Item.Parent <> nil) then
SelectFolder(Integer(Item.Parent.Data));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -