Kolorowanie wierszy w DBGrid

0

Witam, analizuję forum związane z moim problemem i nie znajduję działąjacego rozwiązania
Mój problem to:
chciałbym wyróżnik wiersze w wyświetlonym Dbgrid'zie (innym kolorem) przy założeniu, że w kolumnie typ_dbia mamy zapis "Nie' lub 'Sob'
dołączam zrzut ekranu z zawartością DBrida
za wszelką pomoc i wskazówki z góry dziękuje

ekran1.jpg

1

Dosyć prosto coś takiego można wykonać. O ile dobrze rozumiem coś takiego powinno zadziałać https://stackoverflow.com/que[...]olor-on-field-value-in-delphi

1
procedure TForm1.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer; Column: TColumn; AState: TGridDrawState);
begin
  if TDBGrid(Sender).DataSource.DataSet.FieldByName('typ_dnia').Text = 'Sob' then
    TDBGrid(Sender).Canvas.Brush.Color := clSilver;
  if TDBGrid(Sender).DataSource.DataSet.FieldByName('typ_dnia').Text = 'Nie' then
    TDBGrid(Sender).Canvas.Brush.Color := clRed;
end;  
0

Dobrze pomyśleć o mouse down mouse up, żeby ładnie to wyglądało.

0

@Paweł Dmitruk: niestety nie zadziałało

0

tu masz moje do kolorowanie komurek w zależności od ilości w jednej z nich. Co prawda, jest to bardzo stare i zamiast dbgrid używam smdbgrid od scalabium ale możesz to sobie przerobić dla swoich celów, lmX_do to jak można się domyśleć limity:

procedure Tmain.smdbgrd1GetCellParams(Sender: TObject; Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean);
begin
  if Assigned(Field) and (UpperCase(Field.FieldName) = 'ILOSC') then
  begin
    if Field.AsFloat < lm3_do then
    begin
      AFont.Style := [fsBold];
      Background := clRed;
    end
    else if Field.AsFloat < lm2_do then
    begin
      AFont.Style := [];
      Background := clYellow;
    end
    else if Field.AsFloat < lm1_do then
    begin
      AFont.Style := [];
      Background := clGreen;
    end
    else
    begin
      AFont.Style := [];
      Background := clWhite;
    end
  end
end;
2
januszp napisał(a):

@Paweł Dmitruk: niestety nie zadziałało

Zdefiniuj nie zadziałało. Jesteśmy na forum programistycznym i tutaj raczej opisujemy dokładnie problem i jego objawy. Na coś takiego można tylko odpisać SOA#1 ;)

Ale dobra żarty na bok. Wszedłeś w linka którego Ci podałem? Chyba nie, po z porównania kodów z linka oraz kolegi @Paweł Dmitruk zobaczyłbyś coś ciekawego. W dowód pokazuję screena:
screenshot-20210704185232.png

0

Niestety w chwili uruchamiania programy wyskakują błędy jak w załączonym zrzucie ekranu

Bez tytułu.png

0

Sender musi być rzutowane na DBGrid więc TDBGrid(Sender). dalej nie wiem czy akurat masz komponent DataSource3 czy wklejasz kod nie wiedząc z czym to się je. Nie kolor clWindows tylko clWindow tyle od razu widzę bez kompilatora.

0

Za zamieszanie przepraszam, po głębszej analizie znalazłem moje błędy i procedura już działa i to bardzo skutecznie. Za pomoc bardzo dziękuję

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