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 StringGrid, OnDrawCell übermalt meine Bilder beim scrollen (https://www.delphipraxis.net/96155-stringgrid-ondrawcell-uebermalt-meine-bilder-beim-scrollen.html)

Lun 19. Jul 2007 14:28


StringGrid, OnDrawCell übermalt meine Bilder beim scrollen
 
Hi @ll,

ich versuche in einem StringGrid verschiedene Bilder in unterschiedliche Zellen zu laden. Das funktioniert soweit auch ganz
gut mit der OnDrawCell Methode.
Das Problem ist wenn das StringGrid zu ende geladen ist und ich durch die Einträge
scrolle ändern sich die Bilder alle in das Bild was als letztes eingetragen wurde.

Ich habe das Gefühl, das beim selektieren/scrollen jedes mal die Funktion OndrawCell die Zeile neu zeichnet und er nimmt dann den
letzten Wert der globalen Variablen Bild(Integer) als Index von der ImageList und zeichnet das letzte bild.

Ich will nicht das er neu zeichnet *grummel* Die Liste soll nur einmal gezeichnet werden und kann angesehen werden, und gescrollt.

Ich suche schon irgendein Property das selektieren verhindert, weil ich vermute das durch das makieren der Zeile die OnDrawCell Methode aufgerufen wird ?

Hier mal der Code der OnDrawCell:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
zelle: string;

begin

  if ((ACol = 1) and (ARow > 1)) then
  with (Sender as TStringGrid) do
  begin
        ImageList1.Draw(Canvas, Rect.Left, Rect.Top, bild); //Bild ist eine globale Variable vom Typ integer
  end;

end;

greetz Lun

Thx for Help

Reinhard Kern 19. Jul 2007 15:09

Re: StringGrid, OnDrawCell übermalt meine Bilder beim scrol
 
Zitat:

Zitat von Lun
Hi @ll,

ich versuche in einem StringGrid verschiedene Bilder in unterschiedliche Zellen zu laden. Das funktioniert soweit auch ganz
gut mit der OnDrawCell Methode.
Das Problem ist wenn das StringGrid zu ende geladen ist und ich durch die Einträge
scrolle ändern sich die Bilder alle in das Bild was als letztes eingetragen wurde.

Ich habe das Gefühl, das beim selektieren/scrollen jedes mal die Funktion OndrawCell die Zeile neu zeichnet und er nimmt dann den
letzten Wert der globalen Variablen Bild(Integer) als Index von der ImageList und zeichnet das letzte bild.

Ich will nicht das er neu zeichnet *grummel* Die Liste soll nur einmal gezeichnet werden und kann angesehen werden, und gescrollt.

Ich suche schon irgendein Property das selektieren verhindert, weil ich vermute das durch das makieren der Zeile die OnDrawCell Methode aufgerufen wird ?

...
greetz Lun

Thx for Help

Hallo,

du hast keinen Einfluss darauf, wann Windows ein Neuzeichnen anfordert, du must also in allen Fällen, in denen du so etwas wie "Ownerdraw" verwendest, dafür sorgen, dass IMMER das richtige gezeichnet wird, nicht nur einmal!

Du must in diesem Fall also alle Bilder vorhalten und je nach Row/Col das richtige zeichnen.

Gruss Reinhard

Lun 19. Jul 2007 15:29

Re: StringGrid, OnDrawCell übermalt meine Bilder beim scrol
 
Danke Reinhard,

habe verstanden dachte das Event würde vom StringGrid ausgehen.
Dann weiß ich wie ich das lösen kann.

greetz Lun


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