AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Prozedur zur Frameausrichtung optimieren

Offene Frage von "Sko"
Ein Thema von Sko · begonnen am 17. Mär 2007
Antwort Antwort
Benutzerbild von Sko
Sko

Registriert seit: 11. Sep 2005
327 Beiträge
 
Turbo Delphi für Win32
 
#1

Prozedur zur Frameausrichtung optimieren

  Alt 17. Mär 2007, 10:12
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
MfG Sko
Zitat von Phoenix:
[OT]Phoenix guckt in die Glaskugel, zuckt mit den Flügelspitzen, krächzt etwas von wegen 'Boden' und 'Scherben' und schubbst die Kugel in Richtung Tischkante.[/OT]
Rockbox
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz