Problem mit for ... in

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Problem mit for ... in

Beitragvon braunbär » 8. Okt 2018, 18:21 Problem mit for ... in

Kann mir jemand sagen, was bei dem folgenden Konstrukt falsch ist:

Code: Alles auswählen
 
procedure TfrmTicker.LoadComplete;
var  c: TComponent;
    fdData: IfdData;
begin
  for c in Components do
    if c.getinterface(stringtoguid(GUID_fdData),fdData)
    then fdData.Loadcomplete;
end;
 
 


Ich bekomme die Fehlermeldung.
Code: Alles auswählen
 
Projekt kompilieren, Ziel: Optionen.exe: Exit code 1, Fehler: 3
Ticker.pas(191,12) Error: Wrong number of parameters specified for call to "GetComponent"
Error: Found declaration: GetComponent(LongInt):TComponent;
Ticker.pas(191,12) Error: Cannot find an enumerator for the type "<erroneous type>"
 


Das gleiche mit einer normalen Schleife von 0 bis Componentcount-1 kompiliert einwandfrei:
Code: Alles auswählen
 
procedure TfrmTicker.Loadcomplete;
var fdData: IfdData;
    i: integer;
begin
  for i:=0 to ComponentCount-1 do
      if Components[i].getinterface(stringtoguid(GUID_fdData),fdData)
         then fdData.Loadcomplete;
end;
 
braunbär
 
Beiträge: 232
Registriert: 8. Jun 2017, 17:21

Beitragvon Socke » 9. Okt 2018, 09:02 Re: Problem mit for ... in

Components ist eine Array-Property, d.h. du musst beim Zugriff darauf einen Index angeben. Der Enumerator kann aber nicht erraten, dass für die Array-Property die Anzahl über ComponentCount ermittelt werden, und dass dies überhaupt in Integer ist.
Der Default-Enumerator für Formulare iteriert bereits über die Komponenten. Versuch mal Folgendes:

Code: Alles auswählen
 
procedure TfrmTicker.LoadComplete;
var  c: TComponent;
    fdData: IfdData;
begin
  for c in Self do
    if c.getinterface(stringtoguid(GUID_fdData),fdData)
    then fdData.Loadcomplete;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2546
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon braunbär » 9. Okt 2018, 13:27 Re: Problem mit for ... in

Super! Funktioniert so.
Irgendwie ist mir mittlerweile ohnehin gedämmert, wo das Problem liegt. Aber auf die Lösung wäre ich sicher nicht gekommen. Es ist zwar nicht wichtig, aber ich finde, "for ... in" ist da schon viel schöner als eine Zählschleife. :)
braunbär
 
Beiträge: 232
Registriert: 8. Jun 2017, 17:21

• Themenende •

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried