Thema: Delphi dbgrid select

Einzelnen Beitrag anzeigen

rainer4you

Registriert seit: 19. Okt 2005
3 Beiträge
 
#8

Re: dbgrid select

  Alt 1. Dez 2005, 11:09
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
  Mit Zitat antworten Zitat