Fehler bei Zuweisung von OnDrawCell



  • Hallo
    Ich habe ein Problem bei einer Zuweisung der OnDrawCell Routine bekomme immer diesen Fehler raus

    E2034 Konvertierung von 'void (_fastcall *)(TObject *,int,int,const TRect &,TGridDrawState)' nach 'void (_fastcall * (_closure )(TObject *,int,int,const TRect &,TGridDrawState))(TObject *,int,int,const TRect &,TGridDrawState)' nicht möglich.

    Kann mir einer helfen



  • Hallo

    eventuell hilft dir dieser Thread weiter
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-80029-and-highlight-is-ondrawcell.html
    Es geht darum, das das const bei OnDrawGrid ein Fehler ist.
    Ansonsten poste mal die genau Funktionsdeklaration, die du zuweisen willst.

    bis bald
    akari



  • Ja auch wenn ich const weglasse kommt der Fehler raus.

    cpp :

    AB->OnDrawCell=myABDrawCell;
    

    Fehler:

    Konvertierung von 'void (_fastcall *)(TObject *,int,int,TRect &,TGridDrawState)' 
    nach 'void (_fastcall * (_closure )(TObject *,int,int,const TRect &,TGridDrawState))(TObject *,int,int,const TRect &,TGridDrawState)'
    nicht möglich.
    

    Deklaration:

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

    so wie ich das sehe muss irgendwie doch const stehen, aber vielleicht weis ja jemand mehr als ich.



  • Hallo

    also diese Deklaration funktioniert bei mir :

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

    bis bald
    akari



  • Ja bei mir geht es ach wenn ich es Form bezogen deklariere.
    Aber geht das nicht das man es auch in einer separaten unit zuweisen kann?



  • Gab es da nicht in den letzten Monaten schon mal einen Thread zu? Ich finde ihn allerdings nicht mehr. Falls ihn jemand findet...

    (Nicht sicher:) Ich glaube das ist irgendeine Beschränkung beim BCB und ist somit nicht möglich.



  • Hallo

    ach so, da liegt das Problem. Nein, diese Events können nur Objekt-gebundene Funktionen aufrufen, das liegt am Schlüsselwort __closure (nein, du kannst es nicht wegmachen)
    Du wirst wohl in dem Form eine Zwischenfunktion einbauen müßen, die den Aufruf weiterleitet. An eine Funktion mit demselben Kopf, nur statt dem Sender das entsprechende Canvas.

    void __fastcall myABDrawCell(TCanvas *Canvas, int ACol, int ARow,const TRect &Rect, TGridDrawState State);
    

    bis bald
    akari



  • Habe es jetzt mit Hilfe einer classe gelöst und das funktioniert Einwandfrei.
    Aber trotzten schönen dank für eure Hilfe…. 👍

    Mfg.
    skymaster


Anmelden zum Antworten