![]() |
Delphi-Version: 5
DrawGrid wird ständig neu geladen
Hallo,
ich habe folgendes Programm: • Ein 10 x 10 DrawGrid mit bmp's gefüllt. => 100 Bilder • Diese Bilder werden aus einem dynamischen Array geladen • Das Array ist zweidimensional und bildet quasi das DrawGrid ab. Quelltext:
Delphi-Quellcode:
Nun sind mir zwei Sachen aufgefallen, welche ich nicht verstehe: procedure TFrm_Main.DrwGrdDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var i, j, process: Integer; begin process:=0; writeln('--------------------'); { Wenn das dynamische Array erstellt wurde, dann zeichne den Inhalt davon } if Length(PlayingField)>0 then for I := 0 to 9 do for j := 0 to 9 do begin DrawGraphicFromArray(PlayingField[i,j], DrwGrd, i, j); inc(process); {um den Ladevorgang zu beobachten} writeln('Draw Grid wird geladen...'+IntToStr(process)); end; end; 1) Über der Variable "process" habe ich rausgefunden, dass statt einmal von 1-100, mehrmals von 1-100 geht. Eigentlich sollten es doch insgesamt 100 Ladevorgänge sein, da ich ja 100 Zellen habe. Ich hätte erwartet das ich auf der Konsolenanwendung einmalig die Liste 1-100 stehen hätte. 2) Wieso wird bei der Verschiebung der Form während der Laufzeit, das DrawGrid nochmal gezeichnet? Das hat zur Folge, dass ich wieder ca. 10 Sekunden warten muss um das Programm weiter zu bedienen. Denn solange das DrawGrid gezeichnet wird, kann man es nicht bedienen. Das ist alles Zeit die ich gerne sparen würde. |
AW: DrawGrid wird ständig neu geladen
Du bekommst die Parameter ACol, ARow nur diese Zelle soll zu diesem Zeitpunkt "bemalt" werden.
|
AW: DrawGrid wird ständig neu geladen
Das DrwGrdDrawCell ist das OnDrawCell des Grids?
Wenn ja: - Warum befüllst du es dort? - Beim Befüllen wird ja bestimme ein "Repaint" ausgelöst. OnDrawCell sagt ja "Diese Zelle sollst du ausgeben" und nichts Andertes, vorallem nicht irgendwelche Felder ändern ... das muß natülich in einer Art Endlosschleife enden. Das Wäre ja, wie wenn man im OnChange eines Memos immer ein Zeichen anhängen/ändern würde. |
AW: DrawGrid wird ständig neu geladen
Moin,
ich befülle es mittels dem OnDrawCell Ereignis, weil es in der Hilfe so beschrieben ist. Gibt es eine geeignetere Routine? Btw. es funktioniert jetzt auch, da ich glaube verstanden zu haben wie es funktioniert:
Delphi-Quellcode:
Im Endeffekt wird beim Erstellen des DrawGrids die Prozedur nicht nur einmal durchlaufen, sondern für jede Zelle. => Die Prozedur durchläuft von sich aus schon mindestens 100 mal da wir 100 Zellen haben.
{ Sobald das DrawGrid erstellt wurde, f¸lle es mit den Bilder }
procedure TFrm_Main.DrwGrdDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin if Length(PlayingField)>0 then begin DrawGraphicFromArray(PlayingField[ACol, ARow], DrwGrd, ACol, ARow); ProgressBar.StepBy(ACol); end; end; Also nutzen wir das doch aus und zeichnen mittels ACol und ARow. So funktioniert es jetzt, aber wenn du geeignetere Routinen hast wäre ich natürlich sehr dankbar!!! |
AW: DrawGrid wird ständig neu geladen
Ja eben, in der Hilfe steht doch eindeutig
Zitat:
![]() |
AW: DrawGrid wird ständig neu geladen
Huch da gab es wohl ein Fehler beim Copy&Paste.
Code:
Danke euch beiden.
http://docwiki.embarcadero.com/CodeExamples/XE2/en/OnDrawCell_(Delphi)
|
AW: DrawGrid wird ständig neu geladen
Du könntest ja mal verraten, was DrawGraphicFromArray überhaupt macht.
Ach ja, die ProgressBar kannst'e weglassen. So schnell wie das Grid gezeichnet werden sollte, hat die eh keine Gelegenheit sich zwischendurch zu aktualisieren, bzw. es kann eh Niemand so schnell gucken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 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