program nonVCL;
uses
SysUtils,
windows,
messages,
classes,
ActiveX,
Variants,
SHDocVw_TLB;
//Damit keine VCL großartig benutzt wird hab ich die Klassen nochmal extra erstellen lassen also ohne VCL.
const
ClassName1 = '
Wnd1Class';
Window1Name = '
Window 1';
WindowWidth1 = 500;
WindowHeight1 = 400;
var Browser : IWebBrowser2;
FensterH : HWND;
wnd: HWND;
vEmpty : OleVariant;
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
if Browser <>
nil then
begin
Browser.Quit;
end;
OleUninitialize();
PostQuitMessage(0);
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;
hr : HRESULT;
begin
{Struktur mit Infos für Fenster 1 füllen}
wc.hInstance := hInstance;
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hIcon := LoadIcon(HInstance,'
MAINICON');
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);
if OleInitialize(
nil) <> S_OK
then
begin
CoCreateInstance(CLASS_InternetExplorer,
nil, CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2, Browser);
//Browser initalisieren
if Browser <>
nil then
begin
VariantInit(vEmpty);
Browser.Navigate('
http://www.test.de/index.html', vEmpty, vEmpty, vEmpty, vEmpty);
//Seite auswählen
wnd := FindWindow('
IEFrame',
nil);
wnd := FindWindowEx(wnd, 0, '
Frame Tab',
nil);
wnd := FindWindowEx(wnd, 0, '
TabWindowClass',
nil);
wnd := FindWindowEx(wnd, 0, '
Shell DocObject View',
nil);
//Ist das Fenster wo man einbinden kann
SetParent(wnd,FensterH);
//Parent auf Fenster setzen
MoveWindow(wnd, 0, 0, WindowWidth1, WindowHeight1, true);
//Größe des eingebetten Fensters anpassen
end;
end;
while GetMessage(msg,0,0,0)
do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
ExitCode := msg.wParam;
end.