AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DrawGrid wird ständig neu geladen

Ein Thema von Nathaniel · begonnen am 18. Nov 2012 · letzter Beitrag vom 18. Nov 2012
Antwort Antwort
Nathaniel

Registriert seit: 17. Jun 2012
11 Beiträge
 
#1

DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 12:34
Delphi-Version: 5
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 12:40
Du bekommst die Parameter ACol, ARow nur diese Zelle soll zu diesem Zeitpunkt "bemalt" werden.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#3

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 12:49
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Nathaniel

Registriert seit: 17. Jun 2012
11 Beiträge
 
#4

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 13:03
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!!!
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 13:19
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Nathaniel

Registriert seit: 17. Jun 2012
11 Beiträge
 
#6

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 13:24
Huch da gab es wohl ein Fehler beim Copy&Paste.

Code:
http://docwiki.embarcadero.com/CodeExamples/XE2/en/OnDrawCell_(Delphi)
Danke euch beiden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#7

AW: DrawGrid wird ständig neu geladen

  Alt 18. Nov 2012, 13:46
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:23 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