Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   DrawGrid wird ständig neu geladen (https://www.delphipraxis.net/171668-drawgrid-wird-staendig-neu-geladen.html)

Nathaniel 18. Nov 2012 11:34

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:

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;
Nun sind mir zwei Sachen aufgefallen, welche ich nicht verstehe:

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.

Bummi 18. Nov 2012 11:40

AW: DrawGrid wird ständig neu geladen
 
Du bekommst die Parameter ACol, ARow nur diese Zelle soll zu diesem Zeitpunkt "bemalt" werden.

himitsu 18. Nov 2012 11:49

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.

Nathaniel 18. Nov 2012 12:03

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:
{ 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;
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.
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!!!

Sir Rufo 18. Nov 2012 12:19

AW: DrawGrid wird ständig neu geladen
 
Ja eben, in der Hilfe steht doch eindeutig
Zitat:

Die Parameter Col und Row enthalten den Zeilen- und Spaltenindex der Zelle, die gezeichnet werden soll.
und dein Link passt nicht http://docwiki.embarcadero.com/Libra...rid.OnDrawCell

Nathaniel 18. Nov 2012 12:24

AW: DrawGrid wird ständig neu geladen
 
Huch da gab es wohl ein Fehler beim Copy&Paste.

Code:
http://docwiki.embarcadero.com/CodeExamples/XE2/en/OnDrawCell_(Delphi)
Danke euch beiden.

himitsu 18. Nov 2012 12:46

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:41 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