Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variable als Objekt? (https://www.delphipraxis.net/5220-variable-als-objekt.html)

Mat 28. Mai 2003 15:29


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

Christian Seehase 28. Mai 2003 15:36

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;

Mat 28. Mai 2003 15:47

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

Christian Seehase 28. Mai 2003 15:57

Moin Mat,

Zitat:

Zitat von Mat
das heisst, ich kann dann mit compWork dasselbe machen, wie mit Image1?

jein ;-)

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:
  compWork := TImage(self.FindComponent(sVariable));
füllen, oder mit

Delphi-Quellcode:
TImage(compWork).Picture;
// oder
(compWord as TImage).Picture;
verwenden.

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.

Mat 28. Mai 2003 16:18

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

Christian Seehase 28. Mai 2003 16:23

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;

Mat 28. Mai 2003 16:36

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