DBGrid barva mreže

Vse kar vas zanima glede komponent.
Odgovori
biasko
Prispevkov: 390
Pridružen: 08.02.2004 18:28:09

DBGrid barva mreže

Odgovor Napisal/-a biasko » 17.03.2013 09:27:19

Živjo!


Že nakj časa iščem amapk brez uspeha.
Mreža oz. obroba celic je vedno temnejša od nastavljene barve DBgrida. Želim, da se mreža ne vidi, oz. se vidi le kjer imam belo polje.
Kako spremeniti barvo te mreže oz. črt?


Najlepša hvala!

Silver_War
Prispevkov: 664
Pridružen: 01.06.2004 14:50:41

Re: DBGrid barva mreže

Odgovor Napisal/-a Silver_War » 17.03.2013 19:49:52

Ko imaš DBGrid izbran imaš v Object Inspector-ju skupino lastnosti imenovano Options v kateri boš našel vse lastnosti, ki vplivajo na izris celic.

biasko
Prispevkov: 390
Pridružen: 08.02.2004 18:28:09

Re: DBGrid barva mreže

Odgovor Napisal/-a biasko » 17.03.2013 21:11:46

hja, to vem da se črte lahko izključi. Ampak ne želim tega. Želim le drugo barvo črt.

hvala!

riko
Prispevkov: 444
Pridružen: 25.02.2004 12:40:57

Re: DBGrid barva mreže

Odgovor Napisal/-a riko » 19.03.2013 10:07:26

Na OnDrawCell razširi kanvas in ga polij z barvo pa bo. :geek:

drago
Prispevkov: 48
Pridružen: 03.10.2007 19:23:48

Re: DBGrid barva mreže

Odgovor Napisal/-a drago » 19.03.2013 14:59:54

Če prav razumem problem bi rad spreminjal samo barvo mreže v DBgrid-u in to odvisno od vsebine celice.
Podoben problem sem reševal pred časom, pa nisem prišel do konca. Želel sem oblikovati celice glede na vsebino. Lokacijo, vsebino im lastnosti celice dobiš s parametri pri dogodku »OnDrawColumnCell«. Z barvanjem in fontom celice ni težav. Pri obrobi je pa malo drugače.
Načeloma lahko mrežo rišeš / barvaš tudi pri »OnDrawColumnCell«. Problem je le v tem, da vsaka črta mreže pripada dvema celicama ( navpično: levi in desni, vodoravno pa spodnji in zgornji celici).
Če vsaki celici narišeš drugačen okvir (barva, črta, debelina) ostanejo ustrezno pobarvane le zgornje in leve črte. Sklepam, da delphi celice riše od levega zgornjega vogala proti desnemu spornjemu vogalu. Tako z okvirjem vsake naslednje celice povozi spodnjo in desno črto sosednje oziroma zgornje celice.
Na tekočo celico se pri »OnDrawColumnCell« lahko sklicuješ, do sosednjih se pa nisem prebil.
Naredil sem pa takole:
- Na DBGrid-u sem izklopil mrežo
- Pri »OnDrawColumnCell« sem pa risal obrobo

Primer kode:

Koda: Izberi vse

                                                        // =========================================
                                                        // "DrawColumnCell" - oblikovanje celic v GRID-u
                                                        // =========================================
procedure FormX.DBGridDrawColumnCell(Sender:  TObject;
                               const Rect:    TRect;            // Lokacija celice
                                     DataCol: Integer;
                                     Column:  TColumn;
                                     State:   TGridDrawState);
begin

                                                        // DOLOČIM VRSTO ČRTE:
  TDBGrid(Sender).Canvas.Pen.Color   := clGreen;        // - Barva - predpostavljena
  TDBGrid(Sender).Canvas.Pen.Style   := psSolid;        // - Stil Črte
  TDBGrid(Sender).Canvas.Pen.Width   := 2;              // - Debelina črte ( 1 je premalo, ne riše)
  TDBGrid(Sender).Canvas.Pen.Mode    := pmCopy;         // - Uporavi barvo "..Pen.Color"

                                                        // VARIANTA 1 ( Cel okvir naenkrat )
                                                        // =========================================
                                                        // PRI POGOJU .... druga barva
  if (Column.Field.Text = 'N') or (Column.Field.Text = '0') then
    TDBGrid(Sender).Canvas.Pen.Color   := clRed;        // - Barva - drugačna
  TDBGrid(Sender).Canvas.Rectangle(Rect);               // NARIŠEM OKVIR CELICE
                                                        // =========================================

                                                        // VARIANTA 2 (Vsako črto posebej)
                                                        // =========================================
                                                        // PRI POGOJU .... druga barva
  if (Column.Field.Text = 'N') or (Column.Field.Text = '0') then
    TDBGrid(Sender).Canvas.Pen.Color   := clRed;        // - Barva - drugačna

    wPenPos  := TDBGrid(Sender).Canvas.PenPos;                          // Shranim PenPos

    TDBGrid(Sender).Canvas.PenPos := Rect.TopLeft;                      // Začetna točka okvirja
    if ....                                                             // Črta ZGORAJ:
      TDBGrid(Sender).Canvas.Pen.Color   := clMaroon;                   // - Barva zgoraj
    TDBGrid(Sender).Canvas.LineTo(Rect.Left+Rect.Right  ,Rect.Top);     // - Narišem črto zgoraj
    if ....                                                             // Črta DESNO:
      TDBGrid(Sender).Canvas.Pen.Color   := clPurple;                   // - Barva desno
    TDBGrid(Sender).Canvas.LineTo(Rect.Left+Rect.Right  ,Rect.Bottom);  // - Narišem črto desno
    if ....                                                             // Črta SPODAJ:
      TDBGrid(Sender).Canvas.Pen.Color   := clSkyBlue;                  // - Barva spodaj
    TDBGrid(Sender).Canvas.LineTo(Rect.Left             ,Rect.Bottom);  // - Narišem črto spodaj
    if ....                                                             // Črta LEVO:
      TDBGrid(Sender).Canvas.Pen.Color   := clYellow;                   // - Barva levo
    TDBGrid(Sender).Canvas.LineTo(Rect.Left             ,Rect.Top);     // - Narišem črto levo
    TDBGrid(Sender).Canvas.PenPos := wPenPos;                           // Vrnem PenPos
                                                        // =========================================
end;
IF ... zna biti kar kompliciran.
Če boš "našel" podatke sosednjih celic, ustrezno dopolni "IF ..." stavke.

biasko
Prispevkov: 390
Pridružen: 08.02.2004 18:28:09

Re: DBGrid barva mreže

Odgovor Napisal/-a biasko » 21.03.2013 22:44:09

E super hvala.

V bistvu rabim spremenit samo barvo črt - Pen za celo mrežo. Ne zanimajo me posamezna okna.
Mogoče veš kaj naredit če želiš črto debeline npr 5. Problem je ker se zožajo polja.

Hvala!

Odgovori