Seite 1 von 1
Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 10.08.2025 22:33
von EmmJott
Guude!
Würde gerne das Webgadget als Textanzeige verwenden. Dazu müsste ich jedoch prüfen, ob die vertikale Scrollleiste angezeigt wird, um ggf. das Fenster so weit zu vergrößern, bis die Scrollleiste verschwindet.
Quasi so:
while "Scrollleiste vorhanden"
resizegadget (#pb_ignore, #pb_ignore, #pb_ignore, gadgetheight(gadget)+20)
wend
Wie kann ich feststellen, ob die Scrollleiste angezeigt wird? Und ginge das auch pfiffiger?
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 11.08.2025 17:18
von Axolotl
Ja, weiß nicht ob das so klappt, weil aus dem Gedächtnis gekoded und nicht kompiliert
Entschuldige mich schon mal im Voraus.
Code: Alles auswählen
Procedure IsScrollBarVisible(Gadget, ScrollStyle=#WS_VSCROLL) ; BOOL
Protected result
If ScrollStyle = #WS_VSCROLL or ScrollStyle = #WS_HSCROLL ; vertical scroll bar or horizontal scroll bar
If (GetWindowLongPtr_(GadgetID(Gadget), #GWL_STYLE) & ScrollStyle)
result = #True
EndIf
EndIf
ProcedureReturn result
EndProcedure
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 12.08.2025 09:50
von EmmJott
Hi,
wäre so schön elegant gewesen, wenn's funktionieren würde. Aber
liefert beim Webgadget immer 0, beim ListIcongadget beispielsweise würde es funktionieren.
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 12.08.2025 14:02
von Kiffi
hier ein kleiner Demo-Code, der Dir weiterhelfen sollte:
Code: Alles auswählen
EnableExplicit
Enumeration
#Window
#WebViewGadget
EndEnumeration
Procedure NewWebGadgetViewHeight(JsonParameters$)
Debug "NewWebGadgetViewHeight: "+JsonParameters$
Debug "(Hier dann das Resize des Fensters)"
ProcedureReturn UTF8("")
EndProcedure
OpenWindow(#Window, 100, 100, 400, 400, "Hello", #PB_Window_SystemMenu)
WebViewGadget(#WebViewGadget, 0, 0, 400, 400, #PB_WebView_Debug)
BindWebViewCallback(#WebViewGadget, "NewWebGadgetViewHeight", @NewWebGadgetViewHeight())
Define html$ = ~"<!DOCTYPE html>\n" +
~"<head>\n" +
~"</head>\n" +
~"<body>\n" +
~"<div>\n" +
~" <button data-textlen=\"100\">Short Text</button>\n" +
~" <button data-textlen=\"300\">Medium Text</button>\n" +
~" <button data-textlen=\"600\">Long Text</button>\n" +
~"</div>\n" +
~"<div id=\"output\">Hier erscheint der Text...</div>\n" +
~"<script>\n" +
~"\n" +
~"document.querySelectorAll(\"button\").forEach(btn => {\n" +
~" btn.addEventListener(\"click\", () => {\n" +
~" let textlen = btn.getAttribute(\"data-textlen\");\n" +
~" fetch(`https://fakeapi.net/lorem/${textlen}`)\n" +
~" .then(response => response.text())\n" +
~" .then(text => {\n" +
~" let out = document.getElementById(\"output\");\n" +
~" out.textContent = text;\n" +
~" window.NewWebGadgetViewHeight(out.offsetHeight);\n" +
~" })\n" +
~" .catch(err => {\n" +
~" document.getElementById(\"output\").textContent = \"Fehler beim Laden des Textes.\";\n" +
~" console.error(err);\n" +
~" });\n" +
~" });\n" +
~"});\n" +
~"</script>\n" +
~"</body>\n" +
~"</html>\n"
SetGadgetItemText(#WebViewGadget, #PB_WebView_HtmlCode, html$)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
// Edit: Code angepasst
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 12.08.2025 20:34
von EmmJott
Hallo Kiffi,
besten Dank für den Input. Das Beispiel funktioniert, aber das Javascript-Gedöhns ist zu hoch für mich. Ich kann es nicht so umbauen, wie ich es bräuchte. Wenn ich das Button- und das LoremIpsum-Gedöhns durch einen einfachen Text ersetze, funktioniert das Script anscheinend nicht mehr.
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 13.08.2025 01:19
von Kiffi
Ohne "Gedöhns" wirst Du da recht wenig machen können.
Das von mir erstellte Beispiel war vielleicht ein wenig oversized, sollte aber verdeutlichen, wie das im Prinzip abläuft.
Hier eine vereinfachte Version (Du musst nur den Inhalt von Text in der Procedure WebViewGadgetIsReady() ändern)
Code: Alles auswählen
EnableExplicit
Enumeration
#Window
#WebViewGadget
EndEnumeration
Procedure WebViewGadgetIsReady(JsonParameters$)
Protected Text.s = "Lorem ipsum Morbi erat ex, lacinia nec efficitur eget, sagittis ut orci. Etiam in dolor placerat, pharetra ligula et, bibendum neque. Vestibulum vitae " +
"congue lectus, sed ultricies augue. Nam iaculis elit nec velit luctus, vitae rutrum nunc imperdiet. Nunc vel turpis sit amet lectus pellentesque " +
"tincidunt. Proin commodo tincidunt enim, at sodales mi dictum ac. Maecenas molestie, metus quis malesuada dictum, leo erat egestas lacus, sit " +
"amet tristique urna magna a diam. Donec ultricies dui sit amet mi ornare egestas. Phasellus ultricies lectus non interdum pellentesque. Cras nisi " +
"tellus, feugiat sed enim quis, tristique interdum lacus. Sed vel pharetra arcu, ac fermentum neque. Morbi mollis sollicitudin varius. Ut sit amet "
Text + Text
Protected Script.s = "let out = document.getElementById('output');" +
"out.textContent = decodeURIComponent('" + URLDecoder(Text) + "');" +
"window.NewWebGadgetViewHeight(out.offsetHeight);"
WebViewExecuteScript(#WebViewGadget, Script);
ProcedureReturn UTF8("")
EndProcedure
Procedure NewWebGadgetViewHeight(JsonParameters$)
Debug "NewWebGadgetViewHeight: "+JsonParameters$
Debug "(Hier dann das Resize des Fensters)"
ProcedureReturn UTF8("")
EndProcedure
OpenWindow(#Window, 100, 100, 400, 400, "Hello", #PB_Window_SystemMenu)
WebViewGadget(#WebViewGadget, 0, 0, 400, 400, #PB_WebView_Debug)
BindWebViewCallback(#WebViewGadget, "WebViewGadgetIsReady", @WebViewGadgetIsReady())
BindWebViewCallback(#WebViewGadget, "NewWebGadgetViewHeight", @NewWebGadgetViewHeight())
Define Html.s = "<html><body><div id='output'/><script>document.addEventListener('DOMContentLoaded', () => { window.WebViewGadgetIsReady() });</script></body></html>"
SetGadgetItemText(#WebViewGadget, #PB_WebView_HtmlCode, Html)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
// Edit: Code angepasst
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 14.08.2025 12:50
von dige
Seltsam, bei Kiffi's erstem Beispiel crasht PB 6.21 (Windows, x86&x64) hart ohne Debugger catch, sobald ich auf einen der Buttons der Webseite klicke.
Beim zweiten Beispiel wird nichts gerendert. Die Seite bleibt weis..
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 14.08.2025 13:12
von mk-soft
Bei mir auch ...
OS: Windows 10,11 Pro
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 14.08.2025 14:09
von Kiffi
@dige & mk-soft: Ich habe mir mal ne Windows11 VM installiert die Codes angepasst.
Re: Webgadget - kann man auf VSCROLL prüfen?
Verfasst: 14.08.2025 15:12
von mk-soft