Français
Forum

ATL.DLL

 

Frank
Tretter
suis récente ici et c'est mon erste Frage.
je voulais mir selber une kleinen Browser bricoler et habe aussi déjà viel im Netz pour trouvé. mon Programme benutzt IWebBrowser2.ph.
cela Demo cela comme Beispiel dabei était fonctionne aussi bien. eh bien voudrais je mais cela menu erweitern et qui Befehle comment Marque, Kopieren insérer.

malheureusement peut cela erzeugte Browserfenster aussi pas qui Tastenkompination STRG+A trop.
Hoffe es peux mir quelqu'un aider et montrer comment on cela menu erweitert.
avec den Befehlen AppendMenuBar komm je bien sûr, mais pas avec qui Procedure CallMethod qui im Demo benutzt wir.

ici cela Demo
KompilierenMarqueSéparation
 $H c:XProfan 8.0INCLUDEWindows.ph
 $H c:XProfan 8.0INCLUDEIWebBrowser2.ph
Declare a$, a&, a#, b#, Error&, ATLdll&, WebControl&, IUnknown&, IWebBrowser&
Dim a#,1024
Dim b#,256
Def CLSIDFromString(2) !ole32,CLSIDFromString
Def AtlAxWinInit(0) !atl.dll,AtlAxWinInit
Def AtlAxGetControl(2) !atl.dll,AtlAxGetControl

Proc CallMethod-----------------------------------------------Interface-Methoden aufrufen

    Parameters IFace&,Method&
    Declare VTable&
    VTable&=long(IFace&,0)
    Method&=long(VTable&,Method&*4)
    case %pcount=2:return call( Method&,IFace& )
    case %pcount=3:return call( Method&,IFace&,&(3) )
    case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
    case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
    case %pcount=6:return call( Method&,IFace&,&(3),&(4),&(5),&(6) )
    case %pcount=7:return call( Method&,IFace&,&(3),&(4),&(5),&(6),&(7) )
    case %pcount=8:return call( Method&,IFace&,&(3),&(4),&(5),&(6),&(7),&(8) )

EndProc

proc WebOpen-------------------------------------------------------------Irgendwas öffnen

    Parameters X$
    ~RedrawWindow(%hwnd,0,0,$485)
    casenot len(x$):return
    ~MultiByteToWideChar(0,0,addr(x$),-1,a#,250)
    clear b#
    CallMethod(IWebbrowser&,~Navigate,a#,b#,b#,b#,b#)

EndProc

*****************************************************************************************
windowstyle 16+8+4+2+1
window 10,10-700,500
usermessages 16
ATLdll&=usedll(atl.dll)
AtlAxWinInit()
WebControl&=control(AtlAxWin,Shell.Explorer.1,$50000000,0,0,0,0,%hwnd,0,0,$200)
~GetClientRect(%hwnd,b#)
setwindowpos WebControl&=0,0-long(b#,8),long(b#,12)
Werte von Error& und IUnknown& im Fehlerfall ausgeben lassen!
Error&=AtlAxGetControl(WebControl&,addr(IUnknown&))
IWebBrowser2-Interface ermöglicht Kontrolle über das WebControl
clear a#,b#
a$=~IID_IWebBrowser2
~MultiByteToWideChar(1,1,addr(a$),-1,a#,80)-------------ANSI zu WideChar
CLSIDFromString(a#,b#)----------------------------------String zu Interface-ID
Error&=CallMethod(IUnknown&,~QueryInterface,b#,addr(IWebBrowser&))
--damit es beim Start nicht so leer aussieht
CallMethod(IWebBrowser&,~GoHome)
--------------------------------------------------------------------FensterMenü
appendmenubar 101,Zurück
appendmenubar 102,Vorwärts
appendmenubar 103,Abbrechen
appendmenubar 104,Aktualisieren
appendmenubar 105,Startseite
appendmenubar 106,Suchen
appendmenubar 107,Datei öffnen
appendmenubar 108,Ordner öffnen
appendmenubar 109,URL öffnen
--------------------------------------------------------------------Eingabeschleife

while 1

    if %key=4----------------------------------------------Grössenänderung des Fensters

        ~GetClientRect(%hwnd,b#)
        setwindowpos WebControl&=0,0-long(b#,8),long(b#,12)

    elseif menuitem(101)-----------------------------------Zurück

        CallMethod(IWebBrowser&,~GoBack)

    elseif menuitem(102)-----------------------------------Vorwärts

        CallMethod(IWebBrowser&,~GoForward)

    elseif menuitem(103)-----------------------------------Abbrechen

        CallMethod(IWebBrowser&,~Stop)

    elseif menuitem(104)-----------------------------------Aktualisieren

        CallMethod(IWebBrowser&,~Refresh)

    elseif menuitem(105)-----------------------------------Startseite

        CallMethod(IWebBrowser&,~GoHome)

    elseif menuitem(106)-----------------------------------Suchen

        CallMethod(IWebBrowser&,~GoSearch)

    elseif menuitem(107)-----------------------------------Datei öffnen

        a$=loadfile$(Bitte Bild oder HTML-Datei wählen,*.*)
        WebOpen a$

    elseif menuitem(108)-----------------------------------Ordner  öffnen

        a$=choosedir$(Bitte Ordner wählen)
        WebOpen a$

    elseif menuitem(109)-----------------------------------URL öffnen

        a$=input$(Bitte Web-Adresse eingeben:,URL:,)
        WebOpen a$
        endif----------------------------------------------------------------------

        while 1----------------------------Warten, bis Aktion ausgeführt ist

            sleep 200
            CallMethod(IWebBrowser&,~get_Busy,addr(a&))
            casenot a&:break
            endwhile------------------------------------------------------------
            waitinput
            case %umessage=16:break-----------Ende
            endwhile-----------------------------------------------------------------Ende Eingabeschleife
            destroywindow(WebControl&)
            case ATLdll&:freedll ATLdll&
            Fin

Salut Fränki
 
Seit 2008 endlich XProfan 10, ist einfach klasse
19.02.2007  
 



alors zum Ersten devrait Du Deinen Quellcode aussi avec
KompilierenMarqueSéparation ummanteln (c'est dans allen Foren üblich) - Codes avec Smilies drin wird sich aucun anschauen. tu peux Dein Posting oui Travailler. et ensuite wäre es encore hilfreich si Du qui zusätzliche PH aussi comme DateiAnhang beifügst - car cet est pas zum XProfanumfang.

nous savons aussi pas quelle XProfanversion Du utilise (la hâte oui nix angegeben) - cela könntest Du mais aussi dans Votre Signatur écrivons.

qui Bereiche a# et b# volonté pas disposed .

jusqu'à denne.

@Admins: je trouve cet Postingform venez dans dernier Zeit très souvent avant - wir devrait avant dem Poste un Vorstellungsgespräch mener - inform einer Erklärungsseite howTo poste. je werd cela la fois zusammenbasteln.
 
19.02.2007  
 



Nachtrag: le contenu qui iwebbrowser2.ph
KompilierenMarqueSéparation
19.02.2007  
 




Frank
Tretter
Sorry, kenne mich là encore pas so aus.
j'ai XProfan 8. iwebbrowser2.ph wurde de Dir déjà ici angezeigt, merci.

maintenant versuch je cela avec dem Code encore einmal.
KompilierenMarqueSéparation
 $H c:XProfan 8.0INCLUDEWindows.ph
 $H c:XProfan 8.0INCLUDEIWebBrowser2.ph
Declare a$, a&, a#, b#, Error&, ATLdll&, WebControl&, IUnknown&, IWebBrowser&
Dim a#,1024
Dim b#,256
Def CLSIDFromString(2) !ole32,CLSIDFromString
Def AtlAxWinInit(0) !atl.dll,AtlAxWinInit
Def AtlAxGetControl(2) !atl.dll,AtlAxGetControl

Proc CallMethod-----------------------------------------------Interface-Methoden aufrufen

    Parameters IFace&,Method&
    Declare VTable&
    VTable&=long(IFace&,0)
    Method&=long(VTable&,Method&*4)
    case %pcount=2:return call( Method&,IFace& )
    case %pcount=3:return call( Method&,IFace&,&(3) )
    case %pcount=4:return call( Method&,IFace&,&(3),$(4) )
    case %pcount=5:return call( Method&,IFace&,&(3),&(4),&(5) )
    case %pcount=6:return call( Method&,IFace&,&(3),&(4),&(5),&(6) )
    case %pcount=7:return call( Method&,IFace&,&(3),&(4),&(5),&(6),&(7) )
    case %pcount=8:return call( Method&,IFace&,&(3),&(4),&(5),&(6),&(7),&(8) )

EndProc

proc WebOpen-------------------------------------------------------------Irgendwas öffnen

    Parameters X$
    ~RedrawWindow(%hwnd,0,0,$485)
    casenot len(x$):return
    ~MultiByteToWideChar(0,0,addr(x$),-1,a#,250)
    clear b#
    CallMethod(IWebbrowser&,~Navigate,a#,b#,b#,b#,b#)

EndProc

*****************************************************************************************
*****************************************************************************************
windowstyle 16+8+4+2+1
window 10,10-700,500
usermessages 16
ATLdll&=usedll(atl.dll)
AtlAxWinInit()
WebControl&=control(AtlAxWin,Shell.Explorer.1,$50000000,0,0,0,0,%hwnd,0,0,$200)
~GetClientRect(%hwnd,b#)
setwindowpos WebControl&=0,0-long(b#,8),long(b#,12)
Werte von Error& und IUnknown& im Fehlerfall ausgeben lassen!
Error&=AtlAxGetControl(WebControl&,addr(IUnknown&))
IWebBrowser2-Interface ermöglicht Kontrolle über das WebControl
clear a#,b#
a$=~IID_IWebBrowser2
~MultiByteToWideChar(1,1,addr(a$),-1,a#,80)-------------ANSI zu WideChar
CLSIDFromString(a#,b#)----------------------------------String zu Interface-ID
Error&=CallMethod(IUnknown&,~QueryInterface,b#,addr(IWebBrowser&))
--damit es beim Start nicht so leer aussieht
CallMethod(IWebBrowser&,~GoHome)
--------------------------------------------------------------------FensterMenü
appendmenubar 101,Zurück
appendmenubar 102,Vorwärts
appendmenubar 103,Abbrechen
appendmenubar 104,Aktualisieren
appendmenubar 105,Startseite
appendmenubar 106,Suchen
appendmenubar 107,Datei öffnen
appendmenubar 108,Ordner öffnen
appendmenubar 109,URL öffnen
--------------------------------------------------------------------Eingabeschleife

while 1

    if %key=4----------------------------------------------Grössenänderung des Fensters

        ~GetClientRect(%hwnd,b#)
        setwindowpos WebControl&=0,0-long(b#,8),long(b#,12)

    elseif menuitem(101)-----------------------------------Zurück

        CallMethod(IWebBrowser&,~GoBack)

    elseif menuitem(102)-----------------------------------Vorwärts

        CallMethod(IWebBrowser&,~GoForward)

    elseif menuitem(103)-----------------------------------Abbrechen

        CallMethod(IWebBrowser&,~Stop)

    elseif menuitem(104)-----------------------------------Aktualisieren

        CallMethod(IWebBrowser&,~Refresh)

    elseif menuitem(105)-----------------------------------Startseite

        CallMethod(IWebBrowser&,~GoHome)

    elseif menuitem(106)-----------------------------------Suchen

        CallMethod(IWebBrowser&,~GoSearch)

    elseif menuitem(107)-----------------------------------Datei öffnen

        a$=loadfile$(Bitte Bild oder HTML-Datei wählen,*.*)
        WebOpen a$

    elseif menuitem(108)-----------------------------------Ordner  öffnen

        a$=choosedir$(Bitte Ordner wählen)
        WebOpen a$

    elseif menuitem(109)-----------------------------------URL öffnen

        a$=input$(Bitte Web-Adresse eingeben:,URL:,)
        WebOpen a$
        endif----------------------------------------------------------------------

        while 1----------------------------Warten, bis Aktion ausgeführt ist

            sleep 200
            CallMethod(IWebBrowser&,~get_Busy,addr(a&))
            casenot a&:break
            endwhile------------------------------------------------------------
            waitinput
            case %umessage=16:break-----------Ende
            endwhile-----------------------------------------------------------------Ende Eingabeschleife
            destroywindow(WebControl&)
            case ATLdll&:freedll ATLdll&
            Fin

2 kB
Hochgeladen:19.02.2007
Downloadcounter122
Download
 
Seit 2008 endlich XProfan 10, ist einfach klasse
19.02.2007  
 




Uwe
''Pascal''
Niemeier
allô Frank!

cela WebBrowser-Contrôle wird komplett sur sogenannte COM-Interfaces gesteuert; cela gilt sogar pour Clipboard-Aktionen. avec Messages (comment chez Edits) ist là rien trop machen; pour muss sogar un nouveau Interface aufgerufen volonté.
cet Procédure sollte aider:
KompilierenMarqueSéparation
proc CopyToClipBoard----------------------------------------------------------

    declare IOleCommandTarget&,CLSID$
    CLSID$={b722bccb-4e68-101b-a2bc-00aa00404770}--IID_IOleCommandTarget
    ~MultiByteToWideChar(1,1,addr(CLSID$),-1,a#,80)--ANSI zu WideChar
    CLSIDFromString(a#,b#)---------------------------String zu Interface-ID
    CallMethod(IWebBrowser&,~QueryInterface,b#,addr(IOleCommandTarget&))
    CLSID$={de4ba900-59ca-11cf-9592-444553540000}--CGID_MSHTML (Kommandomodus)
    ~MultiByteToWideChar(1,1,addr(CLSID$),-1,a#,80)--ANSI zu WideChar
    CLSIDFromString(a#,b#)---------------------------String zu Interface-ID
    CallMethod(IOleCommandTarget&,4,b#,15,0,0,0)-----Exec : IDM_COPY
    CallMethod(IOleCommandTarget&,~Release)----------Interface freigeben
    endproc----------------------------------------------------------------------

une Routine zum Marque reiche je encore pour!

@ iF: es du sûrement, dass DISPOSE am Programmende  so wichig ist?

HTH
Pascal
 
20.02.2007  
 




RGH
Uwe Pascal Niemeier
@ iF: es du sûrement, dass DISPOSE am Programmende  so wichig ist?


chez Win9x (en supplément est aussi Win ME) grundsätzlich oui, là sonst qui grenier oiftmals pas avant dem prochain Neustart freigegeben wird.
Win2000/XP/Vue regelt cela Betriebssystem chez Programmende qui Freigabe dans aller règle nötigenfalls selbst.

Trotz allem sollte on sich angewöhnen avec DIM reservierten grenier grundsätzlich par DISPOSE wieder freizugeben. Sollte on cet z.B. la fois dans einer Procédure oublier qc, hat on très vite Probleme ...

Salut
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
20.02.2007  
 




Frank
Tretter
Vielen Dank erstmal pour qui schnelle Aider. cela bringt mich déjà plus.
si je ensuite encore qui Routine pour cela Markiern bekomm suis je Glücklich et es hat mir très geholfen.

peux malheureusement pas toujours juste répondre, suis pas toujours am PC et zum Programmieren fehlt comme qui Zeit.

Salut Fränki
 
Seit 2008 endlich XProfan 10, ist einfach klasse
21.02.2007  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

3.643 Views

Untitledvor 0 min.
Christof Neuß04.06.2019
Walter08.05.2016
Uwe ''Pascal'' Niemeier31.12.2014
Michael Borowiak27.11.2014
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie