Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDBGrid flackert bei DrawColumnCell (https://www.delphipraxis.net/17253-tdbgrid-flackert-bei-drawcolumncell.html)

Ramses 1. Mär 2004 22:12


TDBGrid flackert bei DrawColumnCell
 
Hallo zusammen.

Wenn ich das Ereignis onDrawColumnCell nutze um den Text in einer bestimmten Zelle zu verändern, flackert das Grid die gesamte Zeit. Sieht aus, als würde ich ständig ein Refesh auslösen.

als Beispiel:
Delphi-Quellcode:
procedure TfEventLog.dbgLogfileDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
 if DataCol = 1 then Column.Field.Text := '-> ' + Column.Field.Text;
end;
Was mache ich falsch? :?:


Grüsse,
Ramses

MarcoWarm 2. Mär 2004 05:48

Re: TDBGrid flackert bei DrawColumnCell
 
Hi Ramses,

dein Problem liegt in der Handhabung von OnDrawColumnCell. Das ist eigentlich ein Ereignis, bei dem Du direkt in das Zeichnen des Grids eingreifen kannst. Durch das ändern des FieldTextes wird die Methode jedoch erneut aufgerufen usw.

hier mal ein einfaches Beispiel, was Du mit der Methode machen kannst.

Delphi-Quellcode:
procedure TfEventLog.dbgLogfileDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
var
  s : string;
begin
  if DataCol = 1 then
  begin
    //neuen Text festlegen
    s:= '-> ' + Column.Field.Text;
    //den, vom System gezeichneten, Inhalt löschen
    dbgLogfile.Canvas.FillRect(Rect);
    //eigenen Text reinschreiben
    dbgLogfile.Canvas.TextRect(Rect,Rect.Left+4,Rect.Top+2,s);
  end;
end;
Hoffe das hilft ein wenig.

Ciao Marco

Ramses 2. Mär 2004 10:11

Re: TDBGrid flackert bei DrawColumnCell
 
Hi Marco.

Danke. Hat geholfen.
Ich dachte mir schon sowas, nur wusste ich nicht wie man es umgeht.


Gruss
Ramses

lucy 23. Nov 2022 18:14

AW: TDBGrid flackert bei DrawColumnCell
 
hallo, habe das gleiche Problem.

bei mir werden die Zeilen eingefärbt,
wenn ich jetzt ziemlich schnell mit der maus über die zeilen scrolle flackert es :-(

Delphi-Quellcode:
procedure TForm2.dbGridMonitordDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  Wert: String;
begin
  if (dbGridMonitord.DataSource.DataSet.RecordCount = 0) then
   begin
     dbGridMonitord.Visible := false;
    end else
     begin
  Wert := rettungsdienst.FieldByName('sub').Value;
  if Wert = '1' then begin
    dbGridMonitord.Canvas.Brush.Color := clgreen;
    dbGridMonitord.Canvas.Font.Color := clWhite;
  end else if Wert = '0' then begin
    dbGridMonitord.Canvas.Brush.Color := clFuchsia;
    dbGridMonitord.Canvas.Font.Color := clBlack;
  end else if Wert = '2' then begin
    dbGridMonitord.Canvas.Brush.Color := clHotLight;
    dbGridMonitord.Canvas.Font.Color := clWhite;
  end else if Wert = '3' then begin
    dbGridMonitord.Canvas.Brush.Color := clSilver;
    dbGridMonitord.Canvas.Font.Color := clGray;
  end else begin

  end;
  dbGRidMonitord.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz