AGB  ·  Datenschutz  ·  Impressum  







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

drawgrid langsam

Ein Thema von Mr. Pink · begonnen am 14. Aug 2007 · letzter Beitrag vom 14. Aug 2007
Antwort Antwort
Mr. Pink

Registriert seit: 30. Jan 2006
72 Beiträge
 
#1

drawgrid langsam

  Alt 14. Aug 2007, 15:20
hi leutz,

habe mal was mit dem drawgrid programmiert und zwar soll nen [0..99,0..99]-array of boolean farblich auf das drawgrid übertragen werden, dass auch 100x100 groß ist.
Delphi-Quellcode:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if feld[acol,arow] then
    drawgrid1.canvas.brush.color := clblack
  else
    drawgrid1.canvas.brush.color := clwhite;
  drawgrid1.canvas.fillrect(rect);
end;
so funzt auch alles super, allerdings wird das feld kontinuirlich verändert, und am besten wäre es, wenn man jede änderung sofort sehen könnte. hba das ganze dann per drawgrid1.refresh gemacht, also dass das nach jeder änderung aufgerufen wird, allerdings ist das ganze sehr langsam.
es wird immer nur ein feld verändert - gibt es da eine möglichkeit, dass dann auch nur dieses eine feld, von dem ich natürlich die koordinaten habe, in drawgrid verändert wird?

danke schon mal
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: drawgrid langsam

  Alt 14. Aug 2007, 15:57
Hallo,

ich habe eine ältere Routine mal etwas poliert:

Delphi-Quellcode:
procedure InvalidateGridCell (aGrid: TCustomDrawGrid; aCol, aRow: Integer);
var
  R : TRect;
begin
  R := aGrid.CellRect(aCol, aRow);
  InvalidateRect(aGrid.Handle, @R, False);
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: drawgrid langsam

  Alt 14. Aug 2007, 16:05
Mit with ... do lässt sich das etwas beschleunigen:
Delphi-Quellcode:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with drawgrid1.canvas do
  begin
    if feld[acol,arow] then
      brush.color := clblack
    else
      brush.color := clwhite;
    fillrect(rect);
  end;
end;
aber ich denke dein Flaschenhals liegt eher an anderer Stelle.
Versuch mal, nach jeder Änderung an feld[] die Methode Drawgrid1.Invalidate aufzurufen.
Das Drawgrid wird dann nicht sofort neu gezeichnet, sondern nur dann wenn Windows
Zeit hat die Windows Botschaften abzuarbeiten.
Das bedeutet, dass sich durchaus mehrere feld[] Werte ändern können, bis neu gezeichnet wird,
aber dafür ruckelt und flackert nichts.
Andreas
  Mit Zitat antworten Zitat
Mr. Pink

Registriert seit: 30. Jan 2006
72 Beiträge
 
#4

Re: drawgrid langsam

  Alt 14. Aug 2007, 16:21
hi, danke für die antworten, allerdings peil ich die InvalidateGridCell-prcedure nicht ganz:
was muss ich denn bei aGrid übergeben? das drawgrid ist es ja ncih, funzt zumindest nicht bei mir...
verstehe auch nciht ganz wie das ganze funktionieren soll, hab allerdings auch keine wirkliche ahnung von delphi... und solange es funktionieren würde wärs ja auch ok

drawgrid1.invalidate ist denk ich für meine zwecke nicht so geeignet, da es in dem prog. eigtl einzig und allein um das feld geht, das ununterbrochen per schleife verändert wird, sodass entweder wieder nur alles am schluss angezeigt wird (was ich ja eben nicht will), oder, wenn ich application.processmessages
dazupacke, es genauso langsam ist. wie mit refresh....

trotzdem danke, vllt kann mir ja doch noch wer helfen ,)
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: drawgrid langsam

  Alt 14. Aug 2007, 16:39
Ich habe hier gerade mal einen Test mit einem 100 * 100 DrawGrid + Timer gemacht:
In 10 Sekunden habe ich 310 mal den Inhalt geändert und gezeichnet
Das sind 31 Änderungen pro Sekunde.
Also mein Auge kann den Änderungen nicht folgen; es "wusselt" nur so.
Andreas
  Mit Zitat antworten Zitat
Mr. Pink

Registriert seit: 30. Jan 2006
72 Beiträge
 
#6

Re: drawgrid langsam

  Alt 14. Aug 2007, 16:53
also ich brauche 4-5 mal so lange. entweder liegt es am restlichen code oder mein pc ist zu langsam^^ (p4, 2,5 ghz).

ich aknn ja mal den restlichen relevanten code posten (geht übrigens hierdrum:
Delphi-Quellcode:
procedure vor(x,y,r:integer);
begin
  for i:=1 to ende do
  begin
    if feld[x,y] then
    begin
      feld[x,y]:=false;
      if r<>1 then
        r:=r-1
      else
        r:=4;
    end
    else
    begin
      feld[x,y]:=true;
      if r<>4 then
        r:=r+1
      else
        r:=1;
    end;
    form1.drawgrid1.Refresh;
    {form1.Label2.Caption:='aktuell: '+inttostr(i);
     application.ProcessMessages;}

////////////////////////////////////////////////////////////////////////////////
    begin
      if r=1 then
      begin
        if y>=1 then
        y:=y-1
      else
        y:=99;
      end;
      if r=2 then
      begin
        if x<=98 then
          x:=x+1
        else
          x:=0;
      end;
      if r=3 then
      begin
        if y<=98 then
          y:=y+1
        else
          y:=0
      end;
      if r=4 then
      begin
        if x>=1 then
          x:=x-1
        else
          x:=99;
      end;
      end;
  end;
end;
jaa, ich weiß, is scheiße programmiert, aber ich wollts ja eigtl auch nicht veröffentlichen.

liegts denn iwie an dem code, dass es so langsam ist?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: drawgrid langsam

  Alt 14. Aug 2007, 17:16
Zitat von Mr. Pink:
also ich brauche 4-5 mal so lange. entweder liegt es am restlichen code oder mein pc ist zu langsam^^ (p4, 2,5 ghz).
P4 - 2.8 Ghz, also vergleichbar
Zitat von Mr. Pink:
jaa, ich weiß, is scheiße programmiert, aber ich wollts ja eigtl auch nicht veröffentlichen.
Mach doch ein schönes Open Source Projekt draus, dann lässt sich die Geschwindigkeit direkt vergleichen.
Andreas
  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 11:14 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