Frage

Ich habe lief in ein kleines Problem. Ich erzeuge dynamisch einige Steuerelemente und legen sie auf ein TScrollbox Komponente. Aber ich merkte, dass, wenn die scrollbox sichtbar ist, Benutzer eindeutig jede der Kontrollen erstellt und platziert sehen ist. So ist es, wie viel Arbeit aussieht getan wird, und es ist langsam.

versteckte ich die scrollbox und erzeugt alle Steuerelemente auf sie, die viel weniger Zeit in Anspruch nahm und kein Flackern und gleichermaßen. Aber hier ist das Problem. Wenn ich die scrollbox zeigen erneut, seine Scrollbar erscheint nicht, bis ich die Form tatsächlich ändern. (Die Ausrichtung der scrollbox ist alClient)

Alle Ideen, wie dieses Problem beheben?

Versuchte Neulackierung, aber es hat nicht funktioniert. Aktualisieren hat entweder nicht funktionieren.

Danke

EDIT:

TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
    fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;

Der obige Code zeigt, wie ich verstecken und die scrollbox zeigen.
fNaujasTermas erzeugt eine Platte mit mehreren trackbars, Bildern und Änderungen.

Ich bin mir nicht sicher, was den Schritt-für-Schritt-Erklärung dort sein könnte. So stellen Sie ein Verfahren, bei dem es einige Panel mit vielen Kontrollen auf sie erzeugen würde und die scrollbox als Eltern gesetzt. Verstecken scrollbox, bevor irgendetwas zu erzeugen und sichtbar machen es schließlich getan.
Oh btw, ist die Platte ausgerichtet alTop. Also jedes Mal neue Platte erstellt und in scrollbox platziert, wird es am oberen Rand angezeigt, während alle anderen Platten nach unten bewegen wird.

Dies ist, wie ich die scrollbox selbst erstellen

pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;

EDIT2: Ich glaube, ich weiß, wie dies zu reproduzieren
. Es scheint, dass, wenn eine neue Platte auf den scrollbox Hinzufügen es nicht, es zählt in der Gesamthöhe aller Kontrollen, die bereits in diesem scrollbox sind.

So Beispiel zu geben. Lassen Sie uns sagen Panel 1 hat eine Höhe von 200 Pixel.
Scrollbox Höhe ist 300px.

So nach zwei Platten zu schaffen, die auf 400px Höhe addieren, scrollbox zeigt nicht die Bildlaufleisten, obwohl die Hälfte der zweiten Platte nicht sichtbar ist. Wenn ich ein weiteres Panel = 600px Gesamt hinzufügen, zeigt scrollbox die Scrollbar, das aussieht wie es nur je 2 Platten bewegen würde, nicht 3. Beim Versuch, solche Fenster zu rollen, bekommen Werte neu berechnet und alles ist schön gezeigt.

So ist das Hauptproblem, wie eine scrollbox zeigen Scrollbar "in time" zu machen, so dass keine Platten Hälfte geschnitten sind?

War es hilfreich?

Lösung

Sie können die scrollbox auffordern, seine Scrollbar Eigenschaften neu zu berechnen, indem die Realign() Methode aufrufen es von TWinControl erbt. Zur Minimierung von Flackern Sie sollten dies tun, während es noch unsichtbar ist, etwa so:

ScrollBox.Visible := False;
try
  // create your new panel ...
finally
  ScrollBox.Realign;
  ScrollBox.Visible := True;
end;

Andere Tipps

Wie ich sagte, in den Kommentaren, ich bin nicht in der Lage, das Problem zu reproduzieren. Es würde helfen, wenn Sie gibt den Schritt-für-Schritt-Anweisungen, wie das Problem zu reproduzieren.

Aber wenn Sie sagen, dass das Problem verschwindet, wenn Sie das Formular Größe ändern, warum nicht einfach das Formular der Größe? Vielleicht könnten Sie versuchen, es 0 Pixel mit SetWindowPos zu ändern. Sie könnten auch ScrollBox1.Perform(WM_VSCROLL, SB_PAGEUP, 0); versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top