Ž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!
DBGrid barva mreže
-
- Prispevkov: 664
- Pridružen: 01.06.2004 14:50:41
Re: DBGrid barva mreže
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.
Re: DBGrid barva mreže
hja, to vem da se črte lahko izključi. Ampak ne želim tega. Želim le drugo barvo črt.
hvala!
hvala!
Re: DBGrid barva mreže
Na OnDrawCell razširi kanvas in ga polij z barvo pa bo. 

Re: DBGrid barva mreže
Č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:
IF ... zna biti kar kompliciran.
Če boš "našel" podatke sosednjih celic, ustrezno dopolni "IF ..." stavke.
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;
Če boš "našel" podatke sosednjih celic, ustrezno dopolni "IF ..." stavke.
Re: DBGrid barva mreže
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!
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!