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
Dosyć prosto coś takiego można wykonać. O ile dobrze rozumiem coś takiego powinno zadziałać https://stackoverflow.com/questions/16800103/change-dbgrid-row-color-on-field-value-in-delphi
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;
Dobrze pomyśleć o mouse down mouse up, żeby ładnie to wyglądało.
@Paweł Dmitruk: niestety nie zadziałało
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;
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:
Niestety w chwili uruchamiania programy wyskakują błędy jak w załączonym zrzucie ekranu
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.
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ę
Taka mała wskazówka — jeśli potrzebujecie Sender
a zrzutować na konkretną klasę i użyć go w wielu miejscach danego bloku kodu, to na litość boską wykonajcie rzutowanie raz, zapiszcie referencję do typowanej zmiennej i jej używajcie. A jeśli Sender
zawsze zawiera referencję konkretnej (spodziewanej) klasy, to nie róbcie rzutowania, a skorzystajcie z absolute
i podłączcie zmienną pod argument metody.
Dzięki temu kod będzie krótszy i łatwiejszy w zrozumieniu, bez mnóstwa nawiasów.
Czy móby mi pan pamóć by na wydruku wiersze z typ_dnia (Nie, Sob) tez był wyróżniony innym kolorem. Korzysta z FastREport. Z góry dziękuje
januszp napisał(a):
Czy móby mi pan pamóć by na wydruku wiersze z typ_dnia (Nie, Sob) tez był wyróżniony innym kolorem. Korzysta z FastREport. Z góry dziękuje
https://www.fast-report.com/documentation/UserMan/index.html?conditional_highlighting.htm
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.