![]() |
[NonVCL] Browser
Hi zusammen,
Ich bin gerade die Komponente TWebBrowser in NonVCL zuverwenden, aber ohne die Komponente selbst sondern über die Interfaces. Ich hab mit Delphi mir die Interfaces aus der DLL gezogen und lasse eine Seite aufrufen. So dies funkt soweit gut, nur wie bekomm ich die jetzt in meinem Form angezeigt? Ich hab mal geschaut wie der TWebBrowser das macht. Der geht auf TOleControl diese ruft die WM_PAINT auf mit OleDraw. Nun dachte ich, passt doch genau was ich suche. Nun...eingefügt und wie sie sehen...sehen sie nichts. Weises Formular. Was fehlt oder hab ich was falsch verstanden? Hier der Code:
Delphi-Quellcode:
program nonVCL;
uses SysUtils, windows, messages, classes, ActiveX, OleServer, Variants, SHDocVw_TLB; const ClassName1 = 'Wnd1Class'; Window1Name = 'Window 1'; WindowWidth1 = 500; WindowHeight1 = 400; var Browser : IWebBrowser2; FensterH : HWND; function WndProc(hWnd1: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall; var x, y : integer; PaintStructut : TPaintStruct; CanvasH : HDC; begin Result := 0; case uMsg of WM_CREATE: begin {Fenster zentrieren} x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); MoveWindow(hWnd1, (x div 2) - (WindowWidth1 div 2), (y div 2) - (WindowHeight1 div 2), WindowWidth1, WindowHeight1, true); end; WM_DESTROY: begin Browser.Quit; PostQuitMessage(0); end; WM_PAINT: begin BeginPaint(hWnd1,PaintStructut); //Geht doch so oder? auch wenn ich von Browser auf Content oder Container oder sonst ein Interface gehe gehts net. OleDraw(Browser,DVASPECT_CONTENT,PaintStructut.hdc,PaintStructut.rcPaint); EndPaint(hWnd1,PaintStructut); end else Result := DefWindowProc(hWnd1, uMsg, wParam, lParam); end; end; var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; //Fensterfunktion für Fenster 1 cbClsExtra : 0; cbWndExtra : 0; lpszMenuName : nil; lpszClassName : ClassName1; //Klassenname für Fenster 1 hIconSm : 0; ); msg: TMsg; hresult : Integer; begin {Struktur mit Infos für Fenster 1 füllen} wc.hInstance := hInstance; wc.hCursor := LoadCursor(0, IDC_ARROW); wc.hbrBackground := GetSysColorBrush(COLOR_BTNFACE); {Fenster 1 registrieren} RegisterClassEx(wc); {Fenste 1 erzeugen und hWnd1 zuweisen} FensterH := CreateWindowEx(0, ClassName1, Window1Name, WS_VISIBLE or WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WindowWidth1, WindowHeight1, 0, 0, hInstance, nil); hresult := OleInitialize(nil); Browser := CoInternetExplorer.Create; Browser.Silent := True; Browser.Navigate('http://fotonickel.com/index.htm',EmptyParam,EmptyParam,EmptyParam,EmptyParam); while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; ExitCode := msg.wParam; end. |
AW: [NonVCL] Browser
Ich schätze mal Deinem Browser fehlt der Parent ....
|
AW: [NonVCL] Browser
Ich habe nun folgen Code noch angefügt keine asuwirkung:
Delphi-Quellcode:
Browser.Top := 0;
Browser.Left := 0; Browser.Width := WindowWidth1; Browser.Height := WindowHeight1; SetParent(Browser.HWND,FensterH); |
AW: [NonVCL] Browser
So ich hab nochmal im Internevt gegugt und vllt ist es auch nicht der richtige Betreff, es geht darum was ich eine HTML Seite, egal ich kann sie mir auch per WinInet ziehen, anzeigen will wie eine Internet seite halt. Am besten so das ich auf ein HDC zeichnen kann. TWebBrowser zeigt ja genau das so an wie ich es will, nur ich blick durch die ganzen Interfaces dafür nicht durch.
Es geht mir net ums klicken oder sonst was nur sozusagen um das document anzuzeigen als Seite, nicht als Text. |
AW: [NonVCL] Browser
vllt. ne dumme Frage xD
Aber wo sind die Interface´s zu finden? |
AW: [NonVCL] Browser
i'ke lese ding thma , urg's nix verstand was will's sag me
oop's so los you alleen met ding prob. |
AW: [NonVCL] Browser
Also ich halte das für ein aussichtsloses Unterfangen.
OLE-Controls müssen eine ganze Reihe von Interfaces implementieren und benützen; das lässt sich nicht mal eben so auf die Schnelle erledigen. Ausserdem: wenn ein Programm einen Webbrowser einbindet, dann ist zu vermuten dass der Funktionsumfang deutlich grösser ist (oder wird) als dies für übliche NonVCL-Programe zutrifft. NonVCL-Programme haben ja 3 Vorteile: sie sind klein, schnell und sparsam mit Resourcen. Nachteile sind der deutlich höhere Entwicklungsaufwand (jeder Button braucht 20 Mal so viel Zeit im Vergleich zur Benutzung der VCL), Wiederholung von Code aufgrund fehlender Bibliotheken und starke Einschränkungen bei den Controls. Aber einem bestimmten Funktionsumfang einer Anwendung wiegen die Nachteile so schwer, dass die Vorteile dagegen zu vernachlässigen sind. Beim Einbinden eines WebBrowsers halte ich den Break-Even Punkt für überschritten. Was Anderes wäre es wenn man nur Daten über HTTP(s) schicken würde ohne das Html-Result anzuzeigen. Ohne Visualisierung durch den Webbrowser könnte man das mit wenigen Zeilen in eine NonVCL Anwendung einbauen. [edit]oben steht ja, dass die Seite gerendert werden soll. Also kann man die letzen beiden Sätze streichen[/edit] |
AW: [NonVCL] Browser
Hm okay verstehe.
Ich muss zugeben ich hab halt noch nicht viel damit gearbeitet und hatte bei vielen Spielerlaunchern gesehen, dass da eine art embend Browser drin ist (denke ich mal weil man auf die "Links" klicken konnte und so dann öffnen konnte. Aber ich hab mal mit WinSpy geschaut und gesehen, dass das irgendwas von Firefox eine Art SDK oder was weis ich ist. Und dachte okay, wie macht TWebBrowser das und hab es halt mal versucht. Wie heißt es...Probieren geht über Studieren. Nun dass mit mehreren Interfaces stimmt schon. die Klasse TOleControl bindet etwa 8 Interfaces noch ein, dachte halt die brauch man nicht, da ich ja weis das bei VCL teilweise viel schnick schnack dabei ist, was man nicht wirklich braucht. Das war halt auch nur so eine Idee, weil ich halt grad viel mit NonVCL rumexperimentiere und auch Inet sachen ohne Indy mache. Es war halt auch neugier kann man sagen. Nur ich hab auch gemerkt, Interfaces ist eine komplizierte Sache. Das einzige was ich damit gemacht hatte, war mit DirectPlay eine Client/Server connection und dass war schon ziemlich schwierig zuverstehen. Naja da hat auch Delphihilfe gut geholfen :-D. So mit diesem Langem Text schliesse ich von meiner Seite das Thema. Fazit: Üben, üben, üben und vielleicht später nochmal versuchen :-D Ansonsten :thumb: für die Hilfe. Das Forum hat mir schon generel viel geholfen. Gruß NickelM |
AW: [NonVCL] Browser
Zitat:
Bzw. versuche es noch etwas weiter und wenn du dann nicht mehr vorankommst, dann kannst du dich damit trösten dass selbst Profis sich daran die Zähne ausbeisen würden. |
AW: [NonVCL] Browser
Bevor du mit dem Thema abschließt, könntest du mir bitte noch verraten, wo du die besagten Interfaces gefunden hast? Also für den WebBrowser?
Befinden die sich in OleServer ?? Oder wo? Hab auch gerade kein Delphi mehr zur Hand, kann deswegen selber nicht nachsehen -.- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz