repaint hilft auch nicht.
In FormCreate erzeuge ich die Labels
Delphi-Quellcode:
SetLength(a_Lbl,i_LblCnt);
for i := low(a_Lbl) to high(a_Lbl) do
begin
a_Lbl[i] := TLabel.Create(Self);
a_Lbl[i].Font.Size:= 10;
a_Lbl[i].Parent := Form2;
a_Lbl[i].Caption := IniFile.ReadString(sl_Lbl[i],'label text','');
a_Lbl[i].Left := IniFile.ReadInteger(sl_Lbl[i],'x',8);
a_Lbl[i].Top := IniFile.ReadInteger(sl_Lbl[i],'y',8);
//hier rufe ich die Funktion auf und setze das Parent
CheckAndSetLabelParent(a_Lbl[i],a_Gbx);
end;
In der Funktion setze ich das PArent
Delphi-Quellcode:
procedure TForm2.CheckAndSetLabelParent(var lb_Temp : TLabel; a_GbxTemp : GbxArray);
var
i_GbX : Integer;
i_GbY : Integer;
i_GbH : Integer;
i_GbB : Integer;
x : Integer;
y : Integer;
i : Integer;
begin
//alle vorhandenen Groupboxen durch gehen
for i := low(a_GbxTemp) to high(a_GbxTemp) do
begin
i_GbX := a_GbxTemp[i].Left;
i_GbY := a_GbxTemp[i].Top;
i_GbH := a_GbxTemp[i].height + i_GbY;
i_GbB := a_GbxTemp[i].width + i_GbX;
//prüfen, in welche groupbox das Label gehört
if (lb_Temp.Left >= i_GbX) and (lb_Temp.Left<= i_GbB) and (lb_Temp.Top >= i_GbY) and (lb_Temp.Top<= i_GbH) then
begin
lb_Temp.Left := lb_Temp.Left - a_GbxTemp[i].Left;
lb_Temp.Top := lb_Temp.Top - a_GbxTemp[i].Top;
lb_Temp.Parent := a_GbxTemp[i];
lb_Temp.BringToFront;
end
else
lb_Temp.Parent := Form2;
end;
end;