AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ScrollBar und DrawGrid

Ein Thema von Texas · begonnen am 8. Mär 2007 · letzter Beitrag vom 11. Mär 2007
Antwort Antwort
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

ScrollBar und DrawGrid

  Alt 8. Mär 2007, 18:04
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
Angehängte Dateien
Dateityp: rar drawgrid_147.rar (155,8 KB, 3x aufgerufen)
Michael
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ScrollBar und DrawGrid

  Alt 8. Mär 2007, 18:41
Hi Michael,

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

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#3

Re: ScrollBar und DrawGrid

  Alt 8. Mär 2007, 18:48
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.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Texas

Registriert seit: 15. Jul 2005
Ort: Laatzen
56 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: ScrollBar und DrawGrid

  Alt 9. Mär 2007, 16:07
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.
Angehängte Dateien
Dateityp: rar grid_166.rar (5,2 KB, 6x aufgerufen)
Michael
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: ScrollBar und DrawGrid

  Alt 9. Mär 2007, 19:43
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
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: ScrollBar und DrawGrid

  Alt 11. Mär 2007, 11:11
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 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