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 Dbgrid: Zelle flimmert (https://www.delphipraxis.net/92559-dbgrid-zelle-flimmert.html)

bwolf 22. Mai 2007 10:57


Dbgrid: Zelle flimmert
 
Hi all,

ich hab da grad was seltsames in meinem (TJV)DbGrid:

Ich setze eine bestimmte Zelle Readonly:

Delphi-Quellcode:
procedure Tfrm_essenserfassung.dbgrid_uebersichtDrawColumnCell(
  Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if DataCol = 2 then //2nd column is 'Anzahl Essen'
  begin
    // Abgerechnete Datensätze sperren...
    if q_erfassung.FieldByName('abgerechnet').AsString = 'True' then
      Column.ReadOnly := true
   else
      Column.ReadOnly := false;
  end;
end;
Allerdings habe ich dann das Problem, das die Spalte 'Anzahl Essen' flimmert...schwer zu beschreiben, sieht so aus als ob die Zelle nonstop aktualisiert würde.
Wenn ich den obigen Code rausnehme und die Zelle nicht auf readonly setze, sieht es normal aus.

Hat jemand ne Idee was das sein könnte ??

Danke schonmal,
gruß ben

Bernhard Geyer 22. Mai 2007 11:00

Re: Dbgrid: Zelle flimmer
 
Du setzt die gesamte Spalte auf Readonly und nicht nur die aktuelle Zelle!

bwolf 22. Mai 2007 11:10

Re: Dbgrid: Zelle flimmer
 
Stimmt, danke... Aber liegt daran die Sache mit dem Flimmern?
Und wie kann ich eigentlich eine einzelne Zelle(oder Zeile) read-only setzen ?

QuickAndDirty 22. Mai 2007 11:18

Re: Dbgrid: Zelle flimmer
 
Kann sein das das setzen von Readonly das erneute Zeichnen auslöst?
einfach debuggen gucken ob sowas wie invalidate, repaint, refresh etc augerufen wird.

bwolf 22. Mai 2007 12:18

Re: Dbgrid: Zelle flimmert
 
Keine Ahnung woran das liegt, bin jetzt einen andren weg gegangen.

Da ich ja eigentlich auch nur die aktuelle Zeile sperren will, wenn diese 'abgerechnet' ist, hab ich die Prüfung nun ins OnMouseDown implementiert.
Hät mich natürlich trotzdem interessiert, wie sowas zustande kommt...

shmia 22. Mai 2007 17:50

Re: Dbgrid: Zelle flimmert
 
Du darf Column.ReadOnly nur im Event [TDataSet].AfterScroll setzen.
Delphi-Quellcode:
DBGrid1.Columns[2].ReadOnly := Dataset.FieldByName('abgerechnet').AsBoolean;
Wenn das DBGrid gezeichnet wird, dann werden ja meist immer mehrere Records abgerufen.

Ach ja:
Delphi-Quellcode:
if q_erfassung.FieldByName('abgerechnet').AsString = 'True' then // schlecht, könnte bei deutschem Delphi auch "Wahr" sein !
if q_erfassung.FieldByName('abgerechnet').AsBoolean then         // Richtig !


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 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