HTMLWIN
-
-
- Gerade eben
- Anzeige
Hallo!
Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.
- ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
- ✔️ Deutsche Server & DSGVO-konform
- ✔️ Persönlicher Support (kein 0815-Ticket-System)
Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden
Hinweis:
-
Hallo Heinz,
im PureBasic haben findige Leute die neue WebView2 von Microsoft umgesetzt. Edge/ Chromium
Webview2 control - Chromium browser for Purebasic (Windows) - Page 10 - PureBasic Forums - English
CodeDeclare WebView2Dll& WebView2Dll& = ImportDll("x86\\WebView2Loader.dll","*") ListBox$("",2) 'Print GetAvailableCoreWebView2BrowserVersionString(Pfad#,Addr(Version!)) 'Print String$(Pfad#,0) 'Print Str$(Version!) WaitInputMicrosoft Edge WebView2 | Microsoft Edge Developer
Ich würde gerne in XProfan auch WebView2 einsetzen! Damit könnte man den Funktionsumfang zusammen mit WebApplications / PhP und Java fast unendlich erweitern! Leider reicht mein Wissen nicht aus! Jens? Was sagst du dazu gibt es da eine Möglichkeit wie bei Purebasic?
Viele Grüße
-
Ich habe mal ein wenig herumprobiert. Es sollte mit CreateCoreWebView2Environment losgehen aber das erwartet direkt als Parameter ein COM Objekt. Das wirst du in XProfan leider nicht zum Laufen bringen.
-
Guten Morgen!
Schade..
-
Vielleicht könnte was über OCX gehen. Damit kann man ja auch COM-Objekte
wie z.b. Excel ansprechen. Die INCLUDES gibt es ja bei xprofan.net zum Download.
-
Damit habe ich mich noch nicht beschäftigt!
Ist das die ocx3a?
-
Ging mit ocx2 und ocx3a.
Code
Alles anzeigen'****************** ocxPackage2-Demo: Excel 2 '****************** XProfan 10 / Windows XP '****************** © by TCS (Uwe "Pascal" Niemeier) 04'2007 '--Alle Angaben ohne Gewähr! '--Nutzung auf eigene Gefahr! '--Funktion: '--Es wird innerhalb einer Schleife abgefragt, ob eine Instanz von Excel '--gestartet wurde. Sobald das der Fall ist, wird eine Verbindung damit hergestellt, '--die erste Arbeitsmappe ermittelt, das erste Blatt davon '--beschriftet und einige Zellen mit Text gefüllt. '--Danach wird das Gespeichert-Flag gesetzt, um eine Rückfrage beim Beenden zu verhindern. window 10,10-500,500 usermessages 16 $H Windows.ph $H ocx2.ph $I ocx2.inc ocxInit() declare App&,Excel&,ID$ ID$=MultiToWideEx("Excel.Application") ~CLSIDFromProgID(addr(ID$),IID#) settimer 500 while 1 print "Bitte Excel starten oder Programm beenden!" sleep 500 cls ~GetActiveObject(IID#,0,addr(App&)) case App&:break waitinput case %umessage=16:break endwhile killtimer if App& Excel&=QueryInterface(App&,~IID_IDispatch) ocxRelease(App&) var WorkBooks&=ocxGet(Excel&,"WorkBooks") var Book&=ocxGet(WorkBooks&,"item",1) var Sheet&=ocxGet(Book&,"ActiveSheet") var Range&=ocxGet(Sheet&,"Range","*A1;B2;C3") ocxPut(Excel&,"Visible",1) ocxPut(Sheet&,"Name","*Made by Profan") ocxPut(Range&,"Value","*Test") ocxPut(Book&,"Saved",1) ocxRelease(Range&,Sheet&,Book&,WorkBooks&,Excel&) endif ocxDeInit()Code
Alles anzeigen'****************** ocxPackage2-Demo: Excel 1 '****************** XProfan 10 / Windows XP / Office 2003 '****************** © by TCS (Uwe "Pascal" Niemeier) 04'2007 '--Alle Angaben ohne Gewähr! '--Nutzung auf eigene Gefahr! '--Funktion: '--Es wird eine Instanz von Excel gestartet und sichtbar gemacht. '--Danach wird eine neue Arbeitsmappe angelegt, das erste Blatt davon '--beschriftet und einige Zellen mit Text gefüllt. '--Danach wird das Gespeichert-Flag gesetzt, um eine Rückfrage beim Beenden zu verhindern. window 100,10-500,500 usermessages 16 $H Windows.ph $H ocx3a.ph $I ocx3a.inc ocxInit() var Excel&=ocxCreate("Excel.Application") var WorkBooks&=ocxGet(Excel&,"WorkBooks") var NewBook&=ocxMethod(WorkBooks&,"Add") var Sheet&=ocxGet(NewBook&,"ActiveSheet") var Range&=ocxGet(Sheet&,"Range","A1") ocxPut(Excel&,"Visible",1) ocxPut(Sheet&,"Name","Made by Profan") ocxPut(Range&,"Value","123") Range&=ocxGet(Sheet&,"Range","A11") ocxPut(Range&,"Value","223") ocxPut(NewBook&,"Saved",1) ocxRelease(Range&,Sheet&,NewBook&,WorkBooks&,Excel&) ocxDeInit() -
Schade, daß ich kein Excel habe. Brauche sowas auch seltener.
Da lohnt es sich nicht wirklich, Geld zu investieren.
Hat eigentlich OpenOffice/LibreOffice auch so ein COM-Interface ?
Das wäre für mich dann noch interessant, zumal die ja kostenlos sind.
LibreOffice habe ich sogar installiert bzw. vor kurzem ein Update gemacht.
-
Ich habe eine kleine C++ Wrapper-DLL entwickelt, mit der man Microsoft WebView2 direkt in XProfan4 verwenden kann.
Die DLL kapselt:
- Initialisierung von WebView2
- Host-Fenster
- Multi-Tab-Unterstützung
- Navigation / HTML-Inhalt setzen
- JavaScript ausführen
- Ready-Waiting mit Timeout
- Thread-sichere Kommunikation
Die DLL funktioniert unter:
- Windows 10 / 11
- Windows Server 2016 (mit Runtime)
- Win32 Builds (32 Bit)
Das ganze ist noch im Alpha Stadium aber schon lauffähig.
Den Eintrag hier mache ich auch schon mit dem XProfan Browser
Eingebunden wird das ganze mit:
Def WV_Init(5) !"WebViewWrapper.dll","WV_Init"
Def WV_NewTab(0) !"WebViewWrapper.dll","WV_NewTab"
Def WV_SwitchTab(1) !"WebViewWrapper.dll","WV_SwitchTab"
Def WV_Navigate(2) !"WebViewWrapper.dll","WV_Navigate"
Def WV_Move(4) !"WebViewWrapper.dll","WV_Move"
Def WV_Back(1) !"WebViewWrapper.dll","WV_Back"
Def WV_Forward(1) !"WebViewWrapper.dll","WV_Forward"
Def WV_Reload(1) !"WebViewWrapper.dll","WV_Reload"
Def WV_WaitReady(2) !"WebViewWrapper.dll","WV_WaitReady"
Es fehlen noch Funktionen wie WV_GetHtml oder vieles andere..
Aber man kann schon mal ein modernes Chromium Based Browser Fenster in ein Xprofan Programm integrieren!Beispielcode liegt bei
Viel Spaß damit! -
Wow, sehr schön!!
Kannst Du auch eine 64bit-Variante erzeugen, oder geht das mit der Sprache nicht, die Du nutzt?
Kann man den Inhalt des URL-Edit-Controls automatisch an die URL der Seite, die gerade angezeigt wird, anpassen? Vermutlich mit Event-verknüpftem JavaScript? In PureBasic wäre das:
Code
Alles anzeigenBindWebViewCallback(_nMainScreen,"sendUrlToPB",@OnGetStreamUrl()) Procedure OnGetStreamUrl(JsonParameters$) _AktGadgetURLFromFuncGetWebViewGadgetURL$=mid(JsonParameters$,3,len(JsonParameters$)-4) EndProcedure ;OnGetStreamTime Procedure.s GetWebViewGadgetURL(nGadget.i) protected tc.q _AktGadgetURLFromFuncGetWebViewGadgetURL$="" WebViewExecuteScript(nGadget,"sendUrlToPB(window.location.href);") tc=ElapsedMilliseconds() while (_AktGadgetURLFromFuncGetWebViewGadgetURL$="") and (ElapsedMilliseconds()-tc<500) while WindowEvent() wend wend ProcedureReturn _AktGadgetURLFromFuncGetWebViewGadgetURL$ EndProcedure ;GetWebViewGadgetURLBeste Grüße, Jens-Arne
-
Hallo Jens,
die 64 Bit Version habe ich noch nicht getestet.
Anbei schon mal die Version in der mittels Subclassing die URL ausgelesen wird und ins Edit
übernommen wird.
Viel Spaß beim testen
Viele Grüße
Ps: Anbei die XProfan4 Version 32Bit und die 64Bit Variante -
Sieht gut aus! DIe 64bit-Version funktioniert allerdings jedenfalls mit FreeProfan64 nicht:
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Besser kann ich die Fehlermeldung nicht abbilden, das ist ja in FreeProfan64 immer etwas schwierig. Es mag sein, dass es mit PureBasic 64bit geht, aber dafür fehlt mir noch eine aussagekräftige Hilfedatei zu Deiner DLL. Es wäre empfehlenswert, jetzt schon mit deren Erstellung anzufangen, damit es nachher nicht eine so riesige Aufgabe wird.
Es wird beim Start ein Verzeichnis "XProfanBrowser.exe.WebView2" mit diversen Unterverzeichnissen angelegt, die allerdings weitestgehend leer sind (wenn nicht sogar vollständig leer). Was ist das und ist das nötig?
-
Hallo Jens,
das Problem mit 64 Bit habe ich auch.
Ich konnte es auch nicht zum laufen bringen selbst mit verschiedensten Änderungen in der DLL.
Es scheint ein Problem mit der Rückmeldung an das Hostfenster zu sein:__declspec(dllexport)
void __stdcall WV_Navigate(int id, const char* url)
{
if (!g_host
!url) return;
ActionStr* a = new ActionStr();
a->tabId = id;
a->text = AnsiToWide(url);
PostMessage(g_host, WM_WV_NAVIGATE, 0, (LPARAM)a); <-- Hierbei Stürzt es ab
}
Ich werde am Montag meinen Kollegen fragen er ist etwas bewanderter in C++
Die Dateien / Ordner werden direkt vom MS Webview angelegt und sind nicht zu beeinflussen.
(Alles wie bei einer Portable App)Der Tipp mit der Hilfe ist gut.
Obwohl es aktuell nur sehr wenig notwendige Funktionen gibt anbei die kurze Doku.Viele Grüße
PS: Melde dich mal ob es mit PureBasic geht. -
Ist g_host auf 64bit-Pointer gecasted bzw. so definiert? Der Rest von PostMessage sieht eigentlich ok aus.
Mit einer Hilfe meinte ich eigentlich neben einem natürlich extrem hilfreichen Code-Beispiel eine Beschreibung der Funktionen und insbesondere davon, was deren Parameter machen.
-
Hallo Jens,
ja das habe ich auch schon probiert!
In Profan64 mit Pointer gearbeitet.__declspec(dllexport)
void __stdcall WV_Navigate(int id, const char* url)
{
if (!g_host
!IsWindow(g_host)
!url)
return;ActionStr* a = new ActionStr();
a->tabId = id;
a->text = AnsiToWide(url);if (!PostMessage(g_host, WM_WV_NAVIGATE, 0, reinterpret_cast<LPARAM>(a)))
{
delete[] a->text;
delete a;
}
}Ich bin mit meinem Latein am Ende warum es kracht.
Es wird die Seite geöffnet kommt der Fehler den du ja auch schon hattest.
Viele Grüße -
Guten Morgen, ich muss gleich nach Stuttgart fliegen und bin deshalb beim 1. Kaffee.

Ich habe es mit PureBasic 64bit getestet, da ist es dasselbe: Absturz, nachdem die Seite geladen wurde. Und zwar leider ohne spezifische Fehlermeldung, was für einen Fehler in der DLL spricht.
Ich meinte oben: Ist g_host in der C++-DLL als 64bit-Pointer deklariert? Sonst geht die Message irgendwohin, weil die oberen 32bit des Pointers abgeschnitten werden.
Allerdings wird a sofort gelöscht, wenn das PostMessage raus ist. Das Hauptprogramm versucht dann, daraus die neue URL zu lesen, also aus einem nicht mehr existierenden Pointer auf den Text der URL. Das kann klappen, muss es aber nicht - auch in 32bit dürfte das dann und wann einen undefinierten Absturz provozieren. a muss daher global deklariert werden und persistent sein. Das dürfte das Problem sein.
Noch eine Frage: Warum muss man mit einer Schleife versuchen, WV_NewTab dazu zu bewegen, einen gültigen Wert für das neue Web-Control zu erhalten? Wenn noch nicht alles initialisiert ist, sollte WV_Init so lange mit dem Return warten, bis alles bereit ist.
-
Guten Morgen Jens,
Guten Flug! -
Danke! Gleich geht's los, muss mich auf den Weg machen.
-
Hallo zusammen,
ich habe die DLL nochmal mit meinem Kollegen zusammen überarbeitet:Sie funktioniert jetzt auch auf X64 / vorerst haben wir nur X64 getestet....
Die Version für X86 probiere ich auch noch aus! -
Moin!
Erste Erkenntnis:
Es funktioniert mit 64bit! Super Arbeit!! Kompilier' das nochmal mit 32bit, es gibt eigentlich keinen Grund, warum das nicht klappen sollte. Und jetzt brauchen wir wirklich mal eine sinnvolle Dokumentation.
Zweite Erkenntnis:
Ich habe JRPC3 offenbar nicht völlig umsonst geschrieben. Du hast versehentlich die *.enh3-Datei mitgeliefert. Das freut mich wirklich extrem! Da steckt so viel Arbeit drin, die nun, da XProfan ja leider dem Untergang geweiht ist, völlig vergeblich zu sein schien - war sie aber vielleicht ja doch nicht ganz.Herzliche Grüße, Jens-Arne
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!