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
 
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
67 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
 


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 17:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz