Einzelnen Beitrag anzeigen

freaggle

Registriert seit: 20. Okt 2003
4 Beiträge
 
#1

TDBGrid - OnDrawColumnCell - Multiselect funktioniert nicht

  Alt 23. Okt 2003, 10:13
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
  Mit Zitat antworten Zitat