Megváltoztatja a színét sejtek a táblázatban kitöltésekor stringgrid

Megváltoztatja a színét sejtek a táblázatban kitöltésekor StringGrid

Azt levezetni a megoldást annak problémák StringGrid. Meg kell festeni néhány szín az optimális megoldást a sejt. Azaz, egy sorban csak egy cellában kell átfesteni.

Hogyan kell végrehajtani ezt?

valamint egy eseményt egy nyomógomb összekapcsolni?

> És mint egy eseményt egy nyomógomb összekapcsolni?

Esemény (OnDrawCell a StringGrid) be kell állítani az Object Inspector (menjen az „Események” fülre, és ott kattintson duplán az egér bal gombjával a megfelelő esemény kezelőt rá).

És mi történik, ha megnyom egy gombot? Ha csak megnyomása után meg kell festeni a StringGrid, akkor hozza létre a változó színű = false, és rendeljen hozzá egy kulcsot kezelő igaz. És OnDrawCell ellenőrizze, színezett = true, majd festeni a.

és így kell használni StringGrid.Repaint.

eljárás TForm1.StringGrid1DrawCell (Sender: TObject; AcOI, Arow: egész;
# XA0; téglalap: TRect; Állam: TGridDrawState);
kezdődik
# XA0; ha AcOI = 0, akkor # XA0; // festeni az első cellát abban a sorban
# XA0; kezdődik
# XA0; # XA0; stringGrid1.Canvas.Brush.Color: = clGray;
# XA0; # XA0; stringGrid1.Canvas.FillRect (rect);
# XA0; end;

StringGrid.Repaint minden esetben!

> És ez így kell használni StringGrid.Repaint.

Ha korábban nem festette az asztalra, és most (pl után a gombra kattintva), úgy döntött, hogy meg kell kezdeni, hogy festeni az (színes = true), akkor valószínűleg nem árt felhívni a Refresh, egyébként az asztal lehet rajzolni csak szükség esetén. De akkor sem Frissítés Újrarajzolja bármilyen okból nem lesz szükség (különösen OnDrawCell) - tábla önmagában is támaszkodhatnak, ha szükséges.

Valahogy festette át az egész táblát, és a szöveg nem látható:

eljárás Tmain.stDrawCell (Sender: TObject; AcOI, Arow: egész;
# XA0; téglalap: TRect; Állam: TGridDrawState);
kezdődik
ha a színes = igaz, akkor
kezdődik
st.Canvas.Brush.Color: = clGreen;
st.Canvas.FillRect (rect);
végén;
végén;

eljárás Tmain.Button9Click (Sender: TObject);
var i, j: integer;
kezdődik
színes: = false;
i: = 0 st.RowCount-1 do
j: = 0 st.ColCount-1 do
kezdődik
# XA0; színes: = false;
# XA0; if (j = opt [i]), majd színes: = true;
# XA0; st.Cells [j, i]: = floattostr (reshc [i, j]) + "" + floattostr (resht [i, j]);
# XA0; st.Refresh;
végén;
végén;

nenarisovannogo szöveget és nem tekinthetők

Bear malac
és így tovább?

Állapot, amikor meg kell festeni a cellát, és ha nincs szükség, hogy hozzanak OnDrawCell. Itt egy példa:

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; színes: = true;
# XA0; st.Refresh;
végén;

eljárás TForm1.stDrawCell (Sender: TObject; AcOI, Arow: egész;
# XA0; téglalap: TRect; Állam: TGridDrawState);
kezdődik
# XA0; ha (színes) és (AcOI mod 2 = Arow mod 2)
# XA0, majd st.Canvas.Brush.Color: = clWhite
# XA0; máshol st.Canvas.Brush.Color: = clBlack;

hol máshol valami több?
A szöveg nem húzott.
mit kell látni ugyanakkor?

Paul I.
Számomra úgy tűnik, úgy, ahogy van, kivéve ezt a feltételt (AcOI mod 2 = Arow mod 2)

Aztán kitölti a sakk

Bear CML
de gombokkal lehet rám táblázat után töltjük

és mit?
Ön azt (a táblázatot) nem lehet látni?

Bear CML
Látom, de az üres sejtek (zöld) bennük, bár hozzáteszem szöveg


> baziliszkusz # XA0; (05.04.11 14:12) [10]
>
> Bear malac
> És még?

A részletek a segítséget és a tanár.

> baziliszkusz # XA0; (05.04.11 14:19) [14]
>
> Bear CML
> De gombokkal lehet rám táblázat után töltjük

Kitöltése egy asztal és a rajz a saját ügyletek eltérő és független.

> Úgy tűnik számomra, úgy, ahogy van, kivéve ezt a feltételt (AcOI mod
> 2 = Arow mod 2)
>
> Aztán kitölti a sakk

Ehelyett helyezze be a feltétel: "ha (j = opt [i])." most ez a Button9Click, de kell lennie stDrawCell. Ősbemutatója Button9Click és színes készlet igaz. Ezután, ha szükséges, dolgozza át végezzük stDrawCell, amelyben meg kell vizsgálni, hogy a cellát kell díszíteni, és díszítjük.

Látom, de az üres sejtek (zöld) bennük, bár hozzáteszem szöveg

Minden, amit rajzolt - látod.
Minden dolog, amit nem készít - nem lehet látni.
Legalább nem kell látni a normális tudati állapot.

> Üres cella (zöld), bár már hozzá szöveget

Itt a következtetést a szöveget:

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; st.Cells [1, 1]: = "AAA";
# XA0; színes: = true;
# XA0; st.Refresh;
végén;

eljárás TForm1.stDrawCell (Sender: TObject; AcOI, Arow: egész;
# XA0; téglalap: TRect; Állam: TGridDrawState);
kezdődik
# XA0; ha (színes) és (AcOI mod 2 = Arow mod 2)
# XA0, majd st.Canvas.Brush.Color: = clWhite
# XA0; máshol st.Canvas.Brush.Color: = clBlack;

# XA0; st.Canvas.FillRect (téglalap);
# XA0; st.Canvas.TextRect (téglalap, Rect.Left, Rect.Top, st.Cells [AcOI, Arow]);
végén;

Még nélkül lehetséges „st.Canvas.FillRect (téglalap);”, hiszen TextRect saját háttér rajzol.

eljárás Tmain.stDrawCell (Sender: TObject; AcOI, Arow: egész;
# XA0; téglalap: TRect; Állam: TGridDrawState);
var i, j: integer;
kezdődik
i: = 0 st.RowCount-1 do
j: = 0 st.ColCount-1 do
kezdődik
ha (színes = igaz), és (J = opt [i]), majd # XA0; st.Canvas.Brush.Color: = clGreen
mást st.Canvas.Brush.Color: = clWhite;
st.Canvas.FillRect (téglalap);
st.Canvas.TextRect (téglalap, Rect.Left, Rect.Top, st.Cells [AcOI, Arow]);
végén;
végén;

eljárás Tmain.Button9Click (Sender: TObject);
var i, j: integer;
kezdődik
i: = 0 st.RowCount-1 do
j: = 0 st.ColCount-1 do
kezdődik
# XA0; st.Cells [j, i]: = floattostr (reshc [i, j]) + "" + floattostr (resht [i, j]);
# XA0; színes: = true;
# XA0; st.Refresh;
végén;

A szöveg látható, de a sejtek még minden festékek

> Az i: = 0 st.RowCount-1 do
> A J: = 0 st.ColCount-1 do

Ez a ciklus stDrawCell nincs szükség. stDrawCell minden sejt nevezzük, a koordinátákat a sejt amelyre ez volt az úgynevezett stDrawCell meg lehet tanulni, ha elolvassa a paramétereket és AcOI Arow. Ie belsejében stDrawCell kell díszíteni csak egy cella - koordinátákkal [AcOI; Arow]:

ha (színes = igaz), és (AcOI = opt [i]), majd # XA0; st.Canvas.Brush.Color: = clGreen
mást st.Canvas.Brush.Color: = clWhite;
st.Canvas.FillRect (téglalap);
st.Canvas.TextRect (téglalap, Rect.Left, Rect.Top, st.Cells [AcOI, Arow]);

Miért ez a hülye kétkörös belül a festék esemény?

ha (színes = igaz), és (AcOI = opt [i]), majd # XA0; st.Canvas.Brush.Color: = clGreen

Köszönöm minden))))

Kapcsolódó cikkek