Hallo,
ich richte mit folgender Prozedur Frames in einer Scrollbox aus. Die Frames werden bei einer Größenänderung der Form und bei Größenänderung der Frames selbst neu ausgerichtet. Allerdings dauert das bei vielen Frames (> 300) auch mal 2-3 Sekunden. Ein bekannter hat mir ein Programm gezeigt, welches das selbe macht (Thumbs anzeigen) und die Ausrichtung deutlich schneller macht: da kann man mit einem Schieberegler die Größe der Thumbs einstellen und sieht das gleich live in der Thumbansicht
. Daher meine Frage: Kann man diese Prozedur optimieren? Und wenn ja, dann wie?
Delphi-Quellcode:
procedure TMainForm.ReAlignFrames(FrameWidth: integer);
var
i, e, LineCount, line, Fcount: integer;
ThumbFrame: TFThumb;
const
Faktor = 0.78;
// LineCount: Anzahl der Frames pro "Zeile"
// line: aktuelle Zeile
// FCount ist ein Extra-Zähler der benötigt wird, da nicht immer alle Thumbs ausgerichtet werden müssen (einige können unsichtbar sein)
// Faktor: Wert mit dem die Höhe der Thumbs aus der Breite errechnet wird
begin
FCount := 0;
LineCount := trunc(SBThumbs.ClientWidth / FrameWidth); // SBThumbs: Scrollbox in der die Frames ausgerichtet werden
for i := 0 to ThumbList.Count - 1 do
begin
ThumbFrame := TFThumb(ThumbList[i]);
if ThumbFrame.Visible then
begin
if FrameWidth <> ThumbFrame.Width then
begin
ThumbFrame.Width := FrameWidth;
ThumbFrame.Height := round(FrameWidth * Faktor);
end;
e := FCount + 1;
if FCount >= LineCount then // wenn der aktuelle Frame nicht mehr auf die 1. Zeile passt...
begin
line := roundup(e / LineCount) - 1; // aktuelle Zeile ermitteln
ThumbFrame.Top := ((ThumbFrame.Height * line) + 2) - SBThumbs.VertScrollBar.Position;
ThumbFrame.Left := ThumbFrame.Width * (FCount mod LineCount) + 2;
end
else
begin
ThumbFrame.Top := 2 - SBThumbs.VertScrollBar.Position;
ThumbFrame.Left := (ThumbFrame.Width * FCount) + 2;
end;
inc(FCount);
end;
end;
end;
Ich würde mich sehr freuen wenn ihr mir helfen könntet und bedanke mich schon mal