CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TStringGrid - dynamiczna metoda OnDrawCell

TStringGrid - dynamiczna metoda OnDrawCell

dział ogólny

TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez Corvis » środa, 2 marca 2011, 10:57

Witam,

Tworzę sobie dynamicznie TStringGrida:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
        private :
        TStringGrid *grid;
        void __fastcall MyDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect, TGridDrawState State); // Deklaracja metody malowania wyczytałem, że TRect musi być const


Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
void __fastcall TForm1::MyDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect,
                  TGridDrawState State) {

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) {
        grid = new TStringGrid(this);
        grid->Parent = this;
        grid->Visible = true;
        grid->OnDrawCell =  MyDrawCell;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender) {
        delete grid;
}


Kiedy kompiluje otrzymuję:


[ILINK32 Error] Error: Unresolved external '__fastcall TForm1::StringGrid1DrawCell(System::TObject *, int, int, Types::TRect&, System::Set<Grids::Grids__3, 0, 5>)' referenced from C:\USERS\XX\DOCUMENTS\RAD STUDIO\PROJECTS\TEST\DEBUG\WIN32\UNIT1.OBJ



Może ktoś wie o co chodzi ??
Ostatnio edytowano środa, 2 marca 2011, 12:18 przez Corvis, łącznie edytowano 2 razy
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez polymorphism » środa, 2 marca 2011, 11:41

Może Ty powiedz, o co chodzi. Bo w nagłówku deklarujesz MyDrawCell, w pliku cpp implementujesz GridDrawCell, a błąd dotyczy StringGrid1DrawCell. Czeski film...

Zasadniczo błąd dotyczy tego, że odwołujesz się do metody, która nigdzie nie została zdefiniowana (zaimplementowana).
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: TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez Corvis » środa, 2 marca 2011, 11:44

Faktycznie źle cpp wkleiłem - poprawiłem. ALe błąd jest dobry
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez polymorphism » środa, 2 marca 2011, 11:47

Jest dobry, bo jest jeszcze to:
KOD cpp:     UKRYJ  
grid->OnDrawCell = GridDrawCell;
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: TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez Cyfrowy Baron » środa, 2 marca 2011, 12:09

Próbowałem u siebie wywołać taki komunikat błędu, ale w żaden sposób to się mi nie udało, co oznacza, że błąd u Ciebie ma głębsze podłoże.

Tworzysz funkcję - zdarzenie o nazwie MyDrawCell, ale podłączasz coś co się u Ciebie nazywa GridDrawCell i nie bardzo wiadomo co to takiego:

  kod niepoprawny
  
KOD cpp:     UKRYJ  
grid->OnDrawCell = GridDrawCell;
  


Gdy zrobiłem tak u siebie to otrzymałem komunikat błędu o następującej treści:


[BCC32 Error] Unit1.cpp(22): E2451 Undefined symbol 'GridDrawCell'



I to się zgadza, gdyż nie istnieje nic co by się nazywało GridDrawCell. Jeżeli jednak u Ciebie mimo tego nie pokazuje się taki komunikat, to oznacza, że masz gdzieś w kodzie coś co się tak nazywa, ale nie jest to funkcja - zdarzenie dla obiektu typu TStringGrid i stąd ten błąd.
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: TStringGrid - dynamiczna metoda OnDrawCell

Nowy postprzez Corvis » środa, 2 marca 2011, 12:19

Kurde, robilem na 2 builderach 2010 i XE i jeden plik z 1 wkleiłem, drugi z drugiego, stąd ten syf. kod już poprawiłem.

Działa pod 2010 ale po Xe nie :-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome


  • 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 4 gości