DefaultDrawing:= False; //in den DBGrid-Eigenschaften
Im Ereignis OnDrawColumnCell findest Du dann alles was Du brauchst.
Hie mußt Du den 'State = []' auswerten und zwar beide Ereignisse, 'Selected und Focused'.
Natürlich mußt Du Dich nun selber um das zeichnen der Zelle kümmern.
Im Beispiel setze ich vor den selektierten Datensatz eine Bitmap aus der ToolbarImages,
da ich das Grid als Steuerelement für meine Datenbank benutze.
Ebenso setzt sich die Anzeige aus den Datenfeldern 'Name' und 'Vorname' und einer Einrückung zusammen.
Das ganze hat den zusätzlichen Vorteil das es auch bei gefilterten Datenmengen funktioniert, was über die RecNum
mit einem eingesetzten Filter nicht möglich ist.
Delphi-Quellcode:
procedure TForm1.OnDrawColumnCell(Sender: TDBGrid; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState; MyTable: TADOTable);
var
MyText : string;
bmpImage : TBitmap;
begin
if State = [gdSelected..gdFocused] then
begin
bmpImage := TBitmap.create;
ToolbarImages.GetBitmap(15,bmpImage);
Sender.Canvas.Font.Style:= [fsBold];
Sender.Canvas.FillRect(Rect);
MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
Sender.Canvas.TextRect(Rect,Rect.Left+16,Rect.Top+2,MyText);
Sender.Canvas.DrawFocusRect(Rect);
Sender.Canvas.Draw(1,1+Rect.Top,bmpImage);
bgLabel.Color:= Sender.Canvas.Brush.Color;
bmpImage.Free;
end
else begin
Sender.Canvas.Font.Style:= [];
Sender.Canvas.FillRect(Rect);
MyText:= ' '+ DataSource11.DataSet['Name']+ ', ' + DataSource11.DataSet['Vorname'];
Sender.Canvas.TextRect(Rect,Rect.Left,Rect.Top,MyText);
bgLabel.Color:= Sender.Canvas.Brush.Color;
end;
end;
Das Steuerelement siehst Du Links im Bild.
Datenbank-Bild
hoffe es hilft Dir.
mfg, silence