Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

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

ImageName statt ImageIndex

  Alt 13. Okt 2018, 15:42
Wer hat das nicht schon erlebt: Ein Haufen Controls und Actions sind über einen ImageIndex mit einer ImageList verknüpft, aber kaum sortiert man diese ImageList nach sinnvollen Gesichtspunkten um, schon stimmen die Icons in den Controls nicht mehr.

Wäre es nicht schön, wenn man anstatt einer kryptischen Zahl als ImageIndex einen sprechenden Namen bei dem Control angeben könnte? Dann wäre die Reihenfolge der Icons in der ImageList völlig egal.

Voraussetzung dafür ist natürlich, daß die ImageList überhaupt Namen unterstützt. Die TPngImageList aus den PngComponents tut das schon seit geraumer Zeit. Was spricht also gegen eine Implementierung auf Basis von TPngImageList?

Kann ja so schwer nicht sein, dachte ich - na ja, so ganz einfach war es denn auch wieder nicht. Dazu hatte ich meine Ziele auch arg hoch gesetzt. So sollte im Object-Inspector bei den ImageIndex Properties natürlich auch eine Auswahl nach Namen möglich sein und somit auch der Name statt der reinen Zahl angezeigt werden. Weiterhin sollte das Ganze auch einfach auf andere Controls und insbesondere auch auf andere ImageLists, die ebenfalls Namen unterstützen, erweitert werden können.

Das Ergebnis ist nun der ImageIndexMapper, eine nicht-visuelle Komponente, die einfach auf ein Form oder Datenmodul gesetzt und aktiviert, die Verwaltung der Image-Namen erledigt. Es ist lediglich bei Bedarf ein Aufruf einer Methode nötig, damit die Icons wieder anhand der Namen gefunden werden.

Die anhängende ZIP-Datei enthält alle Sourcen und benötige Dateien für die Komponente und die Designtime-Unterstützung sowie ein Beispielprojekt (aktuell nur für Delphi 10.2 Tokyo). Voraussetzung ist dafür aber der Einsatz der PngComponents aus oben bereits genannter Quelle. Ich empfehle die aktuelle Version V1.5.0, da diese direkt den ImageIndexMapper unterstützt. Für ältere Versionen muss das entsprechende PNG-Support Package installiert werden. Beim Compilieren muss dann auch die entsprechende Unit mit eingebunden werden (beides in der ZIP enthalten). Mit der V1.5.0 entfällt diese Notwendigkeit.

Es gibt sicher noch einiges zu verbessern. Wenn jemand Zeit und Lust hat, kann er das Ding ja mal ausprobieren. Die sicher noch vorhandenen Bugs bitte an mich melden.

Ein GIF vom Object-Inspector beim Wechsel von TPngImageList zu TImageList kann man sich hier anschauen: https://www.screencast.com/t/4MbJkygjFR
Angehängte Dateien
Dateityp: zip ImageIndexMapper.zip (88,5 KB, 34x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat