SOLVED - DBGrid und Farben

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

SOLVED - DBGrid und Farben

Beitrag von Bernie110 »

Hallo Zusammen,

das DBGrid + Farbgebung macht mir zuschaffen.
Ich möchte meinem DB Grid verschiedene Farben zuordnen. Zum einen soll der User einigen Felder via Datenbank verschiedene Farben zuteilen können.
Diese Farben hinterlege ich in Textfeldern in der DB.
Zudem möchte ich 2 Felder in einer Spalte angezeigt bekommen...
Im Netz komme ich mal wieder nicht weiter.... dieses DBGrid macht mich fertig :mrgreen:

Hier mal mein Code... die Farben von den SQl Feldern werden richtig angezeigt.
Das mit den 2 Feldern in einem Column funzt nicht.
Zudem stelle ich mir vor, dass wenn das Grid keinen Focus hat, die Row nicht selected angezeigt wird.

Code: Alles auswählen

procedure TFrm_Stamm_Abteilung.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
    with (Sender as TDBGrid) do
          begin
            if (gdSelected in State) then
            begin
              Canvas.Brush.Color := clyellow; //Farbe bei selected
              Canvas.Font.Color := clBlack;
 
              DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
            end
          else
            begin
                Canvas.Brush.Color := clWhite; //Farbe bei selected
                Canvas.Font.Color := clBlack;
 
                 If Column.Index = 0 then  // Zelle 1
                 begin
 
                  Canvas.Brush.Color := ClBlack;
                  Canvas.Font.Color  := ClWhite;
                 end;
             end;
                 If Column.Index = 1 then // Zelle 2
                 begin
                  with dbgrid1.canvas do
                        begin
                          fillRect(rect);
                          Textout(Rect.left + 2 ,Rect.top, DBGrid1.DataSource.Dataset.fieldbyName('ABT_Name').asString);
                          Textout(Rect.left + 2, Rect.Top + 2, DBGrid1.DataSource.DataSet.FieldbyName('ABT_Beschreibung').asString);
                        end;
 
                  if (DataSource.DataSet.FieldByName('BACKColor').AsString) <> '' then
                    begin
                      Canvas.Brush.Color := StringToColor(DataSource.DataSet.FieldByName('BACKColor').AsString);
                      Canvas.Font.Color  := StringToColor(DataSource.DataSet.FieldByName('FONTColor').AsString);
                    end;
                 end;
                 If Column.Index = 2 then // Zelle 3
                 begin
                  if (DataSource.DataSet.FieldByName('BACKColor').AsString) <> '' then
                    begin
                     Canvas.Brush.Color := StringToColor(DataSource.DataSet.FieldByName('BACKColor').AsString);
                     Canvas.Font.Color  := StringToColor(DataSource.DataSet.FieldByName('FONTColor').AsString);
                    end;
                 end;
 
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString); //Denn Text in der Zelle ausgeben
 
        end;


Vll hat jemand einen Tip oder einen Link zu einem DBGrid Farbtut...hab echt null Plan
Danke vorab für eure Hilfe
Lg Bernie
Zuletzt geändert von Bernie110 am Mi 22. Apr 2020, 09:34, insgesamt 1-mal geändert.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid und Farben

Beitrag von wp_xyz »

Nur wegen Farben lohnt es sich nicht, mit OnDrawcolumnCell die ganze Zelle selbst zu zeichnen. Ich nehme da immer OnPrepareCell. Wenn dieses Event aufgerufen wird, sind alle Farben und sonstigen Canvas-Eigenschaften schon gesetzt, und man hat hier die Möglichkeit, noch etwas zu ändern, bevor anschließend die Zelle gemalt wird.

Code: Alles auswählen

procedure TForm1.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer; Column: TColumn; AState: TGridDrawState);   

Details im angehängten Demo-Programm.

Um zwei Felder zu einem zu kombinieren, würde ich im Dataset ein berechnetes Feld anlegen, in dem die beiden Strings zusammengehängt werden. Aber für ein Beispiel ist es mir jetzt zu spät...
Dateianhänge
dbgrid_custom_colors.zip
(2.45 KiB) 126-mal heruntergeladen

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: DBGrid und Farben

Beitrag von Bernie110 »

Hallo wp_xyz jetzt hat es die ganzen Bling Bling Blings in Gang gesetzt. :mrgreen:
Damit komme ich erst einmal zurecht !!
Herzlichen Dank für deine Mühe ! Hab verstanden !
Lg Bernie

Antworten