AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TImageList-Alternative? Resource-Datei? Performance?
Thema durchsuchen
Ansicht
Themen-Optionen

TImageList-Alternative? Resource-Datei? Performance?

Ein Thema von Glados · begonnen am 15. Sep 2017 · letzter Beitrag vom 17. Sep 2017
Antwort Antwort
Seite 2 von 3     12 3      
Glados
(Gast)

n/a Beiträge
 
#11

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 15. Sep 2017, 21:29
Es sind maximal 10 die sich ändern... dafür aber gegebenenfalls oft.
Zitat:
Einfach beim Programmstart komplett zur ImageList hinzufügen und dann über den Index bestimmen, welches Icon an welcher Stelle auftaucht.
Das mit dem Index will ich ja unbedingt wegbekommen

(Resource schneller)
Zitat:
Definitiv nicht - maximal gleich schnell. Rate mal, wo TImageList seine Icons abspeichert?
Wenn das so ist und die TImageList eh nichts anderes macht, dann kann ich mir ja auch eine Funktion schreiben der ich den Namen der Resource übergebe, welche ich zurückerhalten möchte.
Dann bin ich die IDs los und kann frei laden und sortieren. Um doppelten Code zu vermeiden, würde ich alle Resource-Namen in ein Enum speichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#12

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 15. Sep 2017, 22:16
Wenn es sich ausschließlich um PNG Icons handelt, könntest du mit der PngImageList aus den PngComponents eventuell weiterkommen: Dort hat jeder Eintrag einen Namen.

Ich benutze diese Namen auch um den aktuell gültigen gültigen ImageIndex zu ermitteln und habe mir dazu einen kleinen Class-Helper geschrieben:
Delphi-Quellcode:
type
  TPngImageListHelper = class helper for TPngImageList
  public
    function FindImageIndexByName(const AName: string): Integer;
  end;

function TPngImageListHelper.FindImageIndexByName(const AName: string): Integer;
var
  itm: TCollectionItem;
begin
  Result := -1;
  for itm in PngImages do begin
    if SameText(itm.DisplayName, AName) then begin
      Result := itm.Index;
      Break;
    end;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#13

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 15. Sep 2017, 22:27
PNGs sind es nicht, aber ICOs. Muss sie dann halt alle umwandeln.
Ich werde mir das mal angucken. Wenn ich das richtig verstehe, bist du der Urheber dieser Komponente?

Stellt sich mir nur noch die Frage... PNGComponents oder simple Resourcedatei.

Geändert von Glados (15. Sep 2017 um 22:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#14

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 00:39
Es sind maximal 10 die sich ändern... dafür aber gegebenenfalls oft.
Zitat:
Einfach beim Programmstart komplett zur ImageList hinzufügen und dann über den Index bestimmen, welches Icon an welcher Stelle auftaucht.
Das mit dem Index will ich ja unbedingt wegbekommen
Schon klar, aber wenn du die ImageList beim Start der Anwendung mit Icons aus Resourcen füllst, kannst du ja jedem Icon beispielsweise den Resourcennamen zuweisen (bzw. dir in einer StringList mit identischen Indizes merken). Über einen einfachen Lookup in der StringListe findest du nun den ImageIndex des gewünschten Icons heraus.

Auf gar keinen Fall würde ich die Icons komplett dynamisch immer wieder neu laden und freigeben.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 02:19
Wie wäre es denn mit 'nem Nachfahren von TImageList?

Ein zusätzliches Attribut Names vom Typ TStrings, in das die Namen der Bilder kommen, in der Reihenfolge, in der sie in der Imageliste stecken.

Dann noch 'ne Methode GetImageIndexByName (oder so), die per IndexOf in den Strings nach dem Namen sucht und, durch die identische Sortierung, dann den passenden ImageIndex liefert.

Für die Methoden Add, Insert ... der ImageList könnte man Versionen schreiben, die zusätzlich auch noch den Namen als Parameter annehmen und in den Strings speichern.

Sowas in der Art?
Delphi-Quellcode:
Type
  TMyImageList = class(TImageList)
    fNames : TStrings;
  public
    { Public-Deklarationen }
    constructor Create(aOwner : TComponent); override;
    destructor Destroy; override;
    property Names : TStrings read fNames;
  end;
  
constructor tMyImageList.Create(aOwner : TComponent);
begin
  inherited;
  fNames := TStringList.Create;
end;

destructor tMyImageList.Destroy;
begin
  fNames.Free;
  inherited;
end;

function tMyImageList.GetImageIndexByName(AName : String) : Integer;
begin
  Result := fNames.IndexOf(AName);
end;

end.

...
IrgendeineKomponenteMit.ImageIndex := ImageList.GetImageIndexByName('NameDesBildes');
Wenn man nicht den ImageIndex haben will, sondern direkt das Bild, dann schreibt man sich noch 'ne Methode GetImageByName, die analog zum ImageIndex halt das Bild liefert.

Der Aufwand dürfte insgesamt garnichtmal so hoch sein.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 02:37
An genau sowas dachte ich Wenn man dann noch den Designtime Editor überschreibt, kann man die Namen sogar direkt dort einpflegen und müsste nicht manuell mit Resourcen hantieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.916 Beiträge
 
Delphi 12 Athens
 
#17

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 07:21
Zitat:
über die ID, die sich ändern kann,
Deshalb benutze ich dafür immer globale Ressourcen und Consts.

Delphi-Quellcode:
const
  CIco_Hund = 37;
  CIco_Katze = 38;
  CIco_Maus = 39;
Das ist für DI Experten vielleicht etwas anrüchig, erspart mir aber "Icon-Katastrophen" wenn sich mal wieder was ändert.

Das erleichtert natürlich nicht das Zuweisen im Designer, deshalb mache ich das auch lieber im Code.
Im Designer lege ich das dann eher nur als "Vorschau" an.

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#18

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 08:02
Wenn ich das richtig verstehe, bist du der Urheber dieser Komponente?
Nicht direkt - ich habe die quasi auch nur geerbt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#19

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 08:55
Zitat:
Wie wäre es denn mit 'nem Nachfahren von TImageList?
Klingt gut.

Zitat:
Auf gar keinen Fall würde ich die Icons komplett dynamisch immer wieder neu laden und freigeben.
Stimmt auch wieder. Kann nämlich bei´mir schon öfter passieren, dass was geladen werden muss.

Jetzt muss ich mich nur noch entscheiden zwischen PNGComponents oder TMyImageList.
Bei Ersterem könnte ich sofort den Design Time Editor verwenden, müsste aber alle meine ICOs in PNGs umwandeln.

Ich glaube aber sogar fast, das PNGs irgendwie gängiger sind als ICOs.

Geändert von Glados (16. Sep 2017 um 10:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#20

AW: TImageList-Alternative? Resource-Datei? Performance?

  Alt 16. Sep 2017, 12:52
müsste aber alle meine ICOs in PNGs umwandeln.
Falls du nicht schon bereits ein passendes Tool dazu hast: In PngComponents gibt es eine Methode ConvertToPNG die das unterstützt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:35 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