AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[NonVCL] Browser

Ein Thema von NickelM · begonnen am 6. Sep 2011 · letzter Beitrag vom 28. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2      
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#1

[NonVCL] Browser

  Alt 6. Sep 2011, 12:50
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.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 15:07
Ich schätze mal Deinem Browser fehlt der Parent ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#3

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 16:49
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);
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#4

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 18:15
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.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 18:30
vllt. ne dumme Frage xD
Aber wo sind die Interface´s zu finden?
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 18:43
i'ke lese ding thma , urg's nix verstand was will's sag me
oop's so los you alleen met ding prob.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: [NonVCL] Browser

  Alt 6. Sep 2011, 19:04
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]
Andreas

Geändert von shmia ( 6. Sep 2011 um 19:09 Uhr)
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#8

AW: [NonVCL] Browser

  Alt 7. Sep 2011, 03:18
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 .

So mit diesem Langem Text schliesse ich von meiner Seite das Thema. Fazit: Üben, üben, üben und vielleicht später nochmal versuchen

Ansonsten für die Hilfe. Das Forum hat mir schon generel viel geholfen.

Gruß NickelM
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: [NonVCL] Browser

  Alt 7. Sep 2011, 13:12
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: [NonVCL] Browser

  Alt 7. Sep 2011, 17:26
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 -.-
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
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