Seite 1 von 1
Scrollbalken in Gadget?
Verfasst: 17.04.2007 09:15
von CNESM
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.)
Verfasst: 17.04.2007 09:36
von edel
>
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
Verfasst: 17.04.2007 12:36
von CNESM
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

Ich glaub das Problem ist so einfach, das es schon wieder kompliziert ist ...
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
Verfasst: 17.04.2007 17:24
von CNESM
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

Verfasst: 17.04.2007 17:41
von Fluid Byte
Der Befehl liefert mir auf meinen Testsystemen (WinME,WinXp,Win200) stets unterschiedliche Werte, obwohl der Code immer der gleiche ist.
Es scheint bei dir ja jetzt zu gehen aber du weisst schon das die unterschiedlichen Ergebnisse auch auf unterschiedlich eingestellten Scrollbars basieren können.
Zu Rechenmethode:
Ich sehe nicht das du den Fensterrand mit einbeziehst. Das würde das Ergebniss um 2 bzw. 4 Pixel verfälschen.
Verfasst: 18.04.2007 10:49
von CNESM
Fluid Byte hat geschrieben:Der Befehl liefert mir auf meinen Testsystemen (WinME,WinXp,Win200) stets unterschiedliche Werte, obwohl der Code immer der gleiche ist.
Es scheint bei dir ja jetzt zu gehen aber du weisst schon das die unterschiedlichen Ergebnisse auch auf unterschiedlich eingestellten Scrollbars basieren können.
Zu Rechenmethode:
Ich sehe nicht das du den Fensterrand mit einbeziehst. Das würde das Ergebniss um 2 bzw. 4 Pixel verfälschen.
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:
Code: Alles auswählen
Lview=ListViewGadget(102,10,10,360,295)
Border=GetWindowLong_(GadgetID(GetDlgCtrlID_(Lview)), #GWL_EXSTYLE) & #WS_EX_CLIENTEDGE
Und ermittle je nach Ergebnis den systemweit eingestellten Rahmen mittels GetSystemMetrics_.
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!
Verfasst: 18.04.2007 10:53
von edel
Woher bekommt man solche Schnipsel ?! Lview reicht da voellig aus.
Eventuell solltest du dir mal GetSystemMetrics anschauen.