Code:
procedure TfrmQuali.grdQLeistungenDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var farbe : tcolor;
begin
with (Sender as TDBGrid), Canvas do begin
farbe := clwindow;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'E' then farbe := clwindow;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'K' then farbe := $000674E1;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'L' then farbe := clsilver;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'N' then farbe := $0001D2F8;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'Q' then farbe := $0071AE78;
if dmContainer.sqlQualiL.FieldByName('qs_status').AsString = 'N/A' then farbe := clred;
if erstesauslesenQ then
begin
Font.Color := clWindowtext;
brush.Color := farbe;
if column.Index = 9 then erstesauslesenQ := false;
end else
begin
if (gdselected in state) then
begin
Font.Color := clHighlightText;
Brush.Color := clActiveCaption;
end else
begin
font.Color := clwindowtext;
Brush.Color:= farbe;
end;
end;
Fillrect(rect);
DefaultDrawColumnCell(rect, DataCol, Column, State);
end;
end;
Folgendes Problem:
Bei einem DBGrid ohne OnDrawColumnCell-Ereignis funktioniert ein Multiselect ohne weitere Probleme. Bei meiner obig verwendeten Variante (die für die Farbgebung notwendig ist) zeichnet er die Zeile in den SelectedRows nicht mehr in der Markiert-Farbe.
Hat jemand alternative Vorschläge wie man dieses Problem lösen könnte, oder wie ich feststelle ob die aktuelle Zeile in den Selectedrows enthalten ist, ohne den aktuellen fokus zu verlieren?
Danke Freaggle
P.S.: gdselect ist wohl nur bei aktuellem Fokus im State enthalten