Welche Voraussetzungen müssen erfüllt sein, damit eine vertikale Bildlaufleiste angezeigt wird? Es scheint sehr zufällig zu sein.Alle Anforderungen für eine vertikale Bildlaufleiste angezeigt: Warum versteckt es sich?
I versucht:
HorzScrollBar.Range := 10000; // set the range to an higher number
VertScrollBar.Range := 10000; // set the range to an higher number
ShowScrollBar(Handle, SB_BOTH, True);
In Kombination mit Bereichen in Objektinspektoren sowie Autoscroll-on/off, Client Höhe (von der Form) eingestellt wird. Ich denke, ich hatte in der letzten Stunde alle möglichen Kombinationen. Es scheint, als ob es egal ist, was ich mache, die Bildlaufleiste kommt nicht mehr zurück - wo es zuerst auftauchte, als ich einige Einstellungen nach dem Zufallsprinzip wieder anpasste (auf die gleichen Einstellungen?).
Was ich zu erreichen versuchen: wenn ich einen Knopf die Form drücken zeigt und auf dem rechten Seite des Bildschirms zeigen sollte, mit dem folgenden:
Form1.Height := Screen.Height - 40;
Form1.Left := Screen.Width - 423;
Form1.Show;
Das Formular ist ein Optionsmenü, in dem alle Die Optionen passen perfekt auf den Bildschirm, den ich gerade benutze. Allerdings habe ich ein Panel erstellt, das länger wird (mehr Höhe) und alle anderen Optionen nach unten drückt, wenn eine bestimmte Option angeklickt wird. So DANN ist, wenn ich diese Bildlaufleiste brauche, wie Einstellungen vom Bildschirm fallen.
Im Idealfall würde es nur angezeigt, wenn diese Optionen angeklickt und verschwinden, wenn es nicht mehr nötig ist, aber irgendwie wird es überhaupt nicht angezeigt - es spielt keine Rolle, welche Größen oder Bereiche ich dem Formular gebe.
Welche andere Option vergesse ich zu setzen/was andere Abhängige AutoScroll oder nur VerticalScrollbar haben, um bei Bedarf angezeigt zu werden?
Mit ShowMessage-Funktion habe ich einige weitere Informationen. Ich habe eine Schaltfläche, die die folgende durchgeführt:
procedure TfrmInstellingenMenu.Button1Click(Sender: TObject);
begin
VertScrollBar.Visible := true;
ShowMessage('Visible? ' + BoolToStr(VertScrollBar.IsScrollBarVisible));
//returns "Visible? -1". -1 is TRUE*, so yes (*tnx Ken)
ShowMessage('Autoscroll turned on? ' + BoolToStr(AutoScroll));
//returns "Autoscroll turned on? 0". 0 is False, so no
ShowMessage('Range=' + IntToStr(VertScrollBar.Range));
//returns "Range=8000".
end;
So obwohl die VertScrollBar eingeschaltet, Autoscroll (deswegen) wird automatisch ausgeschaltet und der Bereich ist bei weitem genug, warum es immer noch versteckt?
Edit2: Einige weitere Details: Es ist ein VCL-Formular, Borderstyle ist auf bsSizable gesetzt. In der Form gibt es im Grunde nur zwei gleich große Panels. Sie haben beide Größenbeschränkungen und sind beim Start nach links und rechts ausgerichtet. Ein Button richtet sie nach Oben und Unten aus. Wenn ich den Knopf setze, um beide auf Top auszurichten, ist es egal, wie ich die Formhöhe eingestellt habe (wahrscheinlich wegen der Einschränkungen der beiden Panels). Es wird jedoch für meinen Computerbildschirm zu hoch und ein Teil des Formulars verschwindet vom Bildschirm. Wenn ich eins zum Ausrichten nach oben und das andere nach unten setze, ist das ganze Formular auf dem Bildschirm, aber die zwei Felder überlappen einander. Ah, und natürlich noch keine Scrollbar.
> * "Form ist ein Optionsmenü" *> Dialograhmen? VCL-Autoscroll funktioniert mit einem großen Rahmen. –
Sie liegen falsch. False ist 0. Wenn Sie 'BoolToStr (VertScrollBar.IsScrollBarVisible, True)' verwenden, sehen Sie die korrekten Werte. –
Ist es möglich, dass sich das Optionsmenü in einem anderen Container befindet, der nicht entsprechend vergrößert wird? – NGLN