EventHandler für zur Laufzeit erstellte Objekte



  • Hallo,
    ich bin ja nun schon um einiges voran geschritten was mein Programm angeht.

    Jetzt bin ich allerdings über folgendes Problem gestolpert.

    Ich erstell ein cppwebbrowser dynamisch(wegen Tabbrowsing etc.).

    TCppWebBrowser *Browser2;
    

    steht bei mir gleich unter der TForm Geschichte in der *.cpp.

    Erzeugt wird er korrekt und arbeiten tut er auch korrekt.

    Nun möchte ich aber gerne ihn ein OnNavigate2 oder so zuweisen.

    Browser2->OnNavigate2=Browser2Naviagte2;

    Und denn das OnNaviagte vom 1. kopiert und abgeändert.

    Der meckert immer das er das nicht kennt. Wenn ich das fastcall allerdings in der *.h eintrage klappt alles.

    Nur alles statisch einfügen macht ja kein grossen Sinn und wäre auch falsch.

    Was ist da nun falsch?



  • Aus deiner reichlich konfusen Beschreibung wird nicht deutlich, was du tatsächlich machst. Warum postest du nicht einfach den entsprechenden Codeabschnitt?



  • Hallo

    hero möchte dynamisch Events zuweisen. Und das ist ausfühlich in der BCB-FAQ erklärt, zum Beispiel hier.

    bis bald
    akari



  • Ich weiss nicht.

    Ich erstell die Kompo ganz normal, nur sobald ich der ein Event zuweisen will, und das Event abfange, meckert der rum.

    Browser2->OnNavigate=Browser2OnNavigate;
    void ___fastcall::Browser2OnNavigate......
    (wurde von der erste Komponenten kopiert und abgewandelt).

    Füge ich das void ___fastcall in der *.h ein, arbeitet das normal. Ansonsten meckert er unresolved external oder first Deklaration of .... usw.

    Aber da ich mal 1 oder mal 10 Browser brauche, muss ich die dynamisch erstellen.



  • Weise allen Instanzen das gewünschte Event der ersten Instanz zu, also allen dasselbe.
    Im Event kannst du über den Sender auswerten, wer jeweils der Auslöser ist, siehe FAQ.



  • Ich habe ein ähnliches Problem.

    void __fastcall TForm1::mapGridDrawCell(TObject *Sender, int ACol, int ARow,
    	  const TRect &Rect, TGridDrawState State)
    {
    ...
    }
    

    In der .h steht auch

    void __fastcall mapGridDrawCell(TObject *Sender, int ACol, int ARow,
    		  const TRect &Rect, TGridDrawState State);
    

    Und die Fehlermeldung lautet:

    [ILINK32 Fehler] Error: Nicht aufl÷sbares externes '__fastcall TForm1::DrawGrid1DrawCell(System::TObject *, int, int, Types::TRect&, System::Set<Grids::Grids__3, 0, 2>)' referenziert von I:\...\DEBUG\UNIT1.OBJ
    

    Kann mir da jemand von Euch vielleicht weiter helfen? Wühl mich schon seit Stunden durch das Forum 😕
    Das const vorm TRect habe ich auf akari's Empfehlung in irgend einem Post hinzugefügt. Vorher hat der mein __fastcall gar nicht akzeptiert.



  • Hallo

    Die Fehlermeldung bezieht sich auf eine Methode namens DrawGrid1DrawCell, aber dein Code-Auszug zeigt eine Methode mapGridDrawCell. Das hat nichts miteinander zu tun.
    Vermutlich hattest du mal eine Methode namens DrawGrid1DrawCell, hast dann aber die Implementation gelöscht oder umbenannt. Nur die Deklaration steht noch da, und die muß nun noch gelöscht werden.

    bis bald
    akari



  • Der Klatsch vom Schlag gegen meine Stirn wird wohl noch ne Zeit lang prickeln xD
    Vielen Dank fürs Augenöffnen!


Log in to reply