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 schneller Ersatz für timage (https://www.delphipraxis.net/132500-schneller-ersatz-fuer-timage.html)

R2009 14. Apr 2009 08:38


schneller Ersatz für timage
 
Hallo DP'ler,

gibt es einen schnellen Ersatz für Timage? Ich muss ein Icon(bmp)-array auf einer Form darstellen.
Alles was ich eigentlich brauche ist eine Komponente in der eine Bitmap dargestellt werden kann und
das ich anklicken kann. Die unten angegebene Routine braucht für breite=38 und hoehe=28 ca 20sec.
timage_ext ist ein Nachfolger von timage mit 2 Integervariablen zusätzlich. Der Zeitbedarf zwischen
meiner Komponente und timage unterscheidet sich überhaupt nicht.

Delphi-Quellcode:
  setlength(bmdraw,breite,hoehe);
  for n := 0 to breite-1 do
    for m := 0 to hoehe-1 do
    begin
      bmdraw[n,m]:=timage_ext.create(self);
      bmdraw[n,m].Parent:=Form2;
      bmdraw[n,m].Picture.Bitmap.Width:=22;
      bmdraw[n,m].Picture.Bitmap.height:=22;
      bmdraw[n,m].Top:=2;
      Bm.Imagelist1.GetBitmap(0, bmdraw[n,m].Picture.Bitmap);
      bmdraw[n,m].Left:=n*23;
      bmdraw[n,m].top:=m*23;
      bmdraw[n,m].OnMouseDown:=FormMouseDown;
      bmdraw[n,m].ext_x:=n;
      bmdraw[n,m].ext_y:=m;
    end;
Vielen dank im Vorraus!

mkinzler 14. Apr 2009 08:48

Re: schneller Ersatz für timage
 
Schau dir mal Graphics32 an

R2009 14. Apr 2009 09:24

Re: schneller Ersatz für timage
 
Hallo mkinzler,

danke für deinen Tip, habs ausprobiert ist eher noch langsamer.
Das Problem scheint die parent-Zuweisung zu sein.

Delphi-Quellcode:
  setlength(bmdraw,breite,hoehe);
  for n := 0 to breite-1 do
    for m := 0 to hoehe-1 do
    begin
      bmdraw[n,m]:=timage_ext.create(self);
      //bmdraw[n,m].Parent:=Gleisbild; //langsame Version
      bmdraw[n,m].Picture.Bitmap.Width:=22;
      bmdraw[n,m].Picture.Bitmap.height:=22;
      bmdraw[n,m].Top:=2;
      Bm.Schienen.GetBitmap(0, bmdraw[n,m].Picture.Bitmap);
      bmdraw[n,m].Left:=n*23;
      bmdraw[n,m].top:=m*23;
      bmdraw[n,m].OnMouseDown:=FormMouseDown;
      bmdraw[n,m].ext_x:=n;
      bmdraw[n,m].ext_y:=m;
      bmdraw[n,m].Parent:=Gleisbild; //schnelle Version
    end;
Ich habe die parent Anweisung ans Ende des Codes geschrieben und jetzt funktioniert das Ganz innerhalb von 1 sec.
Warum ist mir allerdings unklar. Kann es sein, dass die Bitmap danach (nach parent) bei jeder Änderung neu gezeichnet werden muss?

Vielen Dank!


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