unit SerienDatabase;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls,
Vcl.ComCtrls,
Vcl.ExtCtrls, ShellAPI,
VirtualTrees.BaseAncestorVCL, VirtualTrees.BaseTree, VirtualTrees.AncestorVCL, VirtualTrees,
StringLib,
Vcl.Mask;
type
TSerienDB =
class(TForm)
LbEVerzeichnis: TLabeledEdit;
VST: TVirtualStringTree;
LbEStatus: TLabeledEdit;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
type
PTreeData = ^TTreeData;
TTreeData =
record
FCaption:
String;
(* Titel *)
FColumn1: Integer;
(* Anzahl Folgen *)
FColumn2: Integer;
(* Anzahl bereits gesehen *)
FColumn3:
String;
(* Zuletzt abgespielt am *)
FColumn4:
String;
(* Serienname / Übergeord. Verzeichns *)
end;
var
SerienDB: TSerienDB;
SDBKnoten: PVirtualNode;
DateiListe: TStringList;
implementation
{$R *.dfm}
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; ARecord: TTreeData): PVirtualNode;
var
Data: PTreeData;
begin
Result := AVST.AddChild(ANode);
Data := AVST.GetNodeData(Result);
Avst.ValidateNode(Result, False);
Data^.FCaption := ARecord.FCaption;
Data^.FColumn1 := ARecord.FColumn1;
Data^.FColumn2 := ARecord.FColumn2;
Data^.FColumn3 := ARecord.FColumn3;
Data^.FColumn4 := ARecord.FColumn4; <- hier knallt es
end;
procedure VirtualTreeErzeugen;
var
I: Integer;
Serientitel:
String;
TreeData: TTreeData;
Node: PVirtualNode;
begin
SerienDB.VST.BeginUpdate;
for i := 0
to DateiListe.Count -1
do
begin
SerienDB.LbEStatus.Text := DateiListe[i];
SerienDB.LbEStatus.Refresh;
if copy(DateiListe[i], 1,1) = '
V'
then
begin
(* hier werden nur die Serien zugefügt *)
Node :=
nil;
DateiListe[i] := copy(DateiListe[i], 2, length(DateiListe[i]) -1);
TreeData.FCaption := ExtractFileName(DateiListe[i]);
(* Titel *)
TreeData.FColumn1 := 0;
(* Anzahl Filme *)
TreeData.FColumn2 := 0;
(* Anzahl abgespielt *)
TreeData.FColumn3 := '
01.01.1980';
(* Zuletzt abgespielt *)
TreeData.FColumn4 := DateiListe[i];
(* Titel *)
Node := AddVSTStructure(SerienDB.VST, Node, TreeData);
end else
begin
(* sonst ist es eine Folge *)
DateiListe[i] := copy(DateiListe[i], 2, length(DateiListe[i]) -1);
TreeData.FCaption := ExtractFileName(DateiListe[i]);
(* Titel *)
TreeData.FColumn1 := 0;
(* Anzahl Filme *)
TreeData.FColumn2 := 0;
(* Anzahl abgespielt *)
TreeData.FColumn3 := '
01.01.1980';
(* Zuletzt abgespielt *)
TreeData.FColumn4 := DateiListe[i];
(* Titel *)
AddVSTStructure(SerienDB.VST, Node, TreeData);
end;
end;
SerienDB.VST.EndUpdate;
end;
Procedure FindFilesTree(aPath:
String; aWithFiles: Boolean);
Var
SearchRec: TSearchRec;
Begin
// Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen
aPath := IncludeTrailingBackslash(aPath);
If FindFirst(aPath + '
*.*', faDirectory, SearchRec) = 0
Then
Begin
Repeat
If (SearchRec.
Name <> '
.')
and (SearchRec.
Name <> '
..')
then
Begin
If SearchRec.Attr
and faDirectory <> 0
then
Begin
DateiListe.Add('
V' +aPath +SearchRec.
Name);
FindFilesTree(aPath + SearchRec.
Name, aWithFiles);
End else
begin
DateiListe.Add('
D' +aPath +SearchRec.
Name);
end;
End;
Until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
End;
End;
procedure TSerienDB.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DateiListe.Free;
end;
procedure TSerienDB.FormCreate(Sender: TObject);
begin
DateiListe := TStringList.Create;
SerienDB.LbEStatus.Text := IntToStr(screen.Width) +'
/ ' +IntToStr(SerienDB.Width) +'
/ ' +IntToStr(SerienDB.Height);
FindFilesTree(LbEVerzeichnis.Text, true);
VirtualTreeErzeugen;
end;
end.