CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TGridDrawState i parametr State

TGridDrawState i parametr State

dział ogólny

TGridDrawState i parametr State

Nowy postprzez piotut » czwartek, 25 listopada 2010, 17:30

Witam,
tworzę dynamicznie tablicę przy pomocy TStringGrid. Chciałbym wywołać zdarzenie OnDrawCell.
I mam problem ze zdefiniowaniem parametru State - wiem że przyjmuje 3 wartości - gdSelected,gdFixed,gdFocused.
Jak go zdefiniować (wywołać)?

MainStringGrid->OnDrawCell = MainStringGridDrawCell(MainStringGrid,1,1,Rect,"co tutaj trzeba wpisac");
Pozdrawiam
Piotut
Avatar użytkownika
piotut
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): czwartek, 25 listopada 2010, 17:20
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPInternet Explorer 8

Re: TGridDrawState i parametr State

Nowy postprzez Cyfrowy Baron » czwartek, 25 listopada 2010, 20:42

To co Ty tutaj robisz nie ma sensu. Co to właściwie znaczy, że tworzysz dynamicznie tablicę przy pomocy TStringGrid. Jakiego rodzaju dynamiczną tablicę? Czy chodzi Tobie o to, że tworzysz dynamicznie obiekt typu TStringGrid. Jeżeli tak to zdarzenie pod dynamicznie tworzony obiekt nie tak się podłącza. By podłączyć pod dynamicznie tworzony obiekt zdarzenie, najpierw musisz napisać funkcję, która będzie tym zdarzeniem. Taką funkcję deklarujesz w pliku nagłówkowym w sekcji private lub public, a następnie definiujesz w pliku źródłowym:
plik nagłówkowy np. Unit1.h:
KOD cpp:     UKRYJ  
private:
        TStringGrid *MainStringGrid;
        void __fastcall MainStringGridDrawCell(TObject *Sender, int ACol, int ARow, const TRect &Rect,
                TGridDrawState State);/* ta funkcja będzie zdarzeniem dla MainStringGrid */


plik źródłowy np. Unit1.cpp:
KOD cpp:     UKRYJ  
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  MainStringGrid = new TStringGrid(this);
  MainStringGrid->Parent = this;
  /* podpinam funkcję pod zdarzenie OnDrawCell */
  MainStringGrid->OnDrawCell = MainStringGridDrawCell;
}
//---------------------------------------------------------------------------
/* teraz definiuję funkcję, która będzie zdarzeniem dla MainStringGrid */
void __fastcall TForm1::MainStringGridDrawCell(TObject *Sender, int ACol, int ARow,
          const TRect &Rect, TGridDrawState State)
{
 /* tej funkcji używam jak zwykłego zdarzenia, czyli wszystko wpisuje tutaj */
}


Ważne jest by argument TRect był typu const, w przeciwnym razie nie da się go podłączyć pod zdarzenie.



Jeżeli nie o to chodziło to napisz dokładnie o co.
Jeżeli chcesz podłączyć zdarzenie jednego obiektu typu TStringGrid pod zdarzenie drugiego obiektu tegoż samego typu, to robisz to dokładnie tak samo, z tym, że trzeba nanieść poprawki (w C++Builder 2010 koniecznie) do utworzonych zdarzenia, czyli zarówno do deklaracji w pliku nagłówkowym jak i definicji w pliku źródłowym. Poprawka polega na zmianie TRect na const. Bez tego nie da się podłączyć zdarzenia:


KOD cpp:     UKRYJ  
void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
          const TRect &Rect, TGridDrawState State)
{
 /* jakiś kod */
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 StringGrid2->OnDrawCell = StringGrid1DrawCell;
}
//---------------------------------------------------------------------------


Zdarzenie OnDrawCell służy do przekazywania danych do obiektu StringGrid, dlatego przy podłączaniu jednego zdarzenia pod drugie, nie możesz mu przekazywać żadnych wartości. Argumenty tej funkcji-zdarzenia nie podlegają zmianie, to obiekt StringGrid wewnętrznie nimi steruje, czyli możesz sprawdzać wartości tych argumentów, ale nie możesz ich zmieniać poprzez podanie własnych parametrów. Dlatego też nie da się tego zrobić tak jak to sobie zaplanowałeś. To zdarzenie służy tylko do zmiany wyglądu obiektu StringGrid, czyli do rysowania w tym obiekcie i do niczego więcej.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
piotut
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: TGridDrawState i parametr State

Nowy postprzez piotut » czwartek, 25 listopada 2010, 23:49

Dziękuję za szybką odpowiedź.
Niedokładnie sformułowałem mój problem , ale trafiłeś w sedno sprawy.

Kod wygląda prawie tak samo, ale zabrakło jednak const przy TRect i tutaj była przyczyna mojego problemu.

Pozdrawiam i jeszcze raz dziękuję.
Piotut
Avatar użytkownika
piotut
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): czwartek, 25 listopada 2010, 17:20
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Internet Explorer 8


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