Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++ Gridinsolun värjäys

pasu [21.02.2006 19:55:33]

#

Painiskelen pienen ongelman kanssa.

Tietäiskö joku miten onnistuisi värjäämään esim. StringGridin/vastaavan yhden solun?
Käytössäni on C++Builder6.0

Gridiin tulostuisi tekstiä allekkain
esim.
Teksti1
Teksti2 <--- solun taustaväri jokin muu kuin valkea
Teksti3 <--- solun taustaväri jokin muu kuin valkea
Teksti4
jne..

Tai vaihtoehtoisesti miten saisin samaan soluun esim Teksti2 ja Teksti3:n allekkain.

zacura [22.02.2006 16:14:03]

#

Eikös StringGridillä ole onDrawCell eventti. Sen parametreina tulee sillä hetkellä piirretävän solun koordinaatit (rivi, sarake) integerinä ja pixelikoordinatit TRectinä. Sitten käytät StringGrid->Canvas->FillRect funktiota ja homma pitäisi hoitua.

pasu [23.02.2006 10:51:12]

#

Tota kyllä saan värjäiltyä soluja.
Ongelmana on taas nyt et jos laitan värjäykset tohon eventtiin se värjää kaikki solut ja teksti ei tule näkyviin.

Kuinkahan saisin kutsuttua ko. eventtiä?
void __fastcall TForm1::AjotGridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State)

Aivot eivät nyt kyllä millään toimi:)

zacura [23.02.2006 12:30:05]

#

Tarkista solun koodrinatit (ARow, ACol) ennen värjäystä.
onDrawCell enventtiin:

//värjää solut sarakkeessa 1 (jotenkin näin, en ole testannut)
if (ACol==1) {
  StringGrid1->Canvas->Brush->Color = clRed;
  StringGrid1->Canvas->FillRect(Rect);
  StringGrid1->Canvas->TextOut(Rect->Left, Rect->Top, StringGrid1->Cells[ARow][ACol]);  //piirretään teksti
}

Tekstinjoudut tosin piirtämään itse, mutta se onnistuu aika helposti Canvas->TextOut funktiolla. Kannattaa myös tarkistaa Builderin ohjeista mitä tuo TGridDrawState pitää sisällään, jos vaikka sillä jotenkin kikkailemalla saisi tekstin piirrettyä automaagisesti.

pasu [23.02.2006 14:02:01]

#

Joo tuolla toimii hyvin värjääminen ja kirjoittaminen.

Nyt jo hävettää kysyä, mutta kun täytän gridiä niin onDrawCell enventille pitäisi saada jotenkin tieto et nyt pitäis värjätä.

Eli sen pitäisi saada gridin täyttö aliohjelmasta tieto et värjätäänkö ko solu ja teksti mikä tulisi siihen soluun.

Metabolix [23.02.2006 14:35:57]

#

En nyt aivan ymmärtänyt, minkä pitää välittää tieto mille, mutta joka tapauksessa suosittelen globaalin muuttujan käyttöä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta