AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TJumpList Icon-Index oder: Wie verändere ich eine Komponente am besten?
Thema durchsuchen
Ansicht
Themen-Optionen

TJumpList Icon-Index oder: Wie verändere ich eine Komponente am besten?

Ein Thema von CodeX · begonnen am 15. Apr 2019 · letzter Beitrag vom 15. Apr 2019
Antwort Antwort
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#1

TJumpList Icon-Index oder: Wie verändere ich eine Komponente am besten?

  Alt 15. Apr 2019, 12:42
Ich würde bei der TJumpList Komponente gerne ein Icon für einen Eintrag angeben. Das geht von Haus aus nur über einen Pfad zu einer Datei, die das Icon enthält. Leider kann man jedoch kein Icon-Index angeben. Es wird automatisch der erste Icon der Datei verwendet.

Diese Einschränkung ist völlig unnötig, da das Icon intern per SetIconLocation festgelegt wird und Embarcadero sich unsinnigerweise dazu entschlossen hat, den Index fix auf 0 zu setzen statt einen variablen Parameter zu verwenden:
Delphi-Quellcode:
//Vcl.Jumplist
function TJumpListItem.GetAsIShellLink: IShellLink;
begin
  [...]
    if FIcon <> 'then
      CheckError(Result.SetIconLocation(PWideChar(FIcon), 0), SJumplistsItemErrorSettingicon)
    else // use the current executable Icon
      CheckError(Result.SetIconLocation(PWideChar(Paramstr(0)), 0), SJumplistsItemErrorSettingicon);
end;
Ich will natürlich nicht den Original-Code verändern, weiß leider aber auch nicht, wie ich in so einem Fall eine eigene Komponente korrekt ableiten muss. Eine TMyJumpList ableiten und Änderungen daran vornehmen, ist kein Problem. Aber hier betrifft es ja TJumpListItem bzw. übergeordnet dann TCustomJumpList, TJumpCategories, TJumpCategoryItem und TJumpListCollection (wo GetAsIShellLink aufgerufen wird).

Muss ich all diese Klassen ebenfalls ableiten und alle Funktionen überschreiben, wo GetAsIShellLink irgendwie involviert ist? Oder wie kann man in so einem verschachtelten Fall möglichst geschickt Änderungen vornehmen?
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.

Geändert von CodeX (15. Apr 2019 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TJumpList Icon-Index oder: Wie verändere ich eine Komponente am besten?

  Alt 15. Apr 2019, 14:21
Ich will natürlich nicht den Original-Code verändern
Ich würde hier aber genau das tun!

Die ganze Klassenarchitektur von TJumpList ist nicht auf Vererbung ausgelegt. Nahezu alle Methoden der beteiligten Klassen sind nicht virtuell, weswegen du die Implementation in deinen eigenen Klassen fast komplett nachbilden musstest.

Legt doch einfach eine Kopie der Unit Vcl.JumpList in deinem Projektverzeichnis an und ändere den Code in GetAsShellLink nach deinen Bedürfnissen.

Da du so ja nicht einfach ein zusätzliches Property IconIndex in TJumpListItem einführen kannst, könnte man den Index ja z.B. an den FileName in dem Icon-Property codieren (z.B. als "MyIconFile#5") und in GetAsShellLink beides auseinanderdröseln.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
475 Beiträge
 
Delphi 12 Athens
 
#3

AW: TJumpList Icon-Index oder: Wie verändere ich eine Komponente am besten?

  Alt 15. Apr 2019, 21:57
Herzlichen Dank für Deine Einschätzung!

Schade, dass es nicht besser geht. Ich dachte, ich kenne mich beim Ableiten von Komponenten einfach zu wenig aus und es gibt doch eine Lösung, damit ich bei möglichen Updates nicht erneut die ganze Unit kopieren und anpassen muss. Aber nun gut, wenn es nicht anders geht, kopiere ich sie eben doch.
Nur Delphi schafft es, einem ein Lächeln zu schenken, wenn man sich beim Schreiben von := vertippt und stattdessen ein :) erscheint.
  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 05:16 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