![]() |
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:
Was mache ich falsch? :?:
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; Grüsse, Ramses |
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:
Hoffe das hilft ein wenig.
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; Ciao Marco |
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 |
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 22:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz