AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE VirtualImageList ActionList in der IDE sehr Langsam
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualImageList ActionList in der IDE sehr Langsam

Ein Thema von Thomasl · begonnen am 25. Nov 2022 · letzter Beitrag vom 6. Dez 2022
Antwort Antwort
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
66 Beiträge
 
Delphi 11 Alexandria
 
#1

VirtualImageList ActionList in der IDE sehr Langsam

  Alt 25. Nov 2022, 12:11
Delphi Alexandria 11.2 Patch 1

Auf einem Form
ImageCollection
VirtualImageList
ActionList

alle miteinander verbunden
in der ImageCollection sind ca. 150 Bilder 64x64 Pixel als Png
Die VirtualImageList steht auf 32x32 Pixel bei 96DPI
Zur Laufzeit ist alles Normal/OK

Wenn man in der IDE die Actionlist öffnet, dauert das ca5-10Sec
Auch wenn man in der Actionlist von einer zur anderen Category wechselt dauert es..

ActionList ohne VirtualImageList läuft wieder normal, aber da hat man keine Icon Vorschau. Für uns keine Lösung wenn man da oft dran muss.
Mit der alten Imagelist wird die IDE nicht verzögert

Hat jemand ähnliches Festgestellt und eine Lösung?
Thomas Levering
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: VirtualImageList ActionList in der IDE sehr Langsam

  Alt 28. Nov 2022, 14:56
Es geht vermutlich flotter wenn die ImageCollection zu jedem der Bilder auch die 32x32 Version enthält...
Peter Below
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.833 Beiträge
 
Delphi 12 Athens
 
#3

AW: VirtualImageList ActionList in der IDE sehr Langsam

  Alt 28. Nov 2022, 19:30
Ja, das dürfte einiges ausmachen und wenn man in dem Formular mit der ActionList
nicht alle Images brauchen sollte die VirtualImageList dort nicht automatisch
befüllen lassen, sondern nur die reinnehmen, die man auch braucht.
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
66 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: VirtualImageList ActionList in der IDE sehr Langsam

  Alt 29. Nov 2022, 15:20
Wenn man nur wenige reinnimmt ist es schneller, das ist aber keine Option.


Ich habe es jetzt zuerst mal so gelöst, das ich eine 2. alte Imagelist hinzugefügt habe (z.B. 24x24 Pixel)
Diese ist nur mit der ActionList verknüpft. Die wird ja nur in der IDE benötigt/angezeigt.
An allen anderen stellen ist die neue VirtualImagelist verknüpft.

So bleibt die IDE schnell und das Programm sieht schön aus

Die alte TImageList dann
ColorDepth = cd32Bit
DrawingStyle = dsTransparent
Height = 24
Masked = False
Width = 24

und in einem Rutsch die gleichen 64x64 PNG´s da rein
Es müssen nur 32Bit PNG´s sein damit der Hintergrund nicht Schwarz angezeigt wird
Thomas Levering
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.833 Beiträge
 
Delphi 12 Athens
 
#5

AW: VirtualImageList ActionList in der IDE sehr Langsam

  Alt 29. Nov 2022, 16:29
Hast du auch mal probiert, was passiert wenn du in der Image Collection gleich 24x24 PNGs mit ablegst?
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
66 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: VirtualImageList ActionList in der IDE sehr Langsam

  Alt 6. Dez 2022, 14:05
An den Bildern in der Collection liegt es nicht,
mit diesem Code kann man Testweise das befüllen der TVirtualImageList zur Laufzeit mit verschiedenen Größen beschleunigen (Faktor 2),
ganz einfach indem das Fertig Skalierte Bild der Collection hinzugefügt wird.

Wenn man jetzt auch noch ganz viele Forms hat, gibt es noch andere Probleme, weil sehr viel Arbeitsspeicher verbraucht wird.
Ich habe das schon gelöst, dafür mache ich aber einen neuen Thread auf.

...
if not (csDesigning in ComponentState) then
begin
ImageCollectionSourceItem := Images[AIndex].SourceImages.Add;
ImageCollectionSourceItem.Image := BufferImage;
end;
...

Vcl.ImageCollection.pas Zeile 589
Delphi-Quellcode:

function TImageCollection.GetBitmap(AIndex: Integer; AWidth, AHeight: Integer): TBitmap;
var
  SourceImage: TWICImage;
  BufferImage: TWICImage;
  ImageCollectionSourceItem: TImageCollectionSourceItem;
begin
  Result := nil;
  if (AIndex < 0) or (AIndex > FImages.Count - 1) then
    Exit;

  SourceImage := GetSourceImage(AIndex, AWidth, AHeight);
  if SourceImage = nil then
    Exit;

  if Assigned(FOnGetBitmap) then
    FOnGetBitmap(SourceImage, AWidth, AHeight, Result)
  else
  begin
    Result := TBitmap.Create;
    if not TStyleManager.ActiveStyle.Enabled then
    begin
      Result.PixelFormat := pf32bit;
      Result.Canvas.Brush.Color := clBtnFace;
      Result.SetSize(AWidth, AHeight);
      Result.Canvas.StretchDraw(Rect(0, 0, AWidth, AHeight), SourceImage);
    end
    else if (SourceImage.Width = AWidth) and (SourceImage.Height = AHeight) then
      Result.Assign(SourceImage)
    else
    begin
      BufferImage := GetScaledImage(SourceImage, AWidth, AHeight);

      if not (csDesigning in ComponentState) then
      begin
        ImageCollectionSourceItem := Images[AIndex].SourceImages.Add;
        ImageCollectionSourceItem.Image := BufferImage;
      end;

      try
        Result.Assign(BufferImage);
      finally
        BufferImage.Free;
      end;
    end;
    if Result.PixelFormat = pf32bit then
      Result.AlphaFormat := afIgnored;
  end;
end;
Thomas Levering
  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 15:48 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