Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - [FEHLER] Undefeinierter Bezeichner: 'FindComponent' (?)
Helmut - Mo 25.11.02 21:16
Titel: [FEHLER] Undefeinierter Bezeichner: 'FindComponent' (?)
Hi,
da ich ein Programmteil ziemlich oft brauche habe ich ihn als prozedur geschrieben:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure deselect; //deselektiert alle würfel var i: integer; begin for i:=1 to 6 do if (wuerfel[i].selected) then wuerfel[i].selected:=false; TImage(FindComponent('wuerfel'+IntToStr(i))).Picture.LoadFromFile(IntToStr(wuerfel[i].zahl)+'.bmp'); end; |
Allerdings bringt Delphi beim compilieren immer die oben genannte Fehlermeldung.
In dem normalen programm funktioniert der programmtext, nurnicht in einer extra prozedur.
Gibt es eine andere Möglichkeit den namen "wuerfel" mit der laufvariablen [i] zu kombinieren?
Hinweiss: nicht das es zu irreführungen kommt, das arrayr wuerfel[i] hat nix mit den images wuerfel1 bis wuerfel6 zu tun. Der programmtext funzt auf jeden fall.
Hoffntlich hat jemand dafür ne Lösung. Konnte bisher nichts wieter finden und in der delphi-hilfe ist findcomponent nichtmal aufgeführt.
mfg
Helmut
Delete - Mo 25.11.02 21:27
"FindComponent" ist eine Form-bezogene Funktion:
Quelltext
1:
| Form1.FindComponent ... |
Du solltest also den Namen der Form voranstellen (damit wäre allerdings der Vorteil bezüglich Wiederverwendbarkeit dahin), oder du übergibst der Funktion eine Referenz auf die Form.
Und doch: es steht in der Hilfe. :)
Helmut - Mo 25.11.02 21:55
ok, so klappt es! Ich brauchte die prozedur eh nur in form1.
Aber ich versteh immernochnicht warum er bei der einen prozedur self.Findcomponent gemacht hat (is ja das selbe wie form1.findcomponent) und bei der die ich selber geschrieben hab (die nicht durch ein ereignis aufgerufen wird), nicht.
Vielleicht setzt er das self nur imemr dann hin wenn das ereignis von einem objekt aufgerufen wurde (das in einem formular liegt)...
würd ich mal so schätzen :)
Danke für die Hilfe!
mfg
Helmut
Anonymous - Mo 25.11.02 22:13
Nein.
Wenn du das stehen hast:
Quelltext
1:
| procedure [b]TForm1[/b].Button1Click(Sender: TObject); |
Dann weiss Self was es ist. Eben Form1. Das Self kannst du dir auch sparen. Bei
Setzt der Compiler beim Kompilieren das Self selbst vor.
Wenn aber nur das steht:
dann weiss Self nicht was es ist.
du kannst aber auch so machen:
Quelltext
1: 2: 3: 4: 5: 6:
| procedure Button; begin with Form1 do begin ... end; end; |
Dann brauchst du dazwischen kein Form1 davorzustellen.[/code]
Helmut - Mo 25.11.02 22:32
ahhh
Danke für die Erklärung! :oops:
Jetzt ist mir alles klar :roll: :beer:
thx!
Helmut
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!