Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ImageList und ToolBar (https://www.delphipraxis.net/69606-imagelist-und-toolbar.html)

Martin K 17. Mai 2006 18:17


ImageList und ToolBar
 
Hi Leute,

ich verstehe grad nur Bahnhof!

Ich will einer ToolBar ein bestimmtes Bitmap aus einer ImageList hinzufügen.

Das müsste doch so gehen:
Delphi-Quellcode:
var b: TBitmap;
begin
  b := TBitmap.Create;
  ImageList1.GetBitmap(5, b);
  ToolBar1.Images.AddMasked(b, clBlack);
  b.Free;
end;
oder auch:
Delphi-Quellcode:
var ico: TIcon;
begin
  ico := TIcon.Create;
  ImageList1.GetIcon(5, ico);
  ToolBar1.Images.AddIcon(ico);
  ico.Free;
end;
Führt aber beides zu einer Exception und ich verstehe es einfach nicht :gruebel:

Wenn ich das ganze in ein TImage lade, funzen beide Codes ohne Probleme...


//Edit:
Wen's interressiert, das hier kommt:
Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00444ED8 in Modul 'Project1.exe'. Lesen von Adresse 00000030'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------

Die Muhkuh 17. Mai 2006 18:43

Re: ImageList und ToolBar
 
Schonmal geguckt, ob b <> nil?

Hawkeye219 17. Mai 2006 18:51

Re: ImageList und ToolBar
 
Hallo Martin,

hast du der Toolbar zuvor eine (nicht notwendigerweise gefüllte) ImageList zugeordnet? Falls nicht, hat ToolBar1.Images den Wert NIL...

Gruß Hawkeye

Martin K 17. Mai 2006 19:20

Re: ImageList und ToolBar
 
Zitat:

Zitat von Spider
Schonmal geguckt, ob b <> nil?

Nee, b ist nicht nil.
Wie gasagt, in einem TImage wird's ganz normal angezeigt.


Zitat:

Zitat von Hawkeye219
Hallo Martin,

hast du der Toolbar zuvor eine (nicht notwendigerweise gefüllte) ImageList zugeordnet? Falls nicht, hat ToolBar1.Images den Wert NIL...

Gruß Hawkeye

Das wird's wohl sein...

Ich kann also erst ein Bitmap mit ToolBar1.AddMasked... einfügen,
wenn ich der ToolBar eine ImageList zugeordnet habe???

DGL-luke 17. Mai 2006 19:25

Re: ImageList und ToolBar
 
Es ist natürlich unsaubere Programmierung, wenn dieses AddMask das nicht überprüft und im Notfall eine ImageList anlegt; allerdings solltest du dann selber machen und einfach eine auf den Klassenzeiger erstellen.

Also nicht unbedingt auf die Form erstellen und zuordnen, das gibt nur Durcheinander auf der Form, wenn du die Imagelist nicht bereits zur Designtime füllen willst. ;)

Martin K 17. Mai 2006 19:31

Re: ImageList und ToolBar
 
Gibt es denn keine Möglichkeit, eine ImageList in einer Prozedur (also zur Laufzeit) zu erstellen, der ToolBar zuzuordnen und die ImageList danach wieder freizugeben?
...die ToolBar sollte dabei natürlich die Symbole behalten...

DGL-luke 17. Mai 2006 19:37

Re: ImageList und ToolBar
 
wieso denn wieder freigeben?

Delphi-Quellcode:
Toolbar.Images := TImageList.Create;
Mensch, was willst du mehr?

Martin K 17. Mai 2006 19:45

Re: ImageList und ToolBar
 
Zitat:

Zitat von DGL-luke
Delphi-Quellcode:
Toolbar.Images := TImageList.Create;
Mensch, was willst du mehr?

uuups.... :oops:

Dann kann ich mir ja das hier komplett sparen:
Delphi-Quellcode:
var ImageList: TImageList;
begin
  ImageList := TImageList.Create;
  ToolBar1.Images := ImageList;
 ....
end;
//Edit:
...ganz vergessen:
Danke!!!! :thumb:

Martin K 17. Mai 2006 19:49

Re: ImageList und ToolBar
 
....moment mal:
Delphi-Quellcode:
Toolbar.Images := TImageList.Create;
Da will er ja noch einen AOwner: TComponent haben...
Schreib ich da einfach NIL rein?

DGL-luke 17. Mai 2006 19:55

Re: ImageList und ToolBar
 
Nur so als Hintergrundinfo: Auch das wäre kein Beinbruch, denn auch nach "Verfall" des lokalen Klassenzeigers "ImageList" hättest du in Toolbar.Images immer noch Zugriff auf den entsprechende Speicherbereich und könntest, solange die Toolbar noch existiert, die Imagelist freigeben bzw. dir den Klassenzeiger wieder holen, da die Tooblar die Imagelist höchstwahrscheinlich nicht selber freigibt.
Also, falls du die Tooblar aus welchem Grund auch immer freigeben willst, kannst du es so machen:

Delphi-Quellcode:
procedure FreeToolbarAndAssociatedImageList(TB: TToolbar);
var IL: TImageList;
begin
IL := TB.Images;
TB.Free;
IL.Free;
end;
;)

(Ja, eigentlich ist es Schwachsinn)


//Roter Kasten: am besten die Form, oder die Toolbar. Wird der Owner freigegeben, wird das Eigentum ;) auch freigegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Seite 1 von 2  1 2      

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