FindComponent - Fehler

Rund um die LCL und andere Komponenten
Antworten
ChrisOsD
Beiträge: 3
Registriert: So 1. Jan 2017, 11:22

FindComponent - Fehler

Beitrag von ChrisOsD »

Hallo zusammen,

ich versuche gerade ein Programm zu schreiben. Bei erstellen des formulars soll das Programm erst eine Datei StringList einlesen und aus dieser StringList dann die Bezeichnungen generieren.

Ich bekomme nun einen Fehler bei diesem Bereich:

Code: Alles auswählen

function Rename(const Language:String):String;
var
  i:integer;
  myComp:TComponent;
  compName:string;
begin
  for i:=1 to 3 do
    begin  {Labels ändern}
      compName:=('label'+IntToStr(i));
      myComp:=TLabel(FindComponent(compName));
      myComp.Caption:=(fLabels.Values[Language+'_Label'+IntToStr(i)]);
    end;
end;


Ich bekomme nun die Fehler:
Projekt kompilieren, Ziel: QuoteGen: Exit code 256, Fehler: 2, Warnungen: 2
unit1.pas(84,22) Error: Identifier not found "FindComponent"
unit1.pas(85,14) Error: identifier idents no member "Caption"

Könnt ihr mir sagen, wo mein Denkfehler liegt?

Danke schon einmal und schöne Grüße
Chris

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: FindComponent - Fehler

Beitrag von compmgmt »

Du rufst das von einer Funktion aus auf, du benötigst aber entweder eine Methode oder musst die Form davor angeben. Also z.B. Form1.FindComponent(compName);

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

ChrisOsD
Beiträge: 3
Registriert: So 1. Jan 2017, 11:22

Re: FindComponent - Fehler

Beitrag von ChrisOsD »

Danke für den Hinweis, compmgmt. Die Lösung mit dem Form1.FindComponent ... wirkt.

Es bleibt noch der Fehler:
unit1.pas(86,16) Error: identifier idents no member "Caption"

Hast du dafür auch noch einen Tipp?

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: FindComponent - Fehler

Beitrag von compmgmt »

Weil TComponent kein Caption als property hat. Nutz leiber TControl, oder wenn du weißt dass es ein Label sein wird, TLabel.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

ChrisOsD
Beiträge: 3
Registriert: So 1. Jan 2017, 11:22

Re: FindComponent - Fehler

Beitrag von ChrisOsD »

Vielen Dank für Deine Hilfe abermals.
Du hast mir sehr geholfen.

schorsch
Beiträge: 46
Registriert: Sa 20. Mär 2010, 23:00
OS, Lazarus, FPC: Win10x64, RaspberryPi, MAC
CPU-Target: so ziemlich alles

Re: FindComponent - Fehler

Beitrag von schorsch »

übrigens hilft hier auch oft ".. as T.." weiter ;-)
der feind der erde ist der mensch

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: FindComponent - Fehler

Beitrag von m.fuchs »

schorsch hat geschrieben:übrigens hilft hier auch oft ".. as T.." weiter ;-)

Es kann durchaus auch sinnvoller sein as einzusetzen. Das prüft nämlich ob der Typecast zulässig ist und wirft andernfalls eine Exception.

Beim Cast mit $Typname($Objekt) passiert das nicht. Das ist dann zwar schneller, kann aber bei einem unzulässigen Cast zu Problemen führen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten