Autor Beitrag
Helmut
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 25.11.02 21:16 
Hi,

da ich ein Programmteil ziemlich oft brauche habe ich ihn als prozedur geschrieben:

ausblenden 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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 25.11.02 21:27 
"FindComponent" ist eine Form-bezogene Funktion:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: 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
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 25.11.02 22:13 
Nein.

Wenn du das stehen hast:

ausblenden 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

ausblenden Quelltext
1:
Label1.Caption := ...					


Setzt der Compiler beim Kompilieren das Self selbst vor.

Wenn aber nur das steht:

ausblenden Quelltext
1:
procedure Button;					


dann weiss Self nicht was es ist.

du kannst aber auch so machen:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mo 25.11.02 22:32 
ahhh
Danke für die Erklärung! :oops:
Jetzt ist mir alles klar :roll: :beer:

thx!

Helmut