// ----- Zeichnet die Bilder auf das Panel in der Scrollbox --------------------------------------------------------------------- Privat
Procedure TFrame_Main.Zeichnen;
Var
i,z,
Titel_Breite,
Titel_Hoehe,
GesamtHoehe,
GesamtBreite,
HoehenMulti,
AnzahlX,
AnzahlY,
X,Y : Integer;
Obj : TStartBild;
// Panel an Scrollbox-Breite anpassen
Procedure PanelBreiteAnScrollBox;
Begin
If ScrollBox_Start.VertScrollBar.Visible
Then
Panel_Start.Width := ScrollBox_Start.ClientWidth - 4
Else
Panel_Start.Width := ScrollBox_Start.ClientWidth + 15;
End;
// Code innerhalb der For-Schleife
Procedure ObjekteZeigen;
Begin
Obj := BList[i];
Obj.Bild.Width := Laenge;
Obj.Bild.Height := Laenge;
Obj.Titel.Width := Laenge;
Obj.Titel.Height := TitelHoehe;
Obj.Bild.Left := X;
Obj.Bild.Top := Y;
Obj.Titel.Left := X;
Obj.Titel.Top := Obj.Bild.Top + Laenge;
Obj.Titel.Color := TitelFarbe;
Obj.Titel.Font := Panel_Start.Font;
Obj.Bild.Visible := True;
Obj.Titel.Visible := True;
// Application.ProcessMessages;
X := X + GesamtBreite;
If X + GesamtBreite > Panel_Start.ClientWidth
Then
Begin
X := Abstand;
Y := Y + GesamtHoehe;
End;
End;
// ********** HAUPTPROCEDURE **********
begin
If Not Self.Visible
Then Exit;
z := BList.Count;
If z > 0
Then
Begin
Label_Schriftart.Color := TitelFarbe;
PanelBreiteAnScrollBox;
TitelHoehe := 0;
For i := 0
To z-1
Do
Begin
Obj := BList[i];
Obj.Bild.Visible := False;
Obj.Titel.Visible := False;
Obj.Bild.Canvas.Font := Panel_Start.Font;
Titel_Breite := Obj.Bild.Canvas.TextWidth(Obj.Titel.Caption) + 10;
If Titel_Breite > Laenge
Then
HoehenMulti := 2
Else
HoehenMulti := 1;
Titel_Hoehe := (Obj.Bild.Canvas.TextHeight(Obj.Titel.Caption) + (HoehenMulti * 6)) * HoehenMulti;
If Titel_Hoehe > TitelHoehe
Then
TitelHoehe := Titel_Hoehe;
End;
GesamtBreite := Laenge + Abstand;
GesamtHoehe := Laenge + Abstand + TitelHoehe;
X := Abstand;
Y := Abstand;
AnzahlX := (Panel_Start.Width - Abstand)
Div GesamtBreite;
If AnzahlX >= z
Then
Begin
Panel_Start.Height := GesamtHoehe + Abstand;
PanelBreiteAnScrollBox;
End Else
Begin
AnzahlY := z
Div AnzahlX;
If z
Mod AnzahlX > 0
Then Inc(AnzahlY);
Panel_Start.Height := (AnzahlY * GesamtHoehe) + Abstand;
PanelBreiteAnScrollBox;
End;
AnzahlX := (Panel_Start.Width - Abstand)
Div GesamtBreite;
If AnzahlX >= z
Then
Begin
Panel_Start.Height := GesamtHoehe + Abstand;
PanelBreiteAnScrollBox;
End Else
Begin
AnzahlY := z
Div AnzahlX;
If z
Mod AnzahlX > 0
Then Inc(AnzahlY);
Panel_Start.Height := (AnzahlY * GesamtHoehe) + Abstand;
PanelBreiteAnScrollBox;
End;
For i := 0
To z-1
Do ObjekteZeigen;
End;
end;
// ----- Baumdarstelung initialisieren ------------------------------------------------------------------------------------------ Privat
Function TFrame_Main.BaumInit(Sender: TBaseVirtualTree) : Boolean;
Var
Data : PNodeData;
Node : PVirtualNode;
PId : Integer;
begin
Try
If Not DatMod.Qset_Modulix.Active
Then
DatMod.Qset_Modulix.Open;
DatMod.Qset_Modulix.Filter := '
ID_PARENT=0 and BILD<>null';
DatMod.Qset_Modulix.Filtered := True;
If DatMod.Qset_Modulix.RecordCount > 0
Then
Begin
DatMod.Qset_Modulix.First;
VST.Clear;
VST.BeginUpdate;
// Haupteinträge (Parent = 0)
While Not DatMod.Qset_Modulix.Eof
Do
Begin
Node := Sender.AddChild(Sender.RootNode);
Data := Sender.GetNodeData(Node);
Data.ImgId := DatMod.Qset_Modulix.FieldByName('
REIHENFOLGE').AsInteger;
Data.Id := DatMod.Qset_Modulix.FieldByName('
ID_MODULIX').AsInteger;
Data.PId := DatMod.Qset_Modulix.FieldByName('
ID_PARENT').AsInteger;
Data.Titel := DatMod.Qset_Modulix.FieldByName('
TITEL').AsString;
Data.Caption := DatMod.Qset_Modulix.FieldByName('
CAPTION').AsString;
DatMod.Qset_Modulix.Next;
End;
// Untereinträge (Parent > 0)
DatMod.Qset_Modulix.Filter := '
ID_PARENT>0 and BILD<>null';
If DatMod.Qset_Modulix.RecordCount > 0
Then
Begin
DatMod.Qset_Modulix.First;
While Not DatMod.Qset_Modulix.Eof
Do
Begin
PId := DatMod.Qset_Modulix.FieldByName('
ID_PARENT').AsInteger;
Node := GetNodeBy_Id(PId);
If Node <>
Nil Then
Begin
Node := VST.AddChild(Node);
Data := Sender.GetNodeData(Node);
Data.ImgId := DatMod.Qset_Modulix.FieldByName('
REIHENFOLGE').AsInteger;
Data.Id := DatMod.Qset_Modulix.FieldByName('
ID_MODULIX').AsInteger;
Data.PId := PId;
Data.Titel := DatMod.Qset_Modulix.FieldByName('
TITEL').AsString;
Data.Caption := DatMod.Qset_Modulix.FieldByName('
CAPTION').AsString;
End;
DatMod.Qset_Modulix.Next;
End;
End;
VST.EndUpdate;
DatMod.Qset_Modulix.Filtered := False;
Result := True;
End Else Raise Exception.Create('
keine Parent=0 Einträge in der Datenbank') at @TFrame_Main.BaumInit;
Except
on e:
exception Do
Begin
Result := False;
fInitOkay := e.
Message;
End;
End;
end;