![]() |
ScrollBar und DrawGrid
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Ich habe mal wieder eine Frage. wie bekomme ich ein DrawGrid dazu, das es nachdem man mit dem ScrlBar gescrollt hat es sich neu zeichnet (repaint). Ich habe das Problem das wenn eine Zeile nicht in voller höhe im Grid angezeigt wird der noch sichtbare Teil der Zelle in die darunterliegende Zelle gezeichnet wird. Nur wenn man nach unten scrollt Wenn ich einen BitBtn mit [Click] DrawGrid1.repaint; einfüge ist das DrawGrid wieder OK |
Re: ScrollBar und DrawGrid
Hi Michael,
vielleicht ist ein Repaint beim Ereignis OnTopLeftChanged() eine Lösung für dich? Freundliche Grüße |
Re: ScrollBar und DrawGrid
Hallo,
das Problem entsteht nicht nur beim Scrollen, sondern auch wenn das Grid durch ein anderes Fenster verdeckt war, oder das Anwendungsfenster verkleinert wird. Das Problem wird mit ziemlicher Sicherheit in Deinem Code zur Einfärbung der Zellen verursacht. Bei richtiger Nutzung des OnDrawCell-Eventhandlers wirst Du das Problem vermutlich nicht mehr haben, denn durch die Benutzung der Scrollbars wird, für die betreffenden Zellen, das OnDrawcell-Ereignis automatisch ausgelöst. Zeig doch mal Deinen Code zum Färben der Zellen, dann kann man vermutlich helfen. |
Re: ScrollBar und DrawGrid
Liste der Anhänge anzeigen (Anzahl: 1)
also das OnDrawcell-Ereignis wird irgendwie nicht richtig von Anfang an durchgeführt
wenn mann scrollt sondern nur für den Abschnitt der neu dazukommt. |
Re: ScrollBar und DrawGrid
Ich habe mir das Beispielprojekt angesehen und kann keinen Fehler im Code erkennen. Offensichtlich liegt eine falsche Erwartungshaltung vor. Das DrawGrid zeichnet nur die Teile neu, welche neu ins Bild gerollt werden. Abgesehen von kleineren Irritationen durch die Art der Farbbestimmung verhält sich das Grid korrekt. Auch die Effekte beim Überdecken des Fensters sind völlig in Ordnung. Ich bin nach wie vor der Meinung, dass mein Vorschlag in Beitrag #2 helfen könnte:
Delphi-Quellcode:
Freundliche Grüße
procedure TForm1.DrawGrid1TopLeftChanged(Sender: TObject);
begin with Sender as TDrawGrid do Invalidate; end; |
Re: ScrollBar und DrawGrid
Hallo,
die Darstellungsprobleme werden, wie marabu schon angedeutet hat, "durch die Art der Farbbestimmung" verursacht. Du legst innerhalb von OnDrawCell bei jedem Aufruf neue Farbwerte fest, hat das einen besonderen Grund? Legt man die per Random erzeugten Farbwerte z.B. in einem zusätzlichen Array ab, nutzt dieses dann in OnDrawCell, sind alle Probleme der Darstellung nicht mehr vorhanden.
Delphi-Quellcode:
public
MyColorArray : Array [0..19,0..19] of TColor; { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var c,r : Integer; begin Randomize; with Grid do for c := 0 to ColCount -1 do for r := 0 to RowCount -1 do MyColorArray[c,r] := Random(100000); end; procedure TForm1.GridDrawCell(Sender: TObject; aCol, aRow: Integer; Rect: TRect; State: TGridDrawState); begin with Grid.Canvas do begin Brush.Color := MyColorArray[aCol,aRow]; FillRect(Rect); TextOut(Rect.Left+3,Rect.Top+3,IntToStr(aCol)); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 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-2025 by Thomas Breitkreuz