Webgadget: Klicks auf Buttons auswerten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Webgadget: Klicks auf Buttons auswerten

Beitrag von Shardik »

mk-soft hat geschrieben:Geht unter Mac auch nicht :cry:
So geht es auch unter MacOS X... :wink:

Code: Alles auswählen

EnableExplicit

#NSLeftMouseUp = 2

Define CurrentEvent.I
Define DOMNode.I
Define ElementDictionary.I
Define EventType.I
Define IDName.S
Define Point.NSPoint
Define SharedApplication = CocoaMessage(0, 0, "NSApplication sharedApplication")
Define HTML.S

OpenWindow(0, 270, 100, 270, 50, "HTML-Formular")
WebGadget(0, 5, 5, WindowWidth(0) - 10, WindowHeight(0) - 10, "")

; ----- HTML-Formular mit Anzeige von 2 Buttons
HTML = "<html>" +
  "<body>" +
  "<input type='button' value='Klick mich!' id='Button1'>" +
  "<input type='button' value='Nein, lieber mich!' id='Button2'>" +
  "</body>" +
  "</html>"
; ----- HTML-Formular ins WebGadget laden und anzeigen
CocoaMessage(0, CocoaMessage(0, GadgetID(0), "mainFrame"),
  "loadHTMLString:$", @HTML,
  "baseURL:", 0)

Repeat
  CurrentEvent = CocoaMessage(0, SharedApplication, "currentEvent")
  
  If CurrentEvent
    EventType = CocoaMessage(0, CurrentEvent, "type")
    
    If EventType = #NSLeftMouseUp
      ; ----- Ermittle Mausklick-Position
      CocoaMessage(@Point, CurrentEvent, "locationInWindow")

      ; ----- Infos über HTML-Element an Mausklick-Position anfordern
      CocoaMessage(@ElementDictionary, GadgetID(0),
        "elementAtPoint:@", @Point)

      ; ----- DOMNode ermitteln
      DOMNode = CocoaMessage(0, ElementDictionary,
        "objectForKey:$", @"WebElementDOMNode") 
      
      If DOMNode
        IDName = PeekS(CocoaMessage(0, CocoaMessage(0, DOMNode, "idName"),
          "UTF8String"), -1, #PB_UTF8)
        
        If Left(IDName, 6) = "Button"
          Debug "Linksklick auf " + IDName
        EndIf
      EndIf
    EndIf
  EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Webgadget: Klicks auf Buttons auswerten

Beitrag von Shardik »

NicTheQuick hat geschrieben:
Shardik hat geschrieben:
NicTheQuick hat geschrieben:Bei mir unter Ubuntu 14.04 x64 geht das WebGadget gar nicht erst, d.h. der Debugger bleibt in der Zeile mit dem WebGadget einfach stehen und ich muss das Programm abschießen.
Du hast wahrscheinlich nicht die für GTK2 notwendige Bibliothek libwebkitgtk-1.0-0 installiert. In neueren Distributionen ist nur noch die neuere Bibliothek libwebkitgtk-3.0-0 für GTK3 vorinstalliert... :wink:
Ja, das ist schon immer bei mir installiert. Und es hilft nichts.
Ich kann leider Dein Problem nicht reproduzieren. Bei mir läuft das WebGadget einwandfrei unter Ubuntu 14.04 x86 und x64 mit Unity und im Übrigen auch unter 20 anderen Linux-Distributionen (u.a. Debian 7 und Fedora 20 mit Gnome 3), wenn die Bibliothek libwebkitgtk-1.0-0 vorhanden ist...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Webgadget: Klicks auf Buttons auswerten

Beitrag von ts-soft »

läuft bei mir auch, ohne Probleme!
folgendes sollte installiert sein:

Code: Alles auswählen

libwebkitgtk-1.0-0
libwebkitgtk-1.0-common
libwebkitgtk-3.0-0
libwebkitgtk-3.0-common
libwebkitgtk-dev
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: Webgadget: Klicks auf Buttons auswerten

Beitrag von Shardik »

ts-soft hat geschrieben:folgendes sollte installiert sein:

Code: Alles auswählen

libwebkitgtk-1.0-0
libwebkitgtk-1.0-common
libwebkitgtk-3.0-0
libwebkitgtk-3.0-common
libwebkitgtk-dev
Eine genauere Erklärung:

Bei Verwendung des WebGadget unter dem von PureBasic standardmäßig verwendeten Gtk2 sind nur die Bibliotheken libwebkitgtk-1.0-0 und libwebkitgtk-1.0-common nötig, wobei libwebkitgtk-1.0-common als essentielle Abhängigkeit bei der Installation von libwebkitgtk-1.0-0 immer auf entsprechende Nachfrage mitinstalliert wird (wird diese Nachfrage abgelehnt, so wird die Installation wegen der fehlenden Abhängigkeit verweigert!). Auf fast allen neueren Linux-Distributionen sind die 3er Versionen von libwebkitgtk standardmäßig installiert.

libwebkitgtk-dev ist nur nötig, wenn man die Kurzform

Code: Alles auswählen

ImportC "-lwebkitgtk-1.0"
zum Importieren der WebKit-Funktionen benutzt. Wenn man den kompletten Pfad zur libwebkitgtk-Bibliothek dort einträgt, wäre die Developer-Bibliothek nicht nötig.

Die 3er Versionen von libwebkitgtk sind für Gtk2 nicht nötig. Sie werden nur benötigt, wenn man Gtk3 verwenden möchte (Compiler/Compiler-Optionen.../Library Subsystem: gtk3). Mein obiges Linux-Beispiel funktioniert bei mir problemlos unter Ubuntu 14.04 x64 auch mit Gtk3, wenn ich die Import-Zeile für libwebkitgtk folgendermaßen abändere:

Code: Alles auswählen

ImportC "/usr/lib/x86_64-linux-gnu/libwebkitgtk-3.0.so.0"
Wenn ich die Developer-Bibliothek libwebkitgtk-3.0-dev zusätzlich installiere, kann ich diese Zeile verkürzen zu

Code: Alles auswählen

ImportC "-lwebkitgtk-3.0"
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Webgadget: Klicks auf Buttons auswerten

Beitrag von ts-soft »

Damit es unter Linux auch im Unicode-Modus funktioniert ist folgendes zu ändern:

Code: Alles auswählen

ImportC "-lwebkitgtk-1.0"
  webkit_web_settings_new()
  webkit_web_view_load_string(*WebView, Content.p-utf8, *MIMEType, *Encoding, *BaseURI)
sowie:

Code: Alles auswählen

webkit_web_view_load_string(GadgetID(0), HTML, 0, 0, 0)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten