Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ScrollBar und DrawGrid (https://www.delphipraxis.net/88001-scrollbar-und-drawgrid.html)

Texas 8. Mär 2007 18:04


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

marabu 8. Mär 2007 18:41

Re: ScrollBar und DrawGrid
 
Hi Michael,

vielleicht ist ein Repaint beim Ereignis OnTopLeftChanged() eine Lösung für dich?

Freundliche Grüße

Lannes 8. Mär 2007 18:48

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.

Texas 9. Mär 2007 16:07

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.

marabu 9. Mär 2007 19:43

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:
procedure TForm1.DrawGrid1TopLeftChanged(Sender: TObject);
begin
  with Sender as TDrawGrid do
    Invalidate;
end;
Freundliche Grüße

Lannes 11. Mär 2007 11:11

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 01:48 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