Seite 1 von 1

Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 13:17
von Manfred
Wenn ich mir ein Dialogfenster baue und dann später mit der Maus die Größe verändere, dann kann es ja vorkommen, das irgendwann ein Scrollbar rechts oder unten auftaucht. Wie kann ich das ermitteln, ob er vorhanden ist oder wieder weg ist. Bzw. anders gefragt, wenn ich ein Dialogfenster komplett benutze und dann durch ändern der Breite einen Scrollbalken unten erzeuge, was muß ich dann machen, damit das untere Element nicht darunter verschwindet, sondern entsprechend höher geschoben werden kann? Wie und woher bekomme ich dafür die Maße und die Rückmeldung, das es nun einen Scrollbalken gibt, oder nicht mehr.

Re: Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 16:00
von Jan
Hallo Manfred,

gerade diese Woche musste ich mich mal wieder damit beschäftigen. Bei mir läuft das so: Ich gebe dem Dialog oder der Tabpage und den relevanten XbParts auf diesem Dialog ein :layoutAlign mit, damit der sich automoatisch korrekt resized. Und sage ihm (bei Bedarf, da mache ich nicht grundsätzlich) oDlg:drawingArea:scrollbars := XBP_SCROLLBAR_VERT (weil ich nur die vertikale haben möchte, ansonsten muß man natürlich auch die horizontale dazu nehmen).

Bei mir klappt das in dieser Kombination einwandfrei. Automatisch. Deswegen frage ich auch nie ab, wie groß jetzt eigentich der Dialog ist, oder ob es die Scrollbar schon gibt.

Einen Punkt in Deinem Beitrag habe ich nicht ganz verstanden. Also renn ich da vielleicht offene Türen ein: oDlg:drawingArea:currentSize() gibt mir die aktuelle Größe zurück.

Jan

Re: Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 16:08
von Manfred
LayoutAlign gibt es aber erst in der 2er?
Ich passe es gerade noch in der 1.9er an. Ich werde wohl erst in den nächsten Tagen dazu kommen auf die 2er im scharfen Betrieb umzustellen. Also mß ich da noch etwas warten.

Re: Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 16:10
von Jan
Oh! OK, da Du zuletzt immer mit der 2er was gefragt hattest war ich davon asugegangen, daß das hier auch der Fall sei.

Jan

Re: Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 16:15
von Manfred
indirekt. Ich möchte noch zweigleisig fahren, bis der erste User die 2er im Einsatz hate und nichts grobes findet. Ich hatte aber auch LayoutAlign wieder vergessen. Du hattest es ja schonmal erwähnt vor längerer Zeit. Kommt direkt auf meine Liste für Samstag in OS.

Re: Scrollbar ermitteln

Verfasst: Sa, 20. Jan 2018 16:21
von Jan
Ich hab sowas in der 1.9 immer über den oDlg:resize gemacht. Wo ich mir noch unsicher ist, ist dieser Text aus der 2.0-Hilfe: "Under Windows, an XbpIWindow object displays scroll bars only if needed. No scroll bars are displayed if all child objects are visible on the screen, regardless of the value assigned to :scrollbars." Ich meine mich erinnern zu können, das ich in de r1.9 eine Scrollbar erzwingen konnte, egal, ob alles auf den Dialog passte oder nicht. Da bin ich mir aber im Moment nicht mehr so ganz sicher.

Jan

Re: Scrollbar ermitteln

Verfasst: So, 21. Jan 2018 0:49
von AUGE_OHR
@Manfred : wenn der Scrollbalken kommt und was verdeckt ... was willst du dagegen tun ?

wie man beim plazieren von XbParts die o:DrawingArea benutzt sollte man ein "resize" ebenso einsetzten.

Code: Alles auswählen

oDlg:DrawingArea:Resize := {|aOld,aNew,oSelf| Do_Resize(aOriginal,aNew,oSelf) }
aNew enthält die Grösse der (neuen) o:DrawingArea ... egal ob nun gerade Scrollbars "visible" sind oder nicht.

---

ich nutzt nun NICHT aOld, aber wohl der LayoutManager in der v1.9x
wenn man 100 x min/max/normal macht sieht man was passiert -> Chaos
deshalb verwende ich immer die "aOriginal" Daten in Relation zu aNew

auf diesem einfachen Prinzip beruht auch DXE_Dialog.

nach dem o:Create läuft mein LayoutManager durch die DrawingArea:Childlist() und sammelt alle Infos von den XbParts.
der DXE_Dialog hat nun seine eigene o:Resize() Methode die auch reagiert wenn man ein Table PC von Landscape auf Portait wechselt. da der DXE_Dialog auch auf Strg-MausWheel reagiert ist auch ein "Zoom" mit den Fingern auf dem Table PC möglich.

---

um eine Scrollbar zu "erzwingen" muss man
1.) o:drawingArea:scrollbars := "bestücken"
2.) eine XbpStatic auf die o:DrawingArea platzieren welche grösser ist als o:drawingArea
3.) nach der Anzeige (o:Show) muss man ein "resize" einleiten damit Scrollbars erscheinen

---

Frage : beachtet der v2.x LayoutManager auch Fonts oder nur Pos / Size ?

Re: Scrollbar ermitteln

Verfasst: So, 21. Jan 2018 9:14
von Manfred
Hi Jimmy
ich dachte mir, das ich das beim Resize berücksichtige und dann alles etwas nach oben schiebe und kleiner mache.

Re: Scrollbar ermitteln

Verfasst: So, 21. Jan 2018 9:39
von AUGE_OHR
Manfred hat geschrieben: So, 21. Jan 2018 9:14 ich dachte mir, das ich das beim Resize berücksichtige und dann alles etwas nach oben schiebe und kleiner mache.
damit du dann in einer rekursiven Schleife landest ... :roll:

Re: Scrollbar ermitteln

Verfasst: So, 21. Jan 2018 9:56
von Manfred
war wie gesagt nur eine idee, weil es mir zum ersten mal bewußt aufgefallen ist. Aber wieso eine rekursive Schleife? Wenn ich den Dialog mit der Maus in der größe ziehe, oder drücke sollte doch nur solange ein resize stattfinden, bis ich die Maustaste loslasse. Aber ist auch egal. Ich dachte nur es gäbe da etwas vom System her, was ich übersehen habe. Ich begrenze die Fläche so weit es geht dann eben nach unten ab, setze also den untersten part so, das der Scrollbalken nicht stört und das sollte genügen. Ist eh nur ein Dialog, welcher selten aufgerufen wird.