DBGrid i niektóre rekordy w innych kolorach

Odpowiedz Nowy wątek
2006-08-30 15:46
0

Cześć, mam taki problem. Chcę w DBGridzie wyświetlić niektóre rekordy w innym kolorze niż inne. W zdarzeniu OnDrawColumnCell wpisałem kod:

if baseQuery.FieldByName('STAN_MAG').AsInteger<StrToInt(ReadSettings(LOW_CARGO)) then
     BaseGrid.Font.Color:=clRed else BaseGrid.Font.Color:=clBlack;

Chodzi o to, że jeśli wartość pola STAN_MAG danego rekordu jest mniejsza niż ta zaczytana z opcji to wtedy rekord ma się wyświetlić na czerwono.

I niby idzie, ale...

  1. Pierwsza kolumna danego rekordu jest na czarno(natomiast pierwsza kolumna następnego na czerwono)
  2. Program sprawia wrażenie zapętlenia.
    Jak to rozwiązać?

Pozostało 580 znaków

2006-08-30 16:03
0

DefaultDrawing = False

i w onDrawDataCell

  if (not (gdFocused in State)) and (not (gdSelected in State)) and (Field.FieldName = 'nazwa_pola_które_chcesz_kolorować') then
  begin
    if (Field.AsInteger > MIN) and (Field.AsInteger < MAX)then
    begin
      dbgrd1.Canvas.Brush.Color := clRed;
    end;
  end;
  dbgrd1.DefaultDrawDataCell(Rect, Field, State);

- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-30 16:21
0

OK, z tym, że teraz jest tak, że najpierw muszę kliknąć na Grida i dopiero wtedy pojawiają się kolory. Wcześniej wszystko jest czarne

Pozostało 580 znaków

2006-08-30 16:24
0

kod


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-30 16:34
0
Misiekd napisał(a)

kod

(w onDrawColumnCell. W helpie piszą, żeby nie pisać event handlerów dla onDrawDataCell)

if (not (gdFocused in State)) and (not (gdSelected in State)) then
  begin
    if baseQuery.FieldByName('STAN_MAG').AsInteger<StrToInt(ReadSettings(LOW_CARGO)) then
    begin
      BaseGrid.Canvas.Font.Color:=clRed;
    end;
  end;
  BaseGrid.DefaultDrawDataCell(Rect, Column.Field, State);

Pozostało 580 znaków

2006-08-30 16:53
0

cały, od procedure aż po end;


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-08-31 09:52
0
Misiekd napisał(a)

cały, od procedure aż po end;

No to jest cały :)
Zauważyłem, że jeśli w innym kolorze ma być ostatni wiersz, to wtedy jest ok. Jeśli jednak pierwszy, to trzeba najpierw kliknąć...

[dopisane]
Dobra już wiem. Ten cały warunek

if (not (gdFocused in State)) and (not (gdSelected in State)) then

jest niepotrzebny.

Pozostało 580 znaków

2006-08-31 11:39
0
Juhas napisał(a)

Dobra już wiem. Ten cały warunek

if (not (gdFocused in State)) and (not (gdSelected in State)) then

jest niepotrzebny.

to zobacz jak wygląda wiersz jak go zaznaczysz

a ten kod masz w onDrawColumnCell czy onDrawDataCell?


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-09-06 09:00
df
0

A ja to robię tak:

if Field.AsString='1' then  BaseGrid.Canvas.Font.Color:=clRed;
 
BaseGrid.DefaultDrawDataCell(Rect, Field, State);

tylko że wtedy koloruje mi się tylko komórka w której jest '1', a ja chciałbym żeby kolorował mi się cały wiersz w którym jest komórka z '1' w środku. Jak to zrobić?

Pozostało 580 znaków

2006-09-08 11:25
0
df napisał(a)

A ja to robię tak:

 
if Field.AsString='1' then  BaseGrid.Canvas.Font.Color:=clRed;

BaseGrid.DefaultDrawDataCell(Rect, Field, State);


> 
> tylko że wtedy koloruje mi się tylko komórka w której jest '1', a ja chciałbym żeby kolorował mi się cały wiersz w którym jest komórka z '1' w środku. Jak to zrobić?

Nie porównuj fielda, tylko jakieś Query(ADOQuery, IBQuery, czy coś co używasz)
(QUery.FieldByName()...)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0