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

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;
Danke vorab für eure Hilfe
Lg Bernie