Delphi-PRAXiS

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 Komponente an Hand des Namens finden (https://www.delphipraxis.net/58029-komponente-hand-des-namens-finden.html)

Scorpion 30. Nov 2005 11:07


Komponente an Hand des Namens finden
 
Hallo,

ich will eine Komponente ansprechen, dessen name ich kenne. Ich benutze die FindComponent Funktion, aber irgendwie klappt das nicht, wo liegt denn der Fehler??

Delphi-Quellcode:
   
var lknoten: TImage;
    Komponentenname: String;
...
lKnoten := TImage(Komponentenname);
//Zum Test, eine Showmessage
Showmessage(lknoten.Name);

Jedoch stürzt er bei der Showmessage ab.

thx

sh17 30. Nov 2005 11:10

Re: Komponente an Hand des Namens finden
 
kann ja nicht gehen, Du machst aus dem String ein TImage.

Zeig mal bitte den Code mit FindComponent.

Scorpion 30. Nov 2005 11:15

Re: Komponente an Hand des Namens finden
 
Oh, sorry...

ich wollte es eigentlich so versuchen:

lknoten := FindComponent(Komponentenname) As TImage;

aber das geht auch nicht, gibt jedes mal aber keinen Compilierfehler :(

sh17 30. Nov 2005 11:33

Re: Komponente an Hand des Namens finden
 
Delphi-Quellcode:
var
  lknoten : TImage;
  c : TComponent;
begin
  c := FindComponent('Image1');
  if c is TImage then
  begin
    lknoten := TImage(c);
    MessageDlg(lknoten.Name, mtInformation, [mbOK], 0);
  end;

Scorpion 30. Nov 2005 11:47

Re: Komponente an Hand des Namens finden
 
Liste der Anhänge anzeigen (Anzahl: 1)
das gibt bei mir leider auch folgenden fehler...

:(

sh17 30. Nov 2005 13:31

Re: Komponente an Hand des Namens finden
 
also bei mir gehts :gruebel:

aber wie ich sehe, setzt Du schon eine TObjectList ein.

ichbins 30. Nov 2005 14:01

Re: Komponente an Hand des Namens finden
 
wo genau tritt denn der Fehler auf? Mach mal überall showmessages rein damit du das siehst.

Khabarakh 30. Nov 2005 14:05

Re: Komponente an Hand des Namens finden
 
Zitat:

Zitat von ichbins
Mach mal überall showmessages rein damit du das siehst.

:shock: Dafür gibt es einen Debugger. Selbst wenn er nicht selbst an die richtige Stelle springt, sind ein paar Haltepunkte zehnmal so leicht einzusetzen und auch wieder zu entfernen als ShowMessage-Prozeduren.

r2c2 30. Nov 2005 15:43

Re: Komponente an Hand des Namens finden
 
Hört sich danach an, als gäge es keine Komponente mit entsprechendem Namen. Deshalb: In solchen Fällen mit <> nil prüfen...

mfg

Christian

Yheeky 30. Nov 2005 16:33

Re: Komponente an Hand des Namens finden
 
Zitat:

Zitat von Scorpion
Hallo,

ich will eine Komponente ansprechen, dessen name ich kenne. Ich benutze die FindComponent Funktion, aber irgendwie klappt das nicht, wo liegt denn der Fehler??

Delphi-Quellcode:
   
var lknoten: TImage;
    Komponentenname: String;
...
lKnoten := TImage(Komponentenname);
//Zum Test, eine Showmessage
Showmessage(lknoten.Name);

Jedoch stürzt er bei der Showmessage ab.

thx

Hi Scorpion ;)

wenn du z.B. die Transparentfarbe festlegen willst...

Delphi-Quellcode:
TImage(FindComponent('Name der Komponente')).Picture.Bitmap.TransparentColor := clFuchsia;

dfried 30. Nov 2005 16:39

Re: Komponente an Hand des Namens finden
 
Hi Yheeky,

Zitat:

Zitat von Yheeky
Delphi-Quellcode:
TImage(FindComponent('Name der Komponente')).Picture.Bitmap.TransparentColor := clFuchsia;

Und wenns die Komponente nicht gibt oder sie nicht instanziert ist dann passiert genau die vorgenannte Zugriffsverletzung!!!

sh17 bzw. die Ergänzung von r2c2 haben doch schon den korrekten Weg aufgezeigt!

Yheeky 30. Nov 2005 17:03

Re: Komponente an Hand des Namens finden
 
Zitat:

Zitat von dfried
Hi Yheeky,

Zitat:

Zitat von Yheeky
Delphi-Quellcode:
TImage(FindComponent('Name der Komponente')).Picture.Bitmap.TransparentColor := clFuchsia;

Und wenns die Komponente nicht gibt oder sie nicht instanziert ist dann passiert genau die vorgenannte Zugriffsverletzung!!!

sh17 bzw. die Ergänzung von r2c2 haben doch schon den korrekten Weg aufgezeigt!

Wenn man´s mit try verpackt, dann nicht...er sagte ja er kennt den Namen der Komponente bereits...

r2c2 1. Dez 2005 15:56

Re: Komponente an Hand des Namens finden
 
Zitat:

Zitat von Yheeky
Zitat:

Zitat von dfried
Hi Yheeky,

Zitat:

Zitat von Yheeky
Delphi-Quellcode:
TImage(FindComponent('Name der Komponente')).Picture.Bitmap.TransparentColor := clFuchsia;

Und wenns die Komponente nicht gibt oder sie nicht instanziert ist dann passiert genau die vorgenannte Zugriffsverletzung!!!

sh17 bzw. die Ergänzung von r2c2 haben doch schon den korrekten Weg aufgezeigt!

Wenn man´s mit try verpackt, dann nicht...er sagte ja er kennt den Namen der Komponente bereits...

try...except sollte IMHO in solchen Fällen immer drum; nicht aber um ne Exception "abzublocken", sondern um Unvorherdesehenes verständlicher wiederzugeben. AV sagt nicht so viel aus. Wenn die Fehlermeldung aber lautet: "Fehler Nummer 123 mit Nachricht AV", dann weiß der Enrwickler wenigstens wo er zu suchen hat...

Also: mit <> nil prüfen und zusätzlich try...except mit ggf. aussagekräftigerer Meldung(jedenfalls bei größeeren Projekten wird das sinnvoll)...

mfg

Christian


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