Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Auf komponenten verweisen
Herbs - Mo 14.11.05 16:52
Titel: Auf komponenten verweisen
Hi,
Ich programmiere gerade ein Mühle Spiel in dem ich Timage objecte in Panels setze:
Delphi-Quelltext
1: 2: 3:
| Form1.image1.parent := Panel1; Form1.image2.parent := Panel2; Form1.image3.parent := Panel3; |
Wenn man componenten werte ändern will, z.B.
Delphi-Quelltext
1: 2: 3: 4:
| for i for I:=0 to ComponentCount-1 do if Components[I] is TButton then TButton(Components[I]).Enabled:=False; |
geht es ja eigentlich so oder?
bei mir zeigt er wenn ich es so ab wandle:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| for i:=0 to 23 do begin Image:=Timage.Create(Self); with Iimage do begin if Components[i+1] is TPanel then Parent :=TPanel(Components[i+1]); end; end; |
während der laufzeit erscheint dann die Fehler meldung:
Zitat: |
Der Index der liste überschreitet das Maximum(1)
|
Liegt das mal wieder daran dass delphi 3 das noch nicht kann?
oder hab ich was falsch eingeleitet?
Oder habt ihr sonst noch vorschläge,
wie ich dass notfalls um gehen kann(nur wenn es gar nicht anderst geht)?
Bei mir erscheinen am anfang immer Fehlermeldungen weil ich die Komponenten deklariert habe aber keine entsprechende komponente habe. Diese brauche ich aber. Also wenn die meldung auch bei euch kommt dann einfach bei allen auf nein klicken oder "N"für nein.
Herbs
Tilman - Di 15.11.05 18:24
Ich würde mir das Programm ja gerne mal angucken, aber du scheinst eine falsche Form mitgeschickt zu haben, da fehlen bei mir bis auf einen Button alle Komponenten (oder gehört das so?)
Herbs - Mi 16.11.05 18:11
hi,
di hab ich zur laufzeit erstellt das müsste eigentlich nicht ausmachen oder funktioniert das bei euch nicht?
Dieser fehler bedeutet nur, dass die komponenten die ich ja zur laufzeit kriere davor noch nicht vorhanden sind. Wenn ich dann auf die komponenten zugreifen will funzt bei mir das nur indem ich sie deklariere.
Diesen Fehler meldung müsst ihr immer mit nein beantworten!!! sonst löscht Delphi die deklarationen.
Herbs
Tilman - Mi 16.11.05 19:14
Okay das mit den Runtime-Kompos stimmt, find ich aber lästig (gibts da direktiven oder so um die wegige Nachfrage abzustellen? Wenn ich Kompos zur Laufzeit erstelle dekleriere ich sie auch selbst, das schafft nicht diese Probleme). An deiner Stelle würde ich das Ganze nochmal neu, evtl. auf Arrays basierend schreiben.
Aber zu deinem Problem: die Kompos erhalten als Parent Form1, und sind daher in Form1.components gelistet. Soweit sogut. Dein Problem: du führst hier was in einer with-Konstruktion aus. Schreibe also einfach Form1 davor - und es funzt soweit. (Denn sonst sucht er in IButton.components, und weil da nix drin ist wird das Maximum - eben 0 - stets überschritten)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| for i:=0 to 23 do begin IButton:=Timage.Create(Self); with IButton do begin if form1.Components[i] is TPanel then Parent :=TPanel(form1.Components[i]); Name :='Panel'+buttonsn[i]; Top :=strtoint(buttonsy[i])-20; Left :=strtoint(buttonsx[i])-20; Width :=40; height :=40; end; |
Herbs - Do 17.11.05 14:05
Danke
ich probiere es dann um 15:00 uhr mal aus und hacke dann das hier hoffentlich ab.
Tilman - Do 17.11.05 14:32
Herbs hat folgendes geschrieben: |
Danke
ich probiere es dann um 15:00 uhr mal aus und hacke dann das hier hoffentlich ab. |
Bitte lass das Forum ganz :wink:
Aber du darfst dein Projekt gerne abhaken! :lol:
Herbs - Do 17.11.05 14:49
Quelltext
1:
| [img]http://www.smiliemania.de/smilie.php?smile_ID=21[/img] |
(Nur zum Glück saß ich vorm schulrechner)8)
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!