Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Specificni redovi u StringGrid-u

[es] :: C/C++ programiranje :: Specificni redovi u StringGrid-u

[ Pregleda: 2165 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tokajac

Član broj: 93240
Poruke: 123
*.adsl.beotel.net.



+5 Profil

icon Specificni redovi u StringGrid-u23.11.2007. u 13:09 - pre 199 meseci
U StringGrid hocu da upisem i prikazem podatke o osobama.

Neke od osoba su pocinile 'krivicno delo' i hocu to da obelezim na neki nacin.
Ideja mi je da redove koji predstavljaju podatke prikazem u drugoj boji.
Da li i i kako je to izvodljivo?

Da li ima drugog predloga?
Kljucno mi je da korisnik aplikacije na neki nacin jasno vidi razliku izmedju reda u kome su upisani podatci o obicnoj osobi i specificnoj (kaznjenoj) osobi.

Hvala unapred!
Pozdrav!
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
77.46.198.*



+8 Profil

icon Re: Specificni redovi u StringGrid-u23.11.2007. u 13:46 - pre 199 meseci
Treba da CustomDraw staviš na true i da redefinišeš taj događaj tako
što napišeš kôd koji služi za crtanje tvojih ćelija. Da ne bi ručno
crtao svaku ćeliju možeš da ubaciš i neko grananje, pa za one ćelije
gde nema prilagođavanja pozivaš DefaultDraw, a za ove gde ima
izvršavaš sopstveni kôd. Ovo je dosta dokumentovano u Helpu, a
pogledaj i source za ovu komponentu, biće ti dosta korisno. U svakom
slučaju, nije velik posao samo pažljivo pročitaj dokumentaciju.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Specificni redovi u StringGrid-u23.11.2007. u 15:46 - pre 199 meseci
Ovde imaš ceo primer vezan za DefaulDrawing:
http://www.bcbjournal.org/bcbcaq/CAQs/caq48.htm

Interfejs događaja ti (pored ostalog) nudi ACol i ARow na osnovu kojih možeš da odreaguješ sa farbanjem.

P.S.
U primeru je umesto ARow stavljeno Row i umesto ACol stavljeno Col (stara verzija BCB-a).
 
Odgovor na temu

tokajac

Član broj: 93240
Poruke: 123
*.adsl.beotel.net.



+5 Profil

icon Re: Specificni redovi u StringGrid-u23.11.2007. u 17:58 - pre 199 meseci
Hvala na izuzetno preciznim odgovorima!


Dosada sam sa dogadjajima u kodu radio:


Code:

  TMenuItem *itemPod = new TMenuItem(PopupMenu2);
   itemPod->OnClick = Dogadjaj;

.
.
.
.
Code:

void __fastcall TForm1::Dogadjaj(TObject *Sender)
{
....
}


------------------------------------------------------------------------------------------
Za ovaj slucaj mi treba:

Code:

  TMenuItem *itemPod = new TMenuItem(PopupMenu2);
   itemPod->OnClick = ????????????????;                      <--------------kako ide ovaj poziv





Code:

void __fastcall TUtakmica::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{


   StringGrid1->Canvas->Brush->Color = clBlue;
   StringGrid1->Canvas->Font->Color = clRed;
   StringGrid1->Canvas->FillRect(Rect);

   StringGrid1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);

}





Vidim da se dogadjaj obradi prilikom kreiranja forme (jel moze ovo da se zabrani?), ali meni je neophodno da ga explicitno pozovem.



Kako da pozovem ovaj obradjivac dogadjaja?
Kako da prosledim odgovarajuce parametre i koje?


 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Specificni redovi u StringGrid-u23.11.2007. u 20:50 - pre 199 meseci
DefaultDrawing se postavlja na false onda kada je potrebno napraviti poseban kod za iscrtavanje celija unutar OnDrawCell. E sad, ako me pamćenje dobro služi (nisam testirao) nije moguće prosto toggle-ovanje između true/false vrednosti ove osobine, odnosno izvršavanje default i posebnog koda, nešto kao:
Code:

ButtonClick
{
   StringGrid1->DefaultDrawing = ! StringGrid1->DefaultDrawing;

   if ( StringGrid1->DefaultDrawing == false )
   {
      StringGrid1->OnDrawCell = PosebnoStringGrid1DrawCell;
   }
   else
   {
      StringGrid1->OnDrawCell = NULL;
   }
}

(Ali ipak probaj, ne znam. Mislim da to nije moglo barem kod OwnerDrawn propertija nekih drugih komponenti)

Kad smo kod ovoga (to je valjda bio deo pitanja):
StringGrid1->OnDrawCell = PosebnoStringGrid1DrawCell;
... to se postiže ovako:
Code:

--- H ---
// public:
void __fastcall PosebnoStringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, const TRect &Rect, TGridDrawState State);

--- CPP ---
void __fastcall TForm1::PosebnoStringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, const TRect &Rect, TGridDrawState State)
{
   // ...
}

(Razlika između standardnog prototipa OnDrawCell i ovog je u jednom const uz TRect)

Ipak, mislim da ti nije neophodno switch-ovanje izmedju default i posebnog koda. Uzmi samo posebni deo koda i modifikuj ga tako da radi za oba slucaja, nesto kao:

Code:

void __fastcall TForm1::PosebnoStringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, const TRect &Rect, TGridDrawState State)
{
   // ...
   if ( PosebanKod == true )
   {
      // farbaj linije
   }
   else
   {
      // nesto drugo, ili cak nista
   }
   // ...
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: Specificni redovi u StringGrid-u

[ Pregleda: 2165 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.