Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [NonVCL] Browser (https://www.delphipraxis.net/162810-%5Bnonvcl%5D-browser.html)

NickelM 6. Sep 2011 11:50

[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.

Bummi 6. Sep 2011 14:07

AW: [NonVCL] Browser
 
Ich schätze mal Deinem Browser fehlt der Parent ....

NickelM 6. Sep 2011 15:49

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);

NickelM 6. Sep 2011 17:15

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.

lbccaleb 6. Sep 2011 17:30

AW: [NonVCL] Browser
 
vllt. ne dumme Frage xD
Aber wo sind die Interface´s zu finden?

EWeiss 6. Sep 2011 17:43

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.

shmia 6. Sep 2011 18:04

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]

NickelM 7. Sep 2011 02:18

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

shmia 7. Sep 2011 12:12

AW: [NonVCL] Browser
 
Zitat:

Zitat von NickelM (Beitrag 1122268)
Das war halt auch nur so eine Idee, weil ich halt grad viel mit NonVCL rumexperimentiere ...Es war halt auch neugier kann man sagen

Ok, dann lass dich nicht aufhalten :-)
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.

lbccaleb 7. Sep 2011 16:26

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 15:23 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz