Delphi-PRAXiS
Seite 1 von 2  1 2      

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 schnelles Anzeigen von SpeedButtons (https://www.delphipraxis.net/9317-schnelles-anzeigen-von-speedbuttons.html)

Mario 23. Sep 2003 19:33


schnelles Anzeigen von SpeedButtons
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe ein Formular, welches große teilweise deaktivierte Speedbuttons mit Grafiken enthält. Wenn diese Formular angezeigt wird, so ist gerade auf Rechnern mit Grafikkarte (Matrox und Ati getestet) der Aufbau sehr langsam. Auf einem Rechner mit Intel 815-Grafik war der Effekt nicht sichtbar.

Wenn ich das Formular nun im Speicher lasse und nur immer wieder anzeige, geht der Aufbau immer schnell. Ich habe mal ein kleines Beispiel gemacht, anbei.

Was mir noch auffiel: Wenn ich alle Speedbuttons deaktiviere, ist der Effekt besonders stark sichtbar, es braucht auf einem Athlon 1800 mit Matrox MGA 400 auf Windows XP über eine Sekunde zum Einblenden der 25 Speedbuttons.

Hat jemand eine Idee, was ich dagegen machen kann, ausser das Formular permanent im Speicher lassen?

SleepyMaster 23. Sep 2003 21:47

Re: schnelles Anzeigen von SpeedButtons
 
Also ich muss sagen, dass ich keine Probleme hab!

(XP2800+, 1GB-Ram, GeForce4 Ti 4800) //angeb angeb :D

eddy 23. Sep 2003 22:26

Re: schnelles Anzeigen von SpeedButtons
 
Hallo Mario,

habe Deine Buttons statisch und dynamisch probiert. Kein Unterschied in der Darstellungsgeschwindigkeit erkennbar.

Verwendet: XP2700+ auf Asrock-Mainboard K7S8X mit 512 MB RAM, 64 MB GF4 MX440

Versuch's doch mal mit einer anderen Grafikkarte auf Deinem Board bzw. Deine Grafikkarte auf einem anderen Board. Vielleicht läßt sich das Problem dann klären.

mfg
eddy

LoL 24. Sep 2003 07:23

Re: schnelles Anzeigen von SpeedButtons
 
hi

also ich kann mario zustimmen wenn man nur einen 1800 hat denn lässt sich da schon was erkennen! aber warum weis ich auch nicht

Mario 24. Sep 2003 07:33

Re: schnelles Anzeigen von SpeedButtons
 
Ich habe es mir gerade mal auf dem PIII600 meiner Frau angeschaut (SIS Grafikkarte mit 4MB :lol: )

... nicht zum Aushalten. Das komische ist, dass es auf meinem PIII 1000 mit onBoard Intel-Grafik gar keine Verzögerung zu erkennen ist.

Ich denke also mal, dass es mit einigen Treiber schlechter und mit einige besser klappt. Da wir uns aber unsere Kunden nicht aussuchen können, wäre es natürlich schön, wenn ich es auf allen Rechnern flüssig bekomme!

Noch mal zum Rechner mit 4MB Grafik. Wenn ich da statisch wähle, also das Form nicht mehr frei gebe, ist der zweite Aufruf flüssig! Wenn ich jetzt wüßte, wie ich sagen könnte: "Initialisiere Dich fix und fertig, so wie Du es nach OnShow machst", wäre mir schon sehr geholfen.

r_kerber 24. Sep 2003 07:44

Re: schnelles Anzeigen von SpeedButtons
 
Hallo Mario,

P3 600, 512 MByte Ram, Matrox Millenium G450 AGP, 16 MByte, NT 4.0 SP6: nur kurze Verzögerung beim Formularaufbau (ca 1-2 sec.)

Mario 24. Sep 2003 07:58

Re: schnelles Anzeigen von SpeedButtons
 
Jetzt habe ich es geknackt :firejump:

Also, an der Ladezeit lässt sich nix drehen, aber die Ladezeit kann ich fast vollständig ins OnCreate verlagern, also in den nichtvisuelle Teil!

Dazu muss ich nur die Routine Loaded der Buttons nach dem Laden der Grafik aufrufen, damit die Glyphs initialisiert werden. Da diese ja aber private ist, muss halt ein kleiner Trick herhalten:

Delphi-Quellcode:
interface

...

type
  TWorkSpeedButton = class(TSpeedButton)
  end;

...

implementation

...

procedure LoadGrafik(aButton: TSpeedButton);
var Rect: TRect;
begin
  aButton.Glyph.LoadFromFile('test.bmp');
  TWorkSpeedButton(aButton).Loaded;
end;
Dann ist der eigentliche Bildschirmaufbau sogar auf einem 600er flüssig.

Nalincah 24. Sep 2003 07:59

Re: schnelles Anzeigen von SpeedButtons
 
Versuch doch mal den Quelltext

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
begin
  LoadGrafik(SpeedButton1);
  LoadGrafik(SpeedButton2);
  LoadGrafik(SpeedButton3);
  LoadGrafik(SpeedButton4);
  LoadGrafik(SpeedButton5);
  LoadGrafik(SpeedButton6);
  LoadGrafik(SpeedButton7);
  LoadGrafik(SpeedButton8);
  LoadGrafik(SpeedButton9);
  LoadGrafik(SpeedButton10);
  LoadGrafik(SpeedButton11);
  LoadGrafik(SpeedButton12);
  LoadGrafik(SpeedButton13);
  LoadGrafik(SpeedButton14);
  LoadGrafik(SpeedButton15);
  LoadGrafik(SpeedButton16);
  LoadGrafik(SpeedButton17);
  LoadGrafik(SpeedButton18);
  LoadGrafik(SpeedButton19);
  LoadGrafik(SpeedButton20);
  LoadGrafik(SpeedButton21);
  LoadGrafik(SpeedButton22);
  LoadGrafik(SpeedButton23);
  LoadGrafik(SpeedButton24);
end;
So umzuschreiben:

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var
  i : integer;
begin
  for i := 1 to 24 do
  begin
    LoadGrafik(Form2.FindComponent('Speedbutton' + i);
  end;
end;

Mario 24. Sep 2003 08:05

Re: schnelles Anzeigen von SpeedButtons
 
@Sebastian: Das war nur eine Demo, der tatsächliche Source ist schon so ähnlich :wink:

Nalincah 24. Sep 2003 08:31

Re: schnelles Anzeigen von SpeedButtons
 
Achso...Konnt ich ja nicht wissen. Oder stand das irgendwo schon?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:49 Uhr.
Seite 1 von 2  1 2      

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