Ich habe Sharky's Code noch mal etwas abgeändert damit der den Farbcode aus der
SQL Abfrage verwendet (nicht Sharky... der Code
).
[Gedankenstütze]
SQL-Code:
SELECT Spalte1, Spalte2, 14588515 as 'Farbcode' FROM Table1
UNION ALL
SELECT Spalte1, Spalte2, 9816060 as 'Farbcode' FROM Table2
[/Gedankenstütze]
Delphi-Quellcode:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
with (Sender
as TDBGrid)
do
begin
// prüfen ob in der Wert im Feld Farbcode <>NULL ist
// Wenn ja, dann Farbe wählen. Wenn nicht, dann weiß.
// Die Prüfung ist bei dem o.a. SQL Befehl nicht unbedingt notwendig, da Farbcode nie NULL werden kann
// aber falls man mal auf reale Spalten zurückgreift muss er rein ...
if DataSource.DataSet.FieldByName('
Farbcode').AsVariant<>NULL
then
begin
Canvas.Brush.Color := DataSource.DataSet.FieldByName('
Farbcode').AsInteger;
// << hier an deine Query anpassen ...
end
else begin
Canvas.Brush.Color := clWhite;
end;
// Bei selektierten Feldern die Farbe nochmal ändern
if (gdSelected
in state)
then
begin
Canvas.Brush.Color := clHighlight;
//Farbe für die Zelle mit dem Focus
end;
// Zeichnen
Canvas.FillRect(Rect);
//Hintergrundfarbe zeichnen
Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, Column.Field.AsString);
//Den Text in der Zelle ausgeben
end;
end;
Mit dem Multiselect komme ich auch nicht weiter, da 'gdSelected' nur den AKTUELL selektierten Datensatz kennzeichnet (also fast nichts anderes als dgFocused).
Habe dir mal nen Screenshot von meinem Test mit rangehängt ...
Eventuell ist es ja das, was du suchst ...
Ich habe 3 Tabellen via UNION ALL in einer Abfrage zusammengefasst und in jedem SELECT virtuelle Spalte 'Farbcode' mit einem induviduellen Integerwert hinzugefügt.