![]() |
Variable als Objekt?
Hi,
in jeder Funktion gibt es ja den Parameter "Sender". Nun kann ich ja dann mit (Sender as TButton) [wenn es denn ein Button ist] alle Eigenschaften, Funktionen etc. dieses Buttons abrufen, ohne das ich den Namen des Buttons kennen kann. Nun meine Frage. Ich habe ein Objekt "Image1" und eine (string) Variable, deren Inhalt ebenfalls "Image1" ist. Kann ich nun das Bild nur ueber die Variable ansprechen? Ich dachte ja an (var_name as TImage) aber das wollte er ja nicht. Bin mit den Grundlagen (noch) nicht so fit, gibt's da ueberhaupt Moeglichkeiten? 1000 Dank Mat ps: ich hab auch gesucht :) aber bei derart allg. Begriffen gab's keine "vernuenftigen" ergebnisse |
Moin Mat,
mal ein Beispiel:
Delphi-Quellcode:
var
sVariable : string; compWork : TComponent; begin sVariable := 'Image1'; // Erfolgt der Aufruf von FindComponent in einer Methodes des Formulares, // das das Image enthält, kann man self nehmen, oder weglassen, ansonsten // muss der entsprechende Container mit angegeben werden (z.B. Form1.FindComponent(... ) compWork := self.FindComponent(sVariable); if (compWork <> nil) and (compWork is TImage) then ShowMessage('Ich habs'); end; |
sieht gut aus.
das heisst, ich kann dann mit compWork dasselbe machen, wie mit Image1? also compWork.Picture ist identisch zu Image1.Picture? bin nicht zuhause, kanns noch nich ausprobieren.. Danke Mat |
Moin Mat,
Zitat:
Wenn Du sicher bist, dass es sich immer um ein TImage handelt, kannst Du die Variable auch gleich als TImage deklarieren, und dann mit
Delphi-Quellcode:
füllen, oder mit
compWork := TImage(self.FindComponent(sVariable));
Delphi-Quellcode:
verwenden.
TImage(compWork).Picture;
// oder (compWord as TImage).Picture; compWork ist nichts weiter als ein Zeiger auf ein Objekt. Wird compWork als TComponent deklariert, stellt es für den Compiler einen Zeiger auf ein Objekt vom Typ TComponent dar. Durch die Verwendung von TImage(...), egal ob im ersten oder zweiten Fall, übernimmst Du gegenüber dem Compiler sozusagen die Verantwortung dafür, dass es sich bei dem Pointer in compWork um ein TImage Objekt handelt, und somit lässt er dann auch, ohne zu meckern, die Verwendung auf die Eigenschaften, Methoden und Ereignisse von TImage zu. |
gleich als Image deklarieren geht aber nicht.
mal konkret zum Programm ich habe jeweils Paare von Buttons und Images, die dann immer gleich heissen (also Button_Delete, Image_Delete) Beim MouseMove-Event der Images soll halt was mit den Buttons passieren. Bisher hatte ich fuer jedes Image-Element ne eigene Prozedur, was aber Quatsch ist, da ja jedesmal dasselbe passieren soll. Also will ich ueber die (Sender as TImage).name den Namen des Images rausbekommen, die string-variable dann nach 'button_[Image-Name]' umwandeln (soweit bin ich bisher schon gekommen :) und dann mit der Variable weitermachen (die ja dann eben wie der zugehoerige Button heisst) weiss nicht genau, ob deine letzten Beispiele genau das machen, wie gesagt, Theorie hab ich noch nich so drauf :) Mat |
Moin Mat,
da deklarierst Du die Variable als TButton, und suchst Dir den passenden mit
Delphi-Quellcode:
var
compWork : TButton; begin compWork := TButton(FindComponent('Button_'+TImage(Sender).Name)); // mach was mit compWork end; |
ah ja, genau sowas hab ich gesucht
Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:44 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 by Thomas Breitkreuz