📄 rmd_reportexplorer.pas
字号:
procedure TRMItemListView.SetParent(aParent: TWinControl);
var
liColumn: TListColumn;
begin
inherited SetParent(aParent);
if (Columns.Count > 0) or (csDestroying in ComponentState) then
Exit;
liColumn := Columns.Add;
liColumn.Width := 250;
liColumn := Columns.Add;
liColumn.Width := 120;
liColumn.Alignment := taRightJustify;
liColumn := Columns.Add;
liColumn.Width := 100;
liColumn := Columns.Add;
liColumn.Width := 140;
end;
procedure TRMItemListView.SetReportExplorer(aExplorer: TRMReportExplorer);
begin
FReportExplorer := aExplorer;
end;
procedure TRMItemListView.SetItemName(aName: string);
var
liFound: Boolean;
i: Integer;
liListItem: TListItem;
begin
liListItem := nil;
liFound := False;
for i := 0 to Items.Count - 1 do
begin
liListItem := Items[i];
if AnsiCompareText(liListItem.Caption, aName) = 0 then
begin
liFound := True;
Break;
end;
end;
if liFound then
begin
Selected := liListItem;
DoOnSelectionChange;
end;
end;
procedure TRMItemListView.SetFolderId(aFolderId: Integer);
begin
FFolderId := aFolderId;
GetItemsForFolder;
end;
procedure TRMItemListView.SetSortMode(aSortMode: Integer);
begin
FSortMode := aSortMode;
SetSortModeDescription;
end;
function TRMItemListView.GetItemId: Integer;
var
liListItem: TListItem;
begin
liListItem := Selected;
if (liListItem <> nil) and (liListItem.Data <> nil) then
Result := PRMListItemData(liListItem.Data).ItemId
else
Result := -1;
end;
function TRMItemListView.GetItemType: Integer;
var
liListItem: TListItem;
begin
liListItem := Selected;
if (liListItem <> nil) and (liListItem.Data <> nil) then
Result := PRMListItemData(liListItem.Data).ItemType
else
Result := -1;
end;
function TRMItemListView.GetItemName: string;
var
liListItem: TListItem;
begin
liListItem := Selected;
if liListItem <> nil then
Result := liListItem.Caption
else
Result := '';
end;
procedure TRMItemListView.DoOnFolderChange;
begin
if Assigned(FOnFolderChange) then
FOnFolderChange(Self);
end;
procedure TRMItemListView.DoOnRenameFolder(aFolderId: Integer; const aNewName: string);
begin
if Assigned(FOnRenameFolder) then
FOnRenameFolder(Self, aFolderId, aNewName);
end;
procedure TRMItemListView.DoOnSelectionChange;
begin
if Assigned(FOnSelectionChange) then
FOnSelectionChange(Self);
end;
procedure TRMItemListView.ChangeEvent(Sender: TObject; Item: TListItem; Change: TItemChange);
var
liListItem: TListItem;
liSize: Integer;
str: string;
liStringList: TStrings;
i: Integer;
begin
liStringList := TStringList.Create;
try
GetSelectedItems(liStringList);
liSize := 0;
for i := 0 to liStringList.Count - 1 do
begin
liListItem := TListItem(liStringList.Objects[i]);
if PRMListItemData(liListItem.Data).ItemType <> rmitFolder then
begin
FAllFolders := False;
str := liListItem.SubItems[0];
str := Copy(str, 1, Length(str) - Length('KB')); {'KB'}
liSize := liSize + Round(StrToFloat(str) * 1024);
end;
end;
FAllFolders := True;
FSelectionCount := liStringList.Count;
FSelectionSize := liSize;
DoOnSelectionChange;
finally
liStringList.Free;
end;
end;
procedure TRMItemListView.DblClickEvent(Sender: TObject);
var
liListItem: TListItem;
begin
liListItem := Selected;
if liListItem = nil then Exit;
if PRMListItemData(liListItem.Data).ItemType = rmitFolder then
begin
FFolderId := PRMListItemData(liListItem.Data).ItemId;
GetItemsForFolder;
DoOnFolderChange;
end
else
begin
if Assigned(FOnDoubleClick) then
FOnDoubleClick(Self);
end;
end;
procedure TRMItemListView.ColumnClickEvent(Sender: TObject; Column: TListColumn);
begin
if FSortMode = Column.Index + 1 then
FSortMode := FSortMode * -1
else
FSortMode := Column.Index + 1;
AlphaSort;
SetSortModeDescription;
end;
procedure TRMItemListView.CompareEvent(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
liSize1: Integer;
liSize2: Integer;
liDateTime1: TDateTime;
liDateTime2: TDateTime;
liDiff: Double;
begin
if (PRMListItemData(Item1.Data).ItemType = rmitFolder) and (PRMListItemData(Item2.Data).ItemType = rmitFolder) then
begin
case FSortMode of
1: Compare := AnsiCompareText(Item1.Caption, Item2.Caption);
-1: Compare := AnsiCompareText(Item2.Caption, Item1.Caption);
end;
end
else if PRMListItemData(Item1.Data).ItemType = rmitFolder then
Compare := -1
else if PRMListItemData(Item2.Data).ItemType = rmitFolder then
Compare := 1
else
begin
case FSortMode of
1: Compare := AnsiCompareText(Item1.Caption, Item2.Caption);
-1: Compare := AnsiCompareText(Item2.Caption, Item1.Caption);
2, -2:
begin
liSize1 := Round(StrToFloat(Copy(Item1.SubItems[0], 1, Length(Item1.SubItems[0]) - 2)));
liSize2 := Round(StrToFloat(Copy(Item2.SubItems[0], 1, Length(Item2.SubItems[0]) - 2)));
if FSortMode = 2 then
Compare := liSize1 - liSize2
else
Compare := liSize2 - liSize1;
end;
3: Compare := AnsiCompareText(Item1.SubItems[1], Item2.SubItems[1]);
-3: Compare := AnsiCompareText(Item2.SubItems[1], Item1.SubItems[1]);
4, -4:
begin
liDateTime1 := StrToDateTime(Item1.SubItems[2]);
liDateTime2 := StrToDateTime(Item2.SubItems[2]);
if FSortMode = 4 then
liDiff := liDateTime1 - liDateTime2
else
liDiff := liDateTime2 - liDateTime1;
if liDiff > 0 then
Compare := 1
else if liDiff < 0 then
Compare := -1
else
Compare := 0;
end;
end;
end;
if Compare = 0 then
Compare := AnsiCompareText(Item1.Caption, Item2.Caption);
end;
procedure TRMItemListView.DragDropEvent(Sender, Source: TObject; X, Y: Integer);
var
liListItem: TListItem;
begin
liListItem := GetItemAt(X, Y);
if liListItem = nil then Exit;
if PRMListItemData(liListItem.Data).ItemType <> rmitFolder then Exit;
MoveSelectionToFolder(PRMListItemData(liListItem.Data).ItemId);
end;
procedure TRMItemListView.DragOverEvent(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
liListItem: TListItem;
begin
liListItem := GetItemAt(X, Y);
if liListItem <> nil then
Accept := PRMListItemData(liListItem.Data).ItemType = rmitFolder
else
Accept := False;
end;
procedure TRMItemListView.EditingEvent(Sender: TObject; Item: TListItem; var AllowEdit: Boolean);
begin
AllowEdit := FFolderId <> -2;
end;
procedure TRMItemListView.EditedEvent(Sender: TObject; Item: TListItem; var S: string);
begin
if PRMListItemData(Item.Data).ItemType = rmitFolder then
begin
DoOnRenameFolder(PRMListItemData(Item.Data).ItemId, S);
FReportExplorer.RenameFolder(PRMListItemData(Item.Data).ItemId, S);
end
else
begin
FReportExplorer.Rename(PRMListItemData(Item.Data).ItemId, S);
end;
end;
procedure TRMItemListView.MoveSelectionToFolder(aFolderId: Integer);
var
liListItem: TListItem;
i: Integer;
liStringList: TStrings;
liChange: Boolean;
liFolderChange: Boolean;
begin
liStringList := TStringList.Create;
try
GetSelectedItems(liStringList);
liChange := False;
liFolderChange := False;
for i := 0 to liStringList.Count - 1 do
begin
liListItem := TListItem(liStringList.Objects[i]);
if PRMListItemData(liListItem.Data).ItemType = rmitFolder then
begin
if FReportExplorer.ChangeParentFolder(PRMListItemData(liListItem.Data).ItemId, aFolderId) then
liFolderChange := True;
end
else
begin
if FReportExplorer.ChangeFolder(PRMListItemData(liListItem.Data).ItemId, aFolderId) then
liChange := True;
end;
end;
if liFolderChange then
DoOnFolderChange
else if liChange then
GetItemsForFolder;
finally
liStringList.Free;
end;
end;
procedure TRMItemListView.EmptyRecycleBin;
var
liStringList: TStringList;
begin
liStringList := TStringList.Create;
try
FReportExplorer.GetItems(-2, liStringList);
while liStringList.Count > 0 do
begin
TRMItemInfo(liStringList.Objects[0]).Free;
liStringList.Delete(0);
end;
FReportExplorer.DeleteItemsInFolder(-2);
DoOnFolderChange;
finally
liStringList.Free;
end;
end;
procedure TRMItemListView.DeleteSelection;
var
liListItem: TListItem;
liStringList: TStrings;
i: Integer;
lbFolderChange: Boolean;
begin
if Application.MessageBox(PChar(RMLoadStr(rmRes + 3167)), PChar(RMLoadStr(rmRes + 3168)),
MB_ICONQUESTION + MB_YESNO) <> IDYES then
Exit;
lbFolderChange := False;
liStringList := TStringList.Create;
Items.BeginUpdate;
try
GetSelectedItems(liStringList);
for i := 0 to liStringList.Count - 1 do
begin
liListItem := TListItem(liStringList.Objects[i]);
if PRMListItemData(liListItem.Data).ItemType = rmitFolder then
lbFolderChange := True;
if FFolderId = rmitRecycleBin then
FReportExplorer.Delete(PRMListItemData(liListItem.Data).ItemId)
else
begin
if PRMListItemData(liListItem.Data).ItemType = rmitFolder then
FReportExplorer.ChangeParentFolder(PRMListItemData(liListItem.Data).ItemId, -2)
else
FReportExplorer.ChangeFolder(PRMListItemData(liListItem.Data).ItemId, -2);
end;
if liListItem.Data <> nil then
begin
Dispose(liListItem.Data);
liListItem.Data := nil;
end;
liListItem.Free;
end;
if lbFolderChange then
DoOnFolderChange;
finally
Items.EndUpdate;
liStringList.Free;
end;
end;
procedure TRMItemListView.RenameItem;
var
liListItem: TListItem;
begin
liListItem := Selected;
if (liListItem <> nil) and (liListItem.Data <> nil) then
liListItem.EditCaption;
end;
procedure TRMItemListView.SetSortModeDescription;
var
str: string;
liIndex: Integer;
begin
Columns[0].Caption := RMLoadStr(rmRes + 3163); {Name}
Columns[1].Caption := RMLoadStr(rmRes + 3164); {Size}
Columns[2].Caption := RMLoadStr(rmRes + 3165); {Type}
Columns[3].Caption := RMLoadStr(rmRes + 3166); {Modified}
case FSortMode of
1: str := ' ' + ''; {(a > z)}
-1: str := ' ' + ''; {(z > a)}
2: str := ' ' + ''; {(small > large)}
-2: str := ' ' + ''; {(large > small)}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -