Einzelnen Beitrag anzeigen

rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: DBGrid - Option dgRowSelect vs dgEditing

  Alt 4. Jun 2021, 12:13
Hallo Roland,

Du kannst die Zeilen im DbGrid mit OnDrawDataCell beeinflussen - auch nach dem Inhalt eines Feldes - und das funktioniert auch beim Bewegen des Mauszeiges:

Delphi-Quellcode:
procedure TfrmMain.dbgKSuchDrawDataCell(Sender: TObject; const [Ref] Rect: TRect; Field: TField; State: TGridDrawState);
{-------------------------------------------------------------------------------
   bei einem Grid die Zeilen in Abhängigkeit eines
   Feldwertes farbig machen
-------------------------------------------------------------------------------}

var
   clNew         : TColor;
   clOld         : TColor;
begin
   // alte Farbe merken
   clOld         := TDBGrid(Sender).Canvas.Brush.Color;

   // neue Farbe in Abhängikeit des Wertes einstellen
   if qryKSuch.FieldByName('BEZ').AsString = '*** fehlt in Parametertabelle ***then begin
      clNew            := clRed;
   end
   else begin

      if qryKSuch.FieldByName('ART').AsString = 'Parameter 1then begin
         clNew         := clGreen;
      end
      else begin
         if qryKSuch.FieldByName('ART').AsString = 'Parameter 2then begin
            clNew      := clBlue;
         end
         else begin
            clNew      := clOld;
         end;
      end;
   end;

   // aktive Zeile anders zeichen
   with (Sender as TDBGrid) do begin
      if (gdSelected in State) then begin
         Canvas.Brush.Color   :=clSkyBlue; // Cursor-Farbe
         Canvas.Brush.Style   :=bsSolid;
         Canvas.Pen.Style      :=psclear;
         Canvas.FillRect(Rect);
      end
      else begin
         Canvas.Brush.Color   :=clNew;
         Canvas.Brush.Style   :=bsSolid;
         Canvas.Pen.Style      :=psclear;
         Canvas.FillRect(Rect);
      end;
   end;

  //Text (muss separat gezeichnet werden)
  TDBGrid(Sender).Canvas.Pen.Style      :=psSolid;
  TDBGrid(Sender).Canvas.Pen.Color      :=clBlack;
  TDBGrid(Sender).Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,Field.AsString);
End;
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat