Español
Foro

ATL.DLL

 

Frank
Tretter
Bin neu hier y el es mi erste Cuestión.
Yo quería me selber una pequeña Navegador remendar y habe auch ya viel en el Netz dafür gefunden. Mein Programa benutzt IWebBrowser2.ph.
Das Demo como el Ejemplo esta war se ejecuta auch bien. Nun möchte Yo aber el Menü erweitern y el Befehle como Marca, Kopieren einfügen.

Leider lässt el erzeugte Browserfenster auch no el Tastenkompination STRG+A a.
Hoffe lo kann me alguien helfen y zeigen cómo hacerlo Menü erweitert.
Mit el Befehlen AppendMenuBar komm Yo klar, pero no con el Procedure CallMethod el en el Demo benutzt wir.

Hier el Demo
KompilierenMarcaSeparación
 $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&
            End

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



Also para Ersten solltest Usted Su Quellcode auch con
KompilierenMarcaSeparación ummanteln (el es en allen Foren üblich) - Codes con Smilies drin se se keiner anschauen. Usted puede Su Posting sí bearbeiten. Und entonces wäre lo todavía hilfreich si el zusätzliche PH auch como DateiAnhang beifügst - porque esta gehört no para XProfanumfang.

Wir wissen auch no welche XProfanversion Usted nutzt (hast sí nix angegeben) - el könntest Usted aber auch en Su Signatur escribir.

El Bereiche a# y b# voluntad no disposed .

Bis denne.

@Admins: Yo finde esta Postingform kommt en letzter Tiempo muy oft antes - wir debería antes el Puesto una Vorstellungsgespräch führen - inform uno Erklärungsseite howTo Post. Yo werd el veces zusammenbasteln.
 
19.02.2007  
 



Apéndice: Inhalt el iwebbrowser2.ph
KompilierenMarcaSeparación
19.02.2007  
 




Frank
Tretter
Sorry, saber mich como no tan de.
Yo habe XProfan 8. iwebbrowser2.ph wurde de Usted ya hier adecuado, Gracias.

Jetzt versuch Yo el con el Code todavía una vez.
KompilierenMarcaSeparación
 $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&
            End

2 kB
Hochgeladen:19.02.2007
Ladeanzahl122
Descargar
 
Seit 2008 endlich XProfan 10, ist einfach klasse
19.02.2007  
 




Uwe
''Pascal''
Niemeier
¡Hola Franco!

Das WebBrowser-Control se komplett encima sogenannte COM-Interfaces gesteuert; el gilt incluso para Clipboard-Aktionen. Mit Messages (como en Edits) es como nichts a machen; dafür muss incluso una neues Interface aufgerufen voluntad.
Diese Procedimiento debería helfen:
KompilierenMarcaSeparación
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----------------------------------------------------------------------

Un Rutina para Marca reiche Todavía después de!

@ IF: Bist du sicher, dass DISPOSE al Programmende  así wichig es?

HTH
Pascal
 
20.02.2007  
 




RGH
Uwe Pascal Niemeier
@ IF: Bist du sicher, dass DISPOSE al Programmende  así wichig es?


En Win9x (dazu gehört auch Win ME) grundsätzlich sí, como sonst el Speicher oiftmals no antes el nächsten Neustart freigegeben se.
Win2000/XP/Vista regelt el Betriebssystem en Programmende el Freigabe en aller Regel nötigenfalls incluso.

Trotz allem debería uno se angewöhnen con DIM reservierten Speicher grundsätzlich por DISPOSE otra vez freizugeben. Sollte uno dieses z.B. veces en uno Procedimiento vergessen, ha uno muy rápidamente Problemas ...

Saludo
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 primero para rápido Ayuda. Das bringt mich ya más.
Wenn Yo entonces el Rutina para el Markiern bekomm bin Yo Glücklich y lo ha me muy geholfen.

Kann por desgracia, no siempre igual antworten, bin no siempre al PC y para Programmieren fehlt como el Tiempo.

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



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

3.634 Views

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

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie