Webgadget - kann man auf VSCROLL prüfen?
Webgadget - kann man auf VSCROLL prüfen?
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?
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?
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: Webgadget - kann man auf VSCROLL prüfen?
Ja, weiß nicht ob das so klappt, weil aus dem Gedächtnis gekoded und nicht kompiliert
Entschuldige mich schon mal im Voraus.
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
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Re: Webgadget - kann man auf VSCROLL prüfen?
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.
wäre so schön elegant gewesen, wenn's funktionieren würde. Aber
Code: Alles auswählen
GetWindowLongPtr_(hWnd, #GWL_STYLE)
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: Webgadget - kann man auf VSCROLL prüfen?
hier ein kleiner Demo-Code, der Dir weiterhelfen sollte:
// Edit: Code angepasst
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
a²+b²=mc²
Re: Webgadget - kann man auf VSCROLL prüfen?
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.
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.
Bin aktiv in der rentenvorbereitenden Arbeitslosigkeit - zwangsweise. Auch nach >30 Jahren im Betrieb springst Du über die Klinge, wenn der (Miss-)Manager seinen Hintern retten will. Lasst Euch von euren Arbeitgebern bloß nix von wegen Loyalität erzählen - wenn's drauf ankommt, ist die nix Wert!
Re: Webgadget - kann man auf VSCROLL prüfen?
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)
// Edit: Code angepasst
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
a²+b²=mc²
Re: Webgadget - kann man auf VSCROLL prüfen?
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..
Beim zweiten Beispiel wird nichts gerendert. Die Seite bleibt weis..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Re: Webgadget - kann man auf VSCROLL prüfen?
Bei mir auch ...
OS: Windows 10,11 Pro
OS: Windows 10,11 Pro
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Webgadget - kann man auf VSCROLL prüfen?
@dige & mk-soft: Ich habe mir mal ne Windows11 VM installiert die Codes angepasst.
a²+b²=mc²
Re: Webgadget - kann man auf VSCROLL prüfen?

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive