Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Function ComponentByName (https://www.delphipraxis.net/79793-function-componentbyname.html)

torud 28. Okt 2006 15:30


Function ComponentByName
 
Hallo Wissende,

ich kann mich leider nicht mehr so recht an die Sprache erinnern, weiss aber, dass ich schon mal ne Programmiersprache benutzt habe, in der es eine fertige Funktion ala ComponentByName gab.

Ich habe mich mal daran versucht und möchte eigentlich nur wissen, ob das so in Ordnung ist:

Delphi-Quellcode:
function ComponentByName(str_Name:String):TControl;
var
  i:integer;
begin
  Result:=nil;
  with form2 do
    for i:= 0 to ComponentCount-1 do
      begin
        if Components[i].Name = str_Name then
          begin
            Result := (Components[i] as TControl);
            break;
          end;
      end;
end;

mkinzler 28. Okt 2006 15:38

Re: Function ComponentByName
 
Die TForm-Klasse hat die Methode .FindComponent .bzw. .FindControl, die das selbe macht.

torud 28. Okt 2006 15:43

Re: Function ComponentByName
 
Ich Blindfuss! Danke für den Hinweis. Wenn ich könnte, würde ich den Thread gleich löschen, oh wie peinlich... :oops:

Auf der anderen Seite: Ich erhalte ja TComponent als Ergebnis, möchte aber checken, ob das Control Visible ist...muss ich da erst noch as TControl draus machen???

DocE 28. Okt 2006 15:44

Re: Function ComponentByName
 
Moin torud,

es gibt zwar die Funktion FindComponent, aber wenn Du das unbedingt selber lösen möchtest, dann ist so in Ordnung.

Ich würde allerdings entweder TComponent zurückgeben, also

Delphi-Quellcode:
function ComponentByName(str_Name: String) : TComponent;
oder vor der Rückgabe prüfen, ob es sich (mindestens) um ein TControl handelt, also

Delphi-Quellcode:
if (Components[i] is TControl)
and (...) then
Zusätzlich würde ich persönlich das ganze noch CaseInSensivitve machen z.B. mit (Ansi)UpperCase:

Delphi-Quellcode:
if AnsiUpperCase(Components[i].Name) = AnsiUpperCase(str_Name) then

Grüsse
...Doc

mkinzler 28. Okt 2006 15:47

Re: Function ComponentByName
 
Zitat:

Auf der anderen Seite: Ich erhalte ja TComponent als Ergebnis, möchte aber checken, ob das Control Visible ist...muss ich da erst noch as TControl draus machen???
Wenn du dich nur für die Controls iteressierst, kannst du auch .FindControl verwenden.

DocE 28. Okt 2006 15:52

Re: Function ComponentByName
 
FindControl finde ich etwas zu kompliziert, da es ein Handle als Parameter erwartet. Den von FindComponent zurückgegebenen Wert mußt Du (mindestens) als TControl() ansprechen, da es "vorher" (also in TComponent) die Eigenschaft "Visible" noch nicht gibt.

Grüsse
...Doc

torud 28. Okt 2006 16:18

Re: Function ComponentByName
 
Vielen Dank für die Infos. Ich nutze nun meine Funktion, mit den erwähnten Verbesserungsvorschlägen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 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-2025 by Thomas Breitkreuz