AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...
Thema durchsuchen
Ansicht
Themen-Optionen

ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

Ein Thema von FriedrichAT · begonnen am 10. Okt 2025 · letzter Beitrag vom 11. Okt 2025
Antwort Antwort
Benutzerbild von FriedrichAT
FriedrichAT

Registriert seit: 25. Mai 2019
Ort: Wien
44 Beiträge
 
Delphi 12 Athens
 
#1

ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 07:27
Hallo!

Habe eine ImageCollection (IC) und zwei VirtualimageLists (VIL_MM, VIL_ED), die während "Create" aus einer Resource gefüllt werden.
Werden aber nicht!!!
Im Debugger sehe ich das die IC als Wert "([csInheritable])" und die beiden Imagelisten ebenfalls als Wert "([csInheritable])" haben.

Erstelle ein Testprojekt mit den selben Komponenten und gleichen Einstellungen, und die ImageCollection bzw. die Imagelisten werden gefüllt.

Was bedeutet "([csInheritable])" bzw. was mache ich falsch?

Dankend im voraus
Friedrich
  Mit Zitat antworten Zitat
EKON 29
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.812 Beiträge
 
Delphi 12 Athens
 
#2

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 09:49
csInheritable ist per Standard immer aktiv.
Bei vererbten Forms lassen sich Komponenten ebenfalls vererben im Nachfahren erweitern.

Es gibt Komponenten, welche es in ihrem überschriebenen Contructor das deaktivieren und so verbieten, dass sie bei FormVererbung genutzt werden können, wie z.B. TCustomActionManager/TActionManager.

Daran sollte das "Werden aber nicht" also nicht liegen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 10:01
Nicht ohne Grund frage ich fast immer nach dem Code bzw. einem Beispielprojekt, mit dem man es reproduzieren kann. Zu oft kommt es leider vor, dass jemand nur beschreibt was er tut, dabei aber nur beschreibt was er glaubt zu tun und die wesentlichen Teile auslässt. Die Tatsache, dass es in deinem Testprojekt funktioniert, ist ein deutlicher Hinweis auf dieses Auslassen. Wenn man es erstmal selbst in einem Testprojekt reproduzieren kann, findet man häufig auch die Ursache und kommt schnell selbst zur Lösung.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von FriedrichAT
FriedrichAT

Registriert seit: 25. Mai 2019
Ort: Wien
44 Beiträge
 
Delphi 12 Athens
 
#4

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 10:10
Unterschiede im Debugger
Beide Apps in "Create - begin"
Beim erste ScreenShot werden die ImageCollection und die Imagelist gefüllt
Beim zweiten ScreenShot werden die ImageCollection und die Imagelist NICHT gefüllt???

Danke
Miniaturansicht angehängter Grafiken
screenshot-1.jpg   screenshot-2.jpg  
Friedrich
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 30. Nov 2003
Ort: Luterbach (CH)
722 Beiträge
 
Delphi 12 Athens
 
#5

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 18:07
Unterschiede im Debugger
Beide Apps in "Create - begin"
Beim erste ScreenShot werden die ImageCollection und die Imagelist gefüllt
Beim zweiten ScreenShot werden die ImageCollection und die Imagelist NICHT gefüllt???

Danke
Wie Uwe schon schrieb, wäre es hilfreich, wenn Du aufzeigst, wie Du die ImageCollection befüllst.
Aktuell kann nur die Glaskugel eingesetzt werden
Roland
  Mit Zitat antworten Zitat
Benutzerbild von FriedrichAT
FriedrichAT

Registriert seit: 25. Mai 2019
Ort: Wien
44 Beiträge
 
Delphi 12 Athens
 
#6

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Gestern, 21:20
Hallo!

Etwas Code...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
    RS: TResourceStream;
    VILItem: TVirtualImageListItem;
begin
  FArr := TArray<string>.Create(
    'MM_Tipp_New', 'MM_Tipp_Edit', 'MM_Tipp_Delete', 'MM_Tipp_Search',
    'MM_DB_Reload', 'MM_DB_Compress', 'MM_Tree_Expand', 'MM_Tree_Collaps',
    'ED_FontSize_Up', 'ED_FontSize_Down', 'ED_Bold',
    'ED_Italic', 'ED_Underline', 'ED_Left', 'ED_Center',
    'ED_Right', 'ED_BGC', 'ED_FGC', 'ED_Link');

  for i := Low(FArr) to High(FArr) do
  begin
    try
      RS:= TResourceStream.Create(HInstance, FArr[i], RT_RCDATA);
      IC.Add(FArr[i], RS);
    finally
      RS.Free;
    end;
  end;
  VIL_MM.ImageCollection:= IC;
  VIL_Ed.ImageCollection:= IC;

  VIL_MM.Width:= 44; VIL_MM.Height:= 44;
  VIL_Ed.Width:= 36; VIL_Ed.Height:= 36;

  for i := Low(FArr) to High(FArr) do
  begin
    if pos('MM_', FArr[i]) <> 0 then
    begin
      VILItem:= VIL_MM.Images.Add;
      VILItem.CollectionName:= FArr[i];
    end;
    if pos('ED_', FArr[i]) <> 0 then
    begin
      VILItem:= VIL_Ed.Images.Add;
      VILItem.CollectionName:= FArr[i];
    end;
  end;
end;
Friedrich
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.812 Beiträge
 
Delphi 12 Athens
 
#7

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Heute, 13:11
Das Create gehört VOR das Try
Zitat:
[dcc32 Warnung] Unit3.pas(46): W1036 Variable 'RS' ist möglicherweise nicht initialisiert worden
Warum hört eigentlich nie jemand darauf, wenn er ihm was sagt?

Zitat:
Pos(A, B) <> 0
Warum nicht Pos(A, B) = 1
oder gar StartsStr(A, B)
oder B.StartsWith(A) ?
Was soll denn bei BÄMM_BLUB oder DSED_DEMM_EEE passieren?

Hmmm, also eigentlich sollte der CollectionName ausreichen, für die Zuordnung.

Nachfolgendes macht aber eigentlich auch nichts anders (abgesaehn vom CREATE)
und ich sehe bis jetzt auch noch keine Fehler.
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var
  RS: TResourceStream;
  VILItem: TVirtualImageListItem;
begin
  FArr := ['MM_Tipp_New', 'MM_Tipp_Edit', 'MM_Tipp_Delete', 'MM_Tipp_Search',
    'MM_DB_Reload', 'MM_DB_Compress', 'MM_Tree_Expand', 'MM_Tree_Collaps',
    'ED_FontSize_Up', 'ED_FontSize_Down', 'ED_Bold',
    'ED_Italic', 'ED_Underline', 'ED_Left', 'ED_Center',
    'ED_Right', 'ED_BGC', 'ED_FGC', 'ED_Link'];

  VIL_MM.ImageCollection := IC;
  VIL_ED.ImageCollection := IC;
  VIL_MM.Width := 44; VIL_MM.Height := 44;
  VIL_ED.Width := 36; VIL_ED.Height := 36;

  for var A in LArr do
  begin
    RS := TResourceStream.Create(HInstance, A, RT_RCDATA);
    try
      IC.Add(A, RS);
    finally
      RS.Free;
    end;

    if StartsStr('MM_', A) then
      VILItem := VIL_MM.Images.Add
    else if StartsStr('ED_', A) then
      VILItem := VIL_ED.Images.Add
    else
      Continue; // oder PENG
    VILItem.CollectionName := A;
  end;
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (Heute um 13:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: ImageCollection bzw. VirtualImagelist zur Laufzeit füllen...

  Alt Heute, 13:17
Wenn ich das richtig verstanden habe, dann funktioniert dieser Code ja auch in dem Testprojekt, aber eben nicht im realen. Daraus könnte man schließen, dass der gezeigte Code hier eben nicht die Ursache ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 16:10 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