kolor tla komorek StringGrid

dział ogólny

kolor tla komorek StringGrid

Nowy postprzez ern777est » niedziela, 28 grudnia 2008, 15:12

Witam.
Moj problem polega na ustawieniu koloru tla dla kazdej komorki obiektu StringGrid na podstawie wartosci [0..255] ktore znajduja sie w komorkach.
Liczby w komorkach maja dotyczyc skladowej R, G i B maja byc =0.
Zrobilem to na podstawie tego:
http://cyfrowy.baron.webpark.pl/stringgrid.html#grid6
ale tu kolor jest ustawiony w kodzie i nie wiem jak go zmieniac dynamicznie w trakcie dzialania programu.
Gdyby ktos byl tak mily i mogl zerknac do tego programu:
http://www.e-mazing.pl/pliki/stuff/kolory_komorek.rar
Chodzi i to zeby po wpisaniu liczb w komorki i kliknieciu "pokaż", komorki zmienily kolor na odcienie czerwonego.
Bede bardzo wdzieczny za pomoc.
Avatar użytkownika
ern777est
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): niedziela, 28 grudnia 2008, 00:33
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: kolor tla komorek StringGrid

Nowy postprzez Cyfrowy Baron » niedziela, 28 grudnia 2008, 16:11

W poradzie Określanie koloru dla wybranej komórki StringGrid jest tak:

Kod: Zaznacz cały
  1.  
  2. void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
  3.       int ARow, TRect &Rect, TGridDrawState State)
  4. {
  5.  if(ARow == 2)
  6.  {
  7.   if(ACol == 1) StringGrid1->Canvas->Brush->Color = clYellow;
  8.   if(ACol == 2) StringGrid1->Canvas->Brush->Color = clRed;
  9.   if(ACol == 3) StringGrid1->Canvas->Brush->Color = clBlue;
  10.   if(ACol == 4) StringGrid1->Canvas->Brush->Color = clGreen;
  11.   StringGrid1->Canvas->FillRect(Rect);
  12.   StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
  13.  }
  14. }
  15.  


Odrysowaniem koloru steruje zdarzenie OnDrawCell, które jest wywoływane każdorazowo, gdy zachodzą jakieś zmiany w obiekcie StringGrid.
Zastanów się jak można sterować kolorem komórki? Przecież to banalnie proste, wystarczy zdefiniować zmienną globalną typu TColor i to za jej pomocą zmieniać kolor komórki:

plik nagłówkowy np. Unit1.h
Kod: Zaznacz cały
  1.  
  2. public:
  3.         TColor kolor;
  4.  


plik źródłowy np. Unit1.cpp
Kod: Zaznacz cały
  1.  
  2. void __fastcall TForm1::Button1Click(TObject *Sender)
  3. {
  4.  kolor = clRed;
  5.  StringGrid1->Repaint();
  6. }
  7. //-----------------------------------------------------------------------------------
  8. void __fastcall TForm1::Button2Click(TObject *Sender)
  9. {
  10.  kolor = clYellow;
  11.  StringGrid1->Repaint();
  12. }
  13. //-----------------------------------------------------------------------------------
  14. void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
  15.       int ARow, TRect &Rect, TGridDrawState State)
  16. {
  17.  if(ARow == 2)
  18.  {
  19.   if(ACol == 1) StringGrid1->Canvas->Brush->Color = kolor; // tutaj zmienna steruje kolorem
  20.   StringGrid1->Canvas->FillRect(Rect);
  21.   StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
  22.  }
  23. }
  24.  


Ten prosty przykład powinien dać Tobie ogląd na sprawę, a jeżeli nie zrozumiałeś, to już nie pomogę.
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
    NieznanyNieznana

Re: kolor tla komorek StringGrid

Nowy postprzez ern777est » niedziela, 28 grudnia 2008, 21:02

Dzieki Baronie ;)
udalo sie :)
Avatar użytkownika
ern777est
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): niedziela, 28 grudnia 2008, 00:33
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


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 29 gości