Einzelnen Beitrag anzeigen

Hallo_Thomas

Registriert seit: 18. Apr 2005
Ort: Dresden
405 Beiträge
 
Delphi 2005 Professional
 
#1

Performance bei vielen Images & Auflösung

  Alt 19. Mär 2006, 23:21
Hallo,

Ich habe ein Programm mit realiv vielen Images ,sobald ich ein onclick Ereignis auslöse, benötigt dies bei mir ca.15%-18% meiner CpuLeistung bei einer anderen Auflösung, und ca 5-8% bei gleicher Auflöung;
(Bei einem Normalen Buttonclick ohne alles 0-2%)

Ich hab rund 40 Images(BildGrösse ca. 3kb) die ich als Buttons nutze +120 Images(ohne Bild im folgenden Programm) die über den Buttons liegen mit je einem Label und ein Hintergrundimage(1MB).


So und Hier ein paar Zeilen aus meinem Programm,Oben ist der Code,der die Performance am meisten beeinflusst...usw.,zumindest nach meiner Meinung.


Welche möglichkeiten gibt es die CPU Auslastung zu senken?Für ein Onclick Ereignis?

Dies wird im FormCreate ausgelöst:
Delphi-Quellcode:
Procedure TForm1.Aufloesung;
var Breite,Hoehe,x,y: integer;
begin
  begin
// hoehe:=864;
// breite:=1152;
    hoehe:=800;
    breite:=1280;
    scaled := true;
    x:= Screen.width;
    y:= Screen.Height;
    if(y <> Hoehe) or (x <> Breite) then
    begin
      Form1.Height := (Form1.ClientHeight* y div Hoehe) + Form1.Height- Form1.ClientHeight;
      Form1.Width := (Form1.ClientWidth * x div Breite)+ Form1.Height - Form1.ClientHeight;
      scaleBy(x,Breite);
    end;
  end;
end;
So werden die Bilder für die Buttons geladen, Ein Bild für Down und eins für Up(BildGrösse ca. 3kb)
Delphi-Quellcode:
procedure TForm1.AllMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 itag:String;
begin
 iTag := IntToStr((Sender as TControl).Tag);
 (FindComponent('Image'+(iTag)) as TImage).Picture.Assign(Buttonx[(Sender as TImage).Tag]);
end;

Damit die Imagebuttons regieren, wenn die Labels mit Buttons drüber liegen:
Delphi-Quellcode:
procedure TForm1.LabelsOnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  i: Integer;
  iString:String;
  S:Timage;
begin
  for i := 1 to 39 do
  begin
    S:= (FindComponent('Image'+(iString)) as Timage) ;
    iString:=IntToStr(i);
    if S is TImage then
    begin
      with S do
        if PtInRect(Rect(0, 0, Width, Height), ScreenToClient(Mouse.CursorPos)) then
        begin
          OnMouseUp(S, Button, Shift, X, Y);
        end;
    end;
  end;
end;
Miniaturansicht angehängter Grafiken
bild_115.jpg  
Angehängte Dateien
Dateityp: zip button_121.zip (88,3 KB, 9x aufgerufen)
  Mit Zitat antworten Zitat