Hi Leute,
ich suche eine Möglichkeit, mir für alle bekannten Gadgets abzufragen, ob ein Scrollbalken vorhanden ist oder nicht. Bei normalen Listobjekten in PB sollte das eigentlich kein Problem sein:
Anzahl der Elemente x Schriftgröße in Pixel = Gesamtgröße
Gesamtgröße < Gadgetgröße = Scrollbalken vorhanden
Schwieriger wird es bei aber bei einem ExplorerTreeGadget(). Gibt es da eine einfache Möglichkeit mittels API bzw. Sendmessage? Mir ist bisher nichts bekannt ....
(Ich hab bisher nur unzufriedene Methode entdeckt, die zwar bei PB eigenen Objekten funktionieren, aber bei fremden Anwendungen wie SAP, Lotus usw. ein merkwürdiges Verhalten hervorrufen.)
Scrollbalken in Gadget?
>Anzahl der Elemente x Schriftgröße in Pixel = Gesamtgröße
>Gesamtgröße < Gadgetgröße = Scrollbalken vorhanden
... nix verstanden
Beispiel :
>Gesamtgröße < Gadgetgröße = Scrollbalken vorhanden

Beispiel :
Code: Alles auswählen
If GetWindowLong_(hwnd,#GWL_STYLE) & #WS_HSCROLL
Debug "Hurra , ein Scrollleiche"
EndIf
edel hat geschrieben:>Anzahl der Elemente x Schriftgröße in Pixel = Gesamtgröße
>Gesamtgröße < Gadgetgröße = Scrollbalken vorhanden
... nix verstanden
Beispiel :Code: Alles auswählen
If GetWindowLong_(hwnd,#GWL_STYLE) & #WS_HSCROLL Debug "Hurra , ein Scrollleiche" EndIf

Der Befehl liefert mir auf meinen Testsystemen (WinME,WinXp,Win200) stets unterschiedliche Werte, obwohl der Code immer der gleiche ist. Hab mich daher auch ganz schnell von der Funktion verabschiedet und mich auf die etwas "umständliche" Rechenmethode konzentriert. Werd mich aber zu Hause nochmal dransetzen und schauen, was da los ist. Dachte nämlich, das ich einfach den falschen API-Bfehle nutze, aber wenn der Vorschlag nun von einer zweiten Person kommt, schau ich mir das nochmal an.
Läuft die Funktion bei dir korrekt?
Zur Rechenmethode:
Ich ermittle die Anzahl der Einträge eines Listviewgadgets (A)
Ermittel die Schriftgröße und rechne diese in Pixel um (B)
Nun nehme ich (A) mal (B) = (C)
Im zweiten Schritt ermittel ich die Gadgethöhe (D)
und vergleiche Sie mit (C)
Ist (C) größer als (D) hat das Gadget einen Scrollbalken
Ist (C) kleiner als (D) hat das Gadget keinen Scrollbalken
Sehr merkwürdig ....
Wie schon erwähnt arbeitet der Befehl auf allen System irgendwie anders, teilweise korrekt, teilweise mit falschen Rückgabewerte, teilweise immer der gleiche Wert.
Ich habe nun herausgefunden, das das Problem bei einer fertig kompilierten Exe, sofern dies sofort nachdem Windows-Start erstellt wird, nicht mehr auftritt. Kann mir das zwar nicht erklären (Ich glaube dafür gibt es auch keine Erklärung), aber innerhin kann ich dann meine Rechenmethode verwerfen und das zukünftig einfach im Hinterkopf behalten.
Danke für das Posten des Codes edel, das mich dazu gebracht hat, die Sache nochmal anzugehen
Wie schon erwähnt arbeitet der Befehl auf allen System irgendwie anders, teilweise korrekt, teilweise mit falschen Rückgabewerte, teilweise immer der gleiche Wert.
Ich habe nun herausgefunden, das das Problem bei einer fertig kompilierten Exe, sofern dies sofort nachdem Windows-Start erstellt wird, nicht mehr auftritt. Kann mir das zwar nicht erklären (Ich glaube dafür gibt es auch keine Erklärung), aber innerhin kann ich dann meine Rechenmethode verwerfen und das zukünftig einfach im Hinterkopf behalten.
Danke für das Posten des Codes edel, das mich dazu gebracht hat, die Sache nochmal anzugehen

- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Es scheint bei dir ja jetzt zu gehen aber du weisst schon das die unterschiedlichen Ergebnisse auch auf unterschiedlich eingestellten Scrollbars basieren können.Der Befehl liefert mir auf meinen Testsystemen (WinME,WinXp,Win200) stets unterschiedliche Werte, obwohl der Code immer der gleiche ist.
Zu Rechenmethode:
Ich sehe nicht das du den Fensterrand mit einbeziehst. Das würde das Ergebniss um 2 bzw. 4 Pixel verfälschen.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Es geht leider nur in Bezug auf fertig gelinkte Exen. Den Rahmen habe ich bei mir schon mit eingezogen, nur in der Beispielrechnung fehlt er. Den Rahmen frage ich für jedes Gadget individuell ab:Fluid Byte hat geschrieben:Es scheint bei dir ja jetzt zu gehen aber du weisst schon das die unterschiedlichen Ergebnisse auch auf unterschiedlich eingestellten Scrollbars basieren können.Der Befehl liefert mir auf meinen Testsystemen (WinME,WinXp,Win200) stets unterschiedliche Werte, obwohl der Code immer der gleiche ist.
Zu Rechenmethode:
Ich sehe nicht das du den Fensterrand mit einbeziehst. Das würde das Ergebniss um 2 bzw. 4 Pixel verfälschen.
Code: Alles auswählen
Lview=ListViewGadget(102,10,10,360,295)
Border=GetWindowLong_(GadgetID(GetDlgCtrlID_(Lview)), #GWL_EXSTYLE) & #WS_EX_CLIENTEDGE
Die Scrollbars sind alle Windows-Standart, also keine persönlich eingestellten Darstellungen. Zudem sind keine anderen Themes vorhanden, die da irgendwie mit reinfließen könnten. Auch andere API Befehle liefern mir teilweise kurriose Werte zurück. Damsl dachte ich, das ich einfach die falschen API-Befehle genutzt habe, jetzt weiß ich das die Ursache auch woanders liegen kann. Das Ganze hat mich aber dazu bewogen, auf API weitgehend zu verzichten.
Danke für deine Anmerkung Fluid Byte!
Code: Alles auswählen
GadgetID(GetDlgCtrlID_(Lview))
Eventuell solltest du dir mal GetSystemMetrics anschauen.