CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Przypinanie zdarzenia TMenuDrawItemEvent

Przypinanie zdarzenia TMenuDrawItemEvent

dział ogólny

Przypinanie zdarzenia TMenuDrawItemEvent

Nowy postprzez MisticFrezer » wtorek, 4 grudnia 2012, 12:29

Witajcie
Mam drobny kłopot z przypięciem zdarzenia do dynamicznie tworzonego obiektu.
Mam klasę:
KOD cpp:     UKRYJ  
class THelpMenuItem : public TMenuItem
{
  private:
        //-----
        void __fastcall DrawItemA(TObject * Sender,TCanvas *ACanvas, TRect &ARect,  bool Selected);

  public:
        THelpMenuItem(TComponent* Owner, TMainMenu * handle);

};
 

Chce odmalować na swój sposób ten element menu.
Tworzę go dynamicznie, więc muszę przypiąc zdarzenie OnDrawItem. Robię to w konstruktorze:
KOD cpp:     UKRYJ  
THelpMenuItem::THelpMenuItem(TComponent* Owner, TMainMenu * Menu)
  : TMenuItem(Owner)
{
        this->Caption = "&Pomoc";
              this->OnDrawItem = DrawItemA;
        Menu->Items->Add(this);
}
 

Niestety wciąz otrzymuję błąd:
Kod: Zaznacz cały
E2034 Cannot convert 'void (_fastcall * (_closure )(TObject *,TCanvas *,TRect &,bool))(TObject *,TCanvas *,TRect &,bool)' to 'TMenuDrawItemEvent'

mimo, że TMenuDrawItemEvent jest ewidentnie:
KOD cpp:     UKRYJ  
typedef void __fastcall (__closure *TMenuDrawItemEvent)(System::TObject* Sender, Graphics::TCanvas* ACanvas, const Types::TRect &ARect, bool Selected);
 

Wszyscy przypinają w ten sposób OnClick i inne zdarzenia. Czemu to nie chce działać?
Avatar użytkownika
MisticFrezer
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): wtorek, 23 lutego 2010, 23:57
Lokalizacja: Wrocław
Podziękował : 1
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP3, Windows 7 Pro
Kompilator: BCB6, RAD Studio 2010, VS 2010
Gadu Gadu: 0
    Windows XPOpera

Re: Przypinanie zdarzenia TMenuDrawItemEvent

Nowy postprzez polymorphism » wtorek, 4 grudnia 2012, 14:48

mimo, że TMenuDrawItemEvent jest ewidentnie:

Czyżby? Przyjrzyj się dokładnie ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Przypinanie zdarzenia TMenuDrawItemEvent

Nowy postprzez Cyfrowy Baron » wtorek, 4 grudnia 2012, 16:18

W zdarzeniu OnDrawItem dla MenuItem struktura TRect występuje bez żadnego modyfikatora, ale w pliku pomocy masz podane, że ta struktura powinna występować z modyfikatorem const, więc tworząc funkcję dla tego zdarzenia musisz dodać ten modyfikator:

KOD cpp:     UKRYJ  
void __fastcall DrawItemA(TObject * Sender,TCanvas *ACanvas, const TRect &ARect,  bool Selected);

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
MisticFrezer
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Przypinanie zdarzenia TMenuDrawItemEvent

Nowy postprzez MisticFrezer » środa, 5 grudnia 2012, 12:30

Dałem się zwieść wyglądowi zdarzenia OnDrawItem i jak zwykle czegoś nie zauważyłem - tym razem był to modyfikator const.
Dzięki wielkie :)
Avatar użytkownika
MisticFrezer
Bladawiec
Bladawiec
 
Posty: 23
Dołączył(a): wtorek, 23 lutego 2010, 23:57
Lokalizacja: Wrocław
Podziękował : 1
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP3, Windows 7 Pro
Kompilator: BCB6, RAD Studio 2010, VS 2010
Gadu Gadu: 0
    Windows XPOpera


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości