📄 mainf.pas
字号:
FreeTreeNodeObjs(trvCategory);
FreeListItemObjs(lsvDocuments);
end;
procedure TfmMain.actAboutExecute(Sender: TObject);
begin
fmAbout := TfmAbout.Create(Application);
try
fmAbout.ShowModal;
finally
fmAbout.Free;
end;
end;
{-----------------------------------------------------------------------------
Procedure: InitCategoryTree
Purpose: Initialize Category Tree
Arguments: ATreeView: TTreeView;
ParentNode: TTreeNode;
ADataSet: TADODataSet;
CodeFieldName: String;
ParentCodeFieldName: String;
ParentCodeFieldValue: String = '';
DisplayFieldName: String = ''
Result: None
Author: Cyclone
History: 2004-6-1 23:20:54
-----------------------------------------------------------------------------}
procedure TfmMain.InitCategoryTree(ATreeView: TTreeView; ParentNode: TTreeNode;
ADataSet: TADODataSet; const CodeFieldName, ParentCodeFieldName: String;
const ParentCodeFieldValue: String = ''; const DisplayFieldName: String = '');
var
sBookmark: TBookmarkStr;
sFilter: String;
bFiltered: Boolean;
CurrentNode: TTreeNode;
CurrentNodeObj: PTreeNodeObj;
sFieldValue,
sDisplayFieldName: String;
begin
if Trim(DisplayFieldName) <> '' then
sDisplayFieldName := Trim(DisplayFieldName)
else
sDisplayFieldName := Trim(CodeFieldName);
with ADataSet do
begin
if FindField(CodeFieldName) = nil then
begin
ShowError('Code field name error!');
Exit;
end;
if FindField(ParentCodeFieldName) = nil then
begin
ShowError('Parent code field name error!');
Exit;
end;
if FindField(sDisplayFieldName) = nil then
begin
ShowError('Display field name error!');
Exit;
end;
sBookmark := Bookmark;
sFilter := Filter;
bFiltered := Filtered;
DisableControls;
try
Filter := ParentCodeFieldName + '=' + QuotedStr(ParentCodeFieldValue);
Filtered := True;
First;
while not Eof do
begin
sFieldValue := FieldByName(sDisplayFieldName).AsString;
CurrentNodeObj := CreateTreeNodeObj(FieldByName('TypeCode').AsString, FieldByName('TypeName').AsString,
FieldByName('ParentTypeCode').AsString, FieldByName('Remarks').AsString, FieldByName('Creator').AsString,
FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger);
CurrentNode := ATreeView.Items.AddChildObject(ParentNode, sFieldValue, CurrentNodeObj);
InitCategoryTree(ATreeView, CurrentNode, ADataSet, CodeFieldName, ParentCodeFieldName, FieldByName(CodeFieldName).AsString, sDisplayFieldName);
{if CurrentNode.HasChildren then
begin
CurrentNode.ImageIndex := 0;
CurrentNode.SelectedIndex := 0;
CurrentNode.StateIndex := 0;
end
else
begin
CurrentNode.ImageIndex := 1;
CurrentNode.SelectedIndex := 1;
CurrentNode.StateIndex := 1;
end;}
Next;
end;
finally
Filter := sFilter;
Filtered := bFiltered;
Bookmark := sBookmark;
EnableControls;
end;
end;
end;
{-----------------------------------------------------------------------------
Procedure: FillListView
Purpose: Fill ListView
Arguments: AListView: TListView;
ATreeNode: TTreeNode
Result: None
Author: Cyclone
History: 2004-6-3 23:04:36
-----------------------------------------------------------------------------}
procedure TfmMain.FillListView(AListView: TListView; ATreeNode: TTreeNode);
var
sBookmark: TBookmarkStr;
sFilter: String;
bFiltered: Boolean;
CurrentListItem: TListItem;
CurrentListItemObj: PListItemObj;
OriginalCursor: TCursor;
begin
OriginalCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
try
FreeListItemObjs(AListView);
SetColumnStatus(psCategory);
//Add Folders
with dmMain.dsCategoryTree do
begin
sBookmark := Bookmark;
sFilter := Filter;
bFiltered := Filtered;
DisableControls;
try
Filter := 'ParentTypeCode=' + QuotedStr(PTreeNodeObj(ATreeNode.Data).CategoryCode);
Filtered := True;
First;
while not Eof do
begin
CurrentListItem := AListView.Items.Add;
CurrentListItem.Caption := FieldByName('TypeName').AsString;
CurrentListItem.SubItems.Add('');
CurrentListItem.SubItems.Add('');
CurrentListItem.SubItems.Add(FieldByName('Creator').AsString);
CurrentListItem.SubItems.Add(FieldByName('CreateDate').AsString);
CurrentListItemObj := CreateListItemObj(itCategory, FieldByName('TypeCode').AsString,
'', FieldByName('TypeName').AsString, '', '', '', '', FieldByName('Creator').AsString,
FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger, 0.0);
CurrentListItem.Data := CurrentListItemObj;
CurrentListItem.ImageIndex := FolderIndex;
Next;
end;
finally
Filter := sFilter;
Filtered := bFiltered;
Bookmark := sBookmark;
EnableControls;
end;
end;
//Add Documents
with dmMain.dsDocumentsList do
begin
if Active then
Close;
Parameters.ParamByName('DocType').Value := PTreeNodeObj(ATreeNode.Data).CategoryCode;
Open;
try
while not Eof do
begin
CurrentListItem := AListView.Items.Add;
CurrentListItem.Caption := FieldByName('DocName').AsString;
CurrentListItem.SubItems.Add(FieldByName('FileName').AsString);
CurrentListItem.SubItems.Add(FieldByName('Version').AsString);
CurrentListItem.SubItems.Add(FieldByName('Creator').AsString);
CurrentListItem.SubItems.Add(FieldByName('CreateDate').AsString);
CurrentListItemObj := CreateListItemObj(itDocument, FieldByName('DocNo').AsString,
FieldByName('DocType').AsString, FieldByName('DocName').AsString,
FieldByName('FileName').AsString, FieldByName('OriginalExtName').AsString,
FieldByName('Version').AsString, FieldByName('Remarks').AsString,
FieldByName('Creator').AsString,
FieldByName('LastModifier').AsString, FieldByName('CreateDate').AsDateTime,
FieldByName('LastModifyDate').AsDateTime, FieldByName('ModifyTimes').AsInteger,
FieldByName('FileSize').AsFloat);
CurrentListItem.Data := CurrentListItemObj;
//CurrentListItem.ImageIndex := DocumentIndex;
CurrentListItem.ImageIndex := GetIconIndex(FieldByName('OriginalExtName').AsString);
Next;
end;
finally
Close;
end;
end;
finally
Screen.Cursor := OriginalCursor;
end;
//ColumnToSort := -1;
lsvDocuments.CurrentColumn := -1;
lsvDocuments.SortType := stASC;
end;
procedure TfmMain.trvCategoryChange(Sender: TObject; Node: TTreeNode);
begin
pnlSearchTitle.Visible := False;
FillListView(lsvDocuments, Node);
AddHistoryTreeNode(Node);
RefreshActionStatus(Node);
RefreshSelectedItemsInfo(lsvDocuments);
RefreshAddress(Node);
end;
{-----------------------------------------------------------------------------
Procedure: FreeTreeNodeObjs
Purpose: Free TreeNode Objects
Arguments: ATreeView: TTreeView
Result: None
Author: Cyclone
History: 2004-6-3 23:04:54
-----------------------------------------------------------------------------}
procedure TfmMain.FreeTreeNodeObjs(ATreeView: TTreeView);
var
i: Integer;
begin
with ATreeView do
begin
for i := Items.Count - 1 downto 0 do
begin
if Items[i].Data <> nil then
Dispose(Items[i].Data);
end;
Items.Clear;
end;
end;
procedure TfmMain.actIconExecute(Sender: TObject);
begin
if (not actIcon.Checked) or (lsvDocuments.ViewStyle <> vsIcon) then
begin
lsvDocuments.LargeImages := imgLargeDocuments;
lsvDocuments.ViewStyle := vsIcon;
lsvDocuments.Arrange(ComCtrls.arDefault);
InitViewStyle;
actIcon.Checked := True;
end;
end;
procedure TfmMain.actSmallIconExecute(Sender: TObject);
begin
if (not actSmallIcon.Checked) or (lsvDocuments.ViewStyle <> vsSmallIcon) then
begin
lsvDocuments.ViewStyle := vsSmallIcon;
InitViewStyle;
actSmallIcon.Checked := True;
end;
end;
procedure TfmMain.actListExecute(Sender: TObject);
begin
if (not actList.Checked) or (lsvDocuments.ViewStyle <> vsList) then
begin
lsvDocuments.ViewStyle := vsList;
InitViewStyle;
actList.Checked := True;
end;
end;
procedure TfmMain.actReportExecute(Sender: TObject);
begin
if (not actReport.Checked) or (lsvDocuments.ViewStyle <> vsReport) then
begin
lsvDocuments.ViewStyle := vsReport;
InitViewStyle;
actReport.Checked := True;
end;
end;
procedure TfmMain.actThumbnailsExecute(Sender: TObject);
begin
if (not actThumbnails.Checked) or (lsvDocuments.ViewStyle <> vsIcon) then
begin
lsvDocuments.LargeImages := imgHugeDocuments;
lsvDocuments.ViewStyle := vsIcon;
lsvDocuments.Arrange(ComCtrls.arDefault);
InitViewStyle;
actThumbnails.Checked := True;
end;
end;
{-----------------------------------------------------------------------------
Procedure: CreateTreeNodeObj
Purpose: Create TreeNode Object
Arguments: const CategoryCode,
CategoryName,
ParentCategoryCode,
Remarks,
Creator,
LastModifier: String;
CreateDate,
LastModifyDate: TDateTime;
ModifyTimes: Integer
Result: PTreeNodeObj
Author: Cyclone
History: 2004-6-4 0:10:01
-----------------------------------------------------------------------------}
function TfmMain.CreateTreeNodeObj(const CategoryCode, CategoryName,
ParentCategoryCode, Remarks, Creator, LastModifier: String; CreateDate,
LastModifyDate: TDateTime; ModifyTimes: Integer): PTreeNodeObj;
var
ATreeNodeObj: PTreeNodeObj;
begin
New(ATreeNodeObj);
ATreeNodeObj^.CategoryCode := CategoryCode;
ATreeNodeObj^.CategoryName := CategoryName;
ATreeNodeObj^.ParentCategoryCode := ParentCategoryCode;
ATreeNodeObj^.Remarks := Remarks;
ATreeNodeObj^.Creator := Creator;
ATreeNodeObj^.CreateDate := CreateDate;
ATreeNodeObj^.LastModifier := LastModifier;
ATreeNodeObj^.LastModifyDate := LastModifyDate;
ATreeNodeObj^.ModifyTimes := ModifyTimes;
Result := ATreeNodeObj;
end;
{-----------------------------------------------------------------------------
Procedure: CreateListItemObj
Purpose: Create ListItem Object
Arguments: const ItemType: Integer;
const DocName,
FileName,
Creator: String;
CreateDate: TDateTime
Result: PListItemObj
Author: Cyclone
History: 2004-6-4 0:09:24
-----------------------------------------------------------------------------}
function TfmMain.CreateListItemObj(const ItemType: TItemType; const DocNo, DocType, DocName,
FileName, OriginalExtName, Version, Remarks, Creator, LastModifier: String; CreateDate, LastModifyDate: TDateTime;
ModifyTimes: Integer; const FileSize: Double): PListItemObj;
var
AListItemObj: PListItemObj;
begin
New(AListItemObj);
AListItemObj^.ItemType := ItemType;
AListItemObj^.DocNo := DocNo;
AListItemObj^.DocType := DocType;
AListItemObj^.DocName := DocName;
AListItemObj^.FileName := FileName;
AListItemObj^.FileSize := FileSize;
AListItemObj^.OriginalExtName := OriginalExtName;
AListItemObj^.Version := Version;
AListItemObj^.Remarks := Remarks;
AListItemObj^.Creator := Creator;
AListItemObj^.CreateDate := CreateDate;
AListItemObj^.LastModifier := LastModifier;
AListItemObj^.LastModifyDate := LastModifyDate;
AListItemObj^.ModifyTimes := ModifyTimes;
Result := AListItemObj;
end;
{-----------------------------------------------------------------------------
Procedure: FreeListItemObjs
Purpose: Free ListItem Objects
Arguments: AListView: TListView
Result: None
Author: Cyclone
History: 2004-6-4 0:09:14
-----------------------------------------------------------------------------}
procedure TfmMain.FreeListItemObjs(AListView: TListView);
var
i: Integer;
begin
with AListView do
begin
for i := Items.Count - 1 downto 0 do
begin
if Items[i].Data <> nil then
Dispose(Items[i].Data);
end;
Items.Clear;
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -