Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Tcompenent über selbst erzeugten namen ansprechen (https://www.delphipraxis.net/136716-tcompenent-ueber-selbst-erzeugten-namen-ansprechen.html)

SimStar001 6. Jul 2009 20:08


Tcompenent über selbst erzeugten namen ansprechen
 
Hallo,

ich habe ein paar Images erzeugt, und diese will ich gerne ansprechen über einen von mir erzeugten Namen.

BSP: Image1, Image2, Image3... usw.

bitte kein array als lösung vorshlagen, hatte ich schon, und ich brauche aber die andere variante.

über componentcount kann ich ja alle componenten ermitteln.

kann ich jetzt auch das ganze andersherum machen, sprich dass ich z.b. sage, mache was mit

TImage('Image1')...???

SirThornberry 6. Jul 2009 20:11

Re: Tcompenent über selbst erzeugten namen ansprechen
 
Was spricht gegen ein Array und eine Funktion die darauf zugreift? Es gibt FindComponent aber da musst du in aller Regel casten um die gewünschten Dinge zu bewerkstelligen und intern wird da auch ein Array gefunden - nur mit dem Nachteil das neben den Komponenten die man will auch noch andere mit Array sind und das ganze somit langsamer ist als ein eigenes Array anzulegen.

SimStar001 6. Jul 2009 20:12

Re: Tcompenent über selbst erzeugten namen ansprechen
 
eigentlich nix, aber wollte es halt ohne machen, und wissen obs auch gehen würd...

mkinzler 6. Jul 2009 20:14

Re: Tcompenent über selbst erzeugten namen ansprechen
 
Hier könnte Form.FindComponent() helfen. Die Lösung mit dem Array wäre aber die besserer.

geskill 6. Jul 2009 21:29

Re: Tcompenent über selbst erzeugten namen ansprechen
 
Ich mache das immer mit einer TList, da muss man sich zwar merken und immer Typecasten das dort ein TImage drinne ist aber mir ist das lieber als mit SetLength das Array zu bedienen. Außerdem kann man Komponenten aus der Mitte schnell und einfach löschen oder welche einfügen.

fajac 7. Jul 2009 07:36

Re: Tcompenent über selbst erzeugten namen ansprechen
 
Man kann auch einfach eine neue Klasse von TStringList ableiten und eine entsprechende Zugriffsmethode hinzufügen:
Delphi-Quellcode:
type
  TTImageList = class (TStringList)
  public
    function Image (AName : string) : TImage;
 
  ...

implementation

function TTImageList.Image (AName : string) : TImage;
var
  index : Integer;
begin
  index := IndexOf (AName);
  if index >= 0 then
    Result := TImage(Objects [index])
  else
    Result := nil;
end;
...und zum Hinzufügen eines TImage zur Liste :
Delphi-Quellcode:
var
  liste : TTImageList;
  image : TImage;
begin
  ...
  liste.AddObject (image.Name, image);
Dann geht der Zugriff auf ein Image in der z.B. Liste so:
Delphi-Quellcode:
  image = liste.Image('Image1');


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 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