ActiveX



  • neeeeeeein das nimmt dir keine übel!!! images/smiles/icon_biggrin.gif
    cool images/smiles/icon_biggrin.gif
    ich muss aber nehme ich an ein ATL-Projekt erstellen oder?
    jajaja... genau sowas hab ich gesucht
    thx thx thx
    King: du bist der King!!!
    *jipi* images/smiles/icon_smile.gif images/smiles/icon_smile.gif images/smiles/icon_biggrin.gif images/smiles/icon_biggrin.gif images/smiles/icon_smile.gif images/smiles/icon_smile.gif
    *strahl*
    ciaoy

    > Endy <<



  • Also ich hab das ganze mal compiliert(er funzt natürlich auch... obwohl das längst nich selbstverständlich is: ich bin schon auf Codes gestoßen, die nich gefunzt haben!) und mir den code genauer angeschaut... bin auf zwei dinge gestoßen:

    case WM_CREATE:
            StringFromGUID2(clsid, szCLSID, 64);
    

    da hab ich mir gefragt wie du die GUID in nen string convertieren kannst, wenn beide vars doch noch NULL sind?
    und welchen sinn hat die zeile eigendlich? du übergibst die GUID doch bei CreateWindowEx sowieso direkt als string????

    VARIANTARG var;
    VariantInit(&var);
    var.vt = VT_BSTR;
    var.bstrVal = bstrFile;
    
    CComDispatchDriver pDisp(pUnk);
    pDisp.PutPropertyByName(OLESTR("src"), &var);
    
    VariantClear(&var);
    

    Naja ich weiß, was die Zeilen machen(also die pdf datei laden)
    aber wie kommst du darauf?
    bzw. Ich versteh es so(mit hilfe der MSDN) das du das properitiy src neu setzt aber woher weiß ich, welche properities ein Control hat bzw. WIE ich die zu setzen hab... du benutzt:
    var.vt = VT_BSTR;
    var.bstrVal = bstrFile;
    (wie du auf den Variablentyp kommst und was VariantInit macht is mir ja klar)
    Kann man das irgendwo nachlesen?

    Man hat mir gesagt das jedes ActiveX element anders bedient wird...
    ok... aber woher weiß man dann wie?
    thx
    ciaoy

    > Endy <<

    PS: *jipi* und nochmal thx thx thx!!!!



    case WM_CREATE:
            StringFromGUID2(clsid, szCLSID, 64);
    

    Das ist natürlich Blödsinn. Eigentlich wollte ich beim Zusammenstellen des Samples ganz was anderes machen. Diese Zeile ist als Leiche geblieben und völlig sinnlos.

    du übergibst die GUID doch bei CreateWindowEx sowieso direkt als string????

    Eben.

    VARIANTARG var;
    VariantInit(&var);
    var.vt = VT_BSTR;
    var.bstrVal = bstrFile;
    
    CComDispatchDriver pDisp(pUnk);
    pDisp.PutPropertyByName(OLESTR("src"), &var);
    
    VariantClear(&var);
    

    Den Namen der Eigenschaft habe ich aus der TypeLib (mit der OLE-Ansicht auf File/ViewTypeLib und dann auf das .ocx).

    Man hat mir gesagt das jedes ActiveX element anders bedient wird...
    ok... aber woher weiß man dann wie?

    Da mußt Du dann halt in die Doku zum Control schauen. Allerdings bieten die Controls auch einen Standard-Satz an Eigenschaften. Schau mal in der MSDN nach:

    MSDN Library - July 2001
    -> Platform SDK Documentation
    -> Component Services
    -> COM
    -> Controls and Property Pages
    -> Guide
    -> ActiveX Controls
    -> Properties and Methods
    -> Control Properties
    -> Standard Properties

    Übrigens: Ein ATL-Project brauchst Du auch nicht zu erstellen. Ich habe auch nur eine 'Leere Win32-Anwendung' erstellt. Das mußt Du nur dann, wenn Du den Wizzard benutzen willst.



  • Übrigens: Ein ATL-Project brauchst Du auch nicht zu erstellen. Ich
    habe auch nur eine 'Leere Win32-Anwendung' erstellt. Das mußt Du nur
    dann, wenn Du den Wizzard benutzen willst.
    Ja ich habs auch gemerkt images/smiles/icon_wink.gif

    Tja, Tutorials zum Thema kenn ich leider nicht
    das wird sich bald ändern images/smiles/icon_wink.gif Denn sowas wichtiges: da muss es auch ein Tutorial zu geben!!! Sobald ich da einigermaßen den überblick hab... ne... sobald sich mein wissen etwas gesetzt hat und ich ein bischen übung darin hab wird zu meinem Tut ergänzt...

    ach ja: kann ich dein Beipsiel vieleicht mit einbauen?
    (als Codebeispiel halt)
    Ich finde es nämlich recht einfach aufgebaut...
    Überhaupt diese Post hier war mehr als Informatif, denn eigendlich ist alles gesagt was zu sagen ist, damit man sich das selber beibringen kann(naja gut ich wusste ja auch grob schon über die interfaces bescheid aber das ist meiner meinung nach eh recht einfach.) Danke!!!
    ciaoy

    > Endy <<



  • mist...
    eine Frage hab ich doch noch: Wie kann ich die Methods der Elemente benutzen... z.b. bei deinem PDF-element gibts ne funktion:
    setZoom(int perzent);
    ...
    wie komm ich da ran?
    thx

    > Endy <<

    PS: hoffentlich is das jetze endlich die letze frage... *G*



  • Original erstellt von Endy:
    **mist...
    eine Frage hab ich doch noch: Wie kann ich die Methods der Elemente benutzen... z.b. bei deinem PDF-element gibts ne funktion:
    setZoom(int perzent);
    **

    Methoden rufst Du mit InvokeX() auf. Da die Methode einen Parameter übernimmt, nimmst Du Invoke1(). Da der Datentyp Integer bei VB 16 Bit breit ist, nehme ich hier VT_I2:

    VARIANTARG varZoom;
      VariantInit(&varZoom);
      varZoom.vt    = VT_I2;
      varZoom.iVal  = 150;
      pDisp.Invoke1(OLESTR("setZoom"), &varZoom);
      VariantClear(&varZoom);
    

    Ganz einfach, gell?



  • d.h. wenn ich ne funktion mit 2 parametern hab mach ich das so:

    pDisp.Invoke2(OLESTR("funktionsname"), &var1, var2);

    ok thx images/smiles/icon_wink.gif
    ciao

    > Endy <<



  • Genau so! Und wenn Du keine Parameter übergibst, nimmst Du Invoke0(). Wenn Du aber mehr als zwei Parameter übergeben willst, mußt Du InvokeN() verwenden. InvokeN() kann die anderen Methoden dann natürlich auch ersetzen. Schau einfach mal in atlcom.h, das siehst Du die Klasse CComDispatchDriver und auch gleich die Implementation. Da kannst Du bestimmt noch einiges an Informationen bekommen.

    Bis dann also!



  • hmm... ok
    d.h. bei 4 parametern:
    InvokeN(OLESTR("funktion"), param1,param2,param3,param4);

    ach ja und bei VARIANTARG ... gibts da nen text, was vt sein muss, für welche variable, die ich übergeben will und wie heist bei anderen variablen der parameter? also du hattest in den bsps einmal bstrVal und einmal iVal ??? ungarische notation? also für long: lVal?

    sag mal kannst du mir ne mail schreiben, fals ich noch fragen hab?
    Endye@gmx.de

    [ 09.10.2001: Beitrag editiert von: Endy ]



  • [ 09.10.2001: Beitrag editiert von: Endy ]


Anmelden zum Antworten