Announcement

Collapse
No announcement yet.

Ereignissfunktion dynamisch TWebBrowser zuweisen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ereignissfunktion dynamisch TWebBrowser zuweisen

    hi,

    ich habe folgendes Problem, ich möchte die TWebBrowser Komponente wärend der Laufzeit erstellen und dem ereigniss "OnDocumentComplete" eine funktion zuweisen.

    habe es so gemacht:
    Code:
    TWebBrowser *MWeb;
    TWebBrowserDocumentComplete *Test;
    
    oid __fastcall TfmMain::FormCreate(TObject *Sender)
    {
     try{
    
      Adresse1 ="http://www.????.html";
      
      MWeb = new TWebBrowser(MWeb);
      Test = new TWebBrowserDocumentComplete(NULL);
    
      Test = TfmMain::MyDocumentComplete; //<- Fehler ([C++ Fehler] main.cpp(57): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden)
      MWeb->OnDocumentComplete = *Test;
     }
     catch(...){
      ShowMessage("Fehler");
     }
    
    }
    Ich habe das ereigniss OnDocumentComplete von einer Statischen Komponente aus gelesen und da wird
    Code:
    Test = {TfmMain::MyDocumentComplete,'Speicher Adresse'}
    vom Debugger angezeigt, kann damit aber nicht viel anfangen

    Code:
    MWeb->OnDocumentComplete = MyDocumentComplete;
    geht auch nicht ...

    MfG Stephan

  • #2
    Originally posted by Stephan Hager View Post
    hi,

    ich habe folgendes Problem, ich möchte die TWebBrowser Komponente wärend der Laufzeit erstellen und dem ereigniss "OnDocumentComplete" eine funktion zuweisen.
    Das geht mit WebBrowser->OnDocumentComplete = MyOnDocumentComplete;
    Und MyOnDocumentComplete mit den richtigen signatur.

    habe es so gemacht:

    TWebBrowser *MWeb;
    Is dass ein globaler pointer?? Warum?

    TWebBrowserDocumentComplete *Test;
    Wass ist dass? Das compiliert hier nicht.

    [/QUOTE] MWeb = new TWebBrowser(MWeb);[QUOTE]
    MWeb war nicht initialisiert und du benutzt sie als Owner der Instance?
    Dass kann doch nicht.

    Test = new TWebBrowserDocumentComplete(NULL);
    Wass ist dass fuer eine Klasse?

    Code:
    MWeb->OnDocumentComplete = MyDocumentComplete;
    geht auch nicht ...

    Dass soll gehen. Wass geht dann nicht? Wenn du wilst das wir helfen
    dann zeige bitte die signatur von MyDocumentComplete und erzähle genau warum es nicht geht.

    Comment


    • #3
      Originally posted by Hans G View Post
      Das geht mit WebBrowser->OnDocumentComplete = MyOnDocumentComplete;
      Und MyOnDocumentComplete mit den richtigen signatur.
      dachte ich auch, aber erhält man folgenden fehler:
      Code:
      [C++ Fehler] main.cpp(62): E2034 Konvertierung von 'void (_fastcall * (_closure )(TObject *,const IDispatch *,OleVariant &))(TObject *,const IDispatch *,OleVariant &)' nach 'TWebBrowserDocumentComplete' nicht möglich
      Das heißt für mich "WebBrowser->OnDocumentComplete" will eine Variable vom Typ "TWebBrowserDocumentComplete" über geben haben

      Originally posted by Hans G View Post
      Is dass ein globaler pointer?? Warum?
      weil ich ihn in verschiedenen Funktionen nutzen will

      Originally posted by Hans G View Post
      TWebBrowserDocumentComplete *Test;
      Wass ist dass? Das compiliert hier nicht.
      Code:
      [C++] __property TWebBrowserDocumentComplete OnDocumentComplete = {read=FOnDocumentComplete, write=FOnDocumentComplete};
      musst du Borland fragen für mich ist es eine Klasse




      Um das problem noch mal darzulegen, ich möchte der Instans von TWebBrowser (bie mir MWeb) wärend der Laufzeit dem Ereignis "OnDocumentComplete" die Funktion MyDocumentComplete zuweisen,
      aber dabei tritt der folgende fehler auf:

      Code:
      [C++ Fehler] main.cpp(62): E2034 Konvertierung von 'void (_fastcall * (_closure )(TObject *,const IDispatch *,OleVariant &))(TObject *,const IDispatch *,OleVariant &)' nach 'TWebBrowserDocumentComplete' nicht möglich
      
      // mit MyDocumentComplete:
      
      void __fastcall MyDocumentComplete(TObject *ASender,const IDispatch *pDisp, OleVariant &URL);

      Comment


      • #4
        Warum so kompliziert??
        Wenn du nicht weisst dwie die Funktion aufzubauen ist, nimm die Komponente regulär in dein Formular auf, erzeuge das Ereignis und nimm diese erzeugte Funktion

        Des Weiteren:

        weil ich ihn in verschiedenen Funktionen nutzen will
        Dann nimm diesen Zeiger in den private Bereich deiner Klasse auf.

        musst du Borland fragen für mich ist es eine Klasse
        Was sollte Borland antworten?? Wohl nur, dass es eine Eigenschaft (Property) ist und keine Klasse
        Christian

        Comment


        • #5
          Originally posted by Christian Marquardt View Post
          Wenn du nicht weisst wie die Funktion aufzubauen ist, nimm die Komponente regulär in dein Formular auf, erzeuge das Ereignis und nimm diese erzeugte Funktion
          habe es ja so gemacht daher wunder es mich ja, das es nicht geht

          Comment


          • #6
            Code:
            //---------------------------------------------------------------------------
            #ifndef Unit1H
            #define Unit1H
            //---------------------------------------------------------------------------
            #include <Classes.hpp>
            #include <Controls.hpp>
            #include <StdCtrls.hpp>
            #include <Forms.hpp>
            #include <OleCtrls.hpp>
            #include <SHDocVw.hpp>
            //---------------------------------------------------------------------------
            class TForm1 : public TForm
            {
            __published: // Von der IDE verwaltete Komponenten
            private: // Benutzer-Deklarationen
             TWebBrowser *myBrowser;
             void __fastcall myComplete(TObject *ASender, const IDispatch *pDisp, OleVariant &URL);
            public:  // Benutzer-Deklarationen
             __fastcall TForm1(TComponent* Owner);
            };
            //---------------------------------------------------------------------------
            extern PACKAGE TForm1 *Form1;
            //---------------------------------------------------------------------------
            #endif
            Code:
            //---------------------------------------------------------------------------
            #include <vcl.h>
            #pragma hdrstop
            #include "Unit1.h"
            //---------------------------------------------------------------------------
            #pragma package(smart_init)
            #pragma resource "*.dfm"
            TForm1 *Form1;
            //---------------------------------------------------------------------------
            __fastcall TForm1::TForm1(TComponent* Owner)
             : TForm(Owner)
            {
            TWebBrowser *myBrowser=new  TWebBrowser((TComponent*)NULL);
            myBrowser->OnDocumentComplete=(TWebBrowserDocumentComplete)&myComplete;
            }
            //---------------------------------------------------------------------------
            void __fastcall TForm1::myComplete(TObject *ASender, const IDispatch *pDisp, OleVariant &URL)
            {
            }
            //---------------------------------------------------------------------------
            Christian

            Comment


            • #7
              danke, funktioniert einwandfrei

              Comment

              Working...
              X