Events dynamisch zuweisen



  • Ich erzeuge zur Laufzeit dynamisch ein neues Tabsheet und CppWebBrowser. Ich würde nun gern den Seitentitel (LocationName) in die Caption des TabSheets schreiben, aber wie? Muss ich dazu das OnTitleChange-Event auch dynamisch erzeugen?

    Hier erstmal mein Code:

    void __fastcall TForm1::webNewWindow2(TObject *Sender,
          LPDISPATCH *ppDisp, TOLEBOOL *Cancel)
    {
    TAdvTabSheet *ptrTabSheet;
    ptrTabSheet = new TAdvTabSheet(TForm1::AdvPageControl1);
    
    ptrTabSheet->AdvPageControl = AdvPageControl1;
    ptrTabSheet->ShowClose=true;
    
    TCppWebBrowser* pwb = new TCppWebBrowser(this);
    
    ptrTabSheet->InsertControl(pwb);
    
    pwb->Align = alClient;
    pwb->OnNewWindow2 = web->OnNewWindow2;
    pwb->Show();
    
    *ppDisp = pwb->Application;
    }
    


  • Warum nicht direkt TTabSheet::Caption zuweisen?



  • Weil LocationName erst später bekannt ist und das Event OnTitleChange auslöst und ich weiss nicht, wie ich einem zur Laufzeit erzeugtem Webbrowser später noch sagen kann, was er dann machen soll



  • RedViper schrieb:

    Muss ich dazu das OnTitleChange-Event auch dynamisch erzeugen?

    Nicht 'erzeugen' sondern 'zuweisen', genau wie du's mit dem OnNewWindow2 auch machst.
    Bin mir allerdings nicht sicher, dass ich deine Erklärungen richtig verstanden habe. 😉



  • Ja, war nicht so ganz fit, als ich das geschrieben habe 😃

    Das Problem ist folgendes: Wenn ich dem "dynamischen" Browser das OnTitleChange-Event mittels

    pwb->OnTitleChange = web->OnTitleChange;
    

    zuweise, dann wird nur die Caption des ersten Tabsheets (das es schon bei Programmstart gibt) geändert:

    void __fastcall TForm1::webTitleChange(TObject *Sender, BSTR URL)
    {
    AdvTabSheet1->Caption = web->LocationName;
    }
    

    ... ptrTabSheet und pwb sind hier ja nicht bekannt, deshalb bin ich gerade etwas ratlos.



  • Du darfst halt keine absoluten Namen verwenden.

    void __fastcall TForm1::webTitleChange(TObject *Sender, BSTR URL)
    {
      ((TAdvTabSheet*)web->Parent)->Caption = web->LocationName;
    }
    

    Zu InsertControl lies nochmal in der Hilfe nach.


Anmelden zum Antworten