Autor |
Beitrag |
deara
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 01:18
Hi
Ich hab das Problem das ich für die Schule ein Spiel programmieren muss, ich hänge aber an der Abfrage ob die ite Komponente sichtbar oder unsichtbar ist ist oder nicht, den components[i].visible=true get nicht.
Ich will halt erst herausfinden welche komponente ein panel ist und wenn die komponente ein panel ist dann soll ich halt abfragen ob das panel sichtbar oder unsichtbar ist.
Hoffe mir kann jemand helfen. Danke! 
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 29.10.04 02:53
deara hat folgendes geschrieben: | Ich will halt erst herausfinden welche komponente ein panel ist und wenn die komponente ein panel ist dann soll ich halt abfragen ob das panel sichtbar oder unsichtbar ist. |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var I: Integer; begin
for I := 0 to Self.ComponentCount - 1 do if Self.Components[I] is TPanel then if not (Self.Components[I] as TPanel).Visible then ShowMessage(Self.Components[I].Name + ' ist nicht sichtbar');
end; |
_________________ Ciao, Sprint.
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Fr 29.10.04 09:04
Ein kleiner Hinweis: Allgemeiner (also für jedes Steuerelement) geht es mit TControl anstelle von TPanel.
Cu,
Udontknow
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 12:44
ich hab das jetzt so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| i:=0; for i:=0 to (self.ComponentCount-1) do begin if Self.Components[i] is TPanel then begin if (Self.Components[i] as TPanel).Visible=true then begin showmessage('Test!'); x:=(random(721)+1); y:=(random(350)+1); (Self.Components[i] as TPanel).left:=x; (Self.Components[i] as TPanel).top:=y; AnzahlPanel:=AnzahlPanel+1; end else (Self.Components[i] as TPanel).Destroy; |
Ist da irgendein Fehler drin oder muss es am Rest des Programmes liegen? Denn während der Laufzeit kommt auch manchmal (nur jedes dritte mal oder so) dieses CPU Fenster, aber ich finde den Grund nicht... Liegt es vielleicht auch an der Stelle?
Danke
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 29.10.04 12:53
Was ist denn dein "self"?
Gib doch mal für self die Komponente an, auf der die Panels liegen und teste dann mal, was passiert.
Du hast geschrieben, du kommst nicht mal bis in die Schleife. Meintest du wirklich die schleife (for) oder die Bedingung (if) an der der kommentar steht?
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 13:00
Das Self versteh ich nicht. Das Hab ich oben mit abgeschrieben da ich dachte ohne self (wie ich es immer gemacht hab) würde das den Fehler verursachen. Das ist mit oder ohne self genauso.
Ich meinte die if schleife die direkt über dem kommentar steht.

|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 29.10.04 13:14
deara hat folgendes geschrieben: | aber in die schleife springt er erst gar nicht rein und ich weiss nicht wieso da
auf jeden fall mindestens ein TPanel sichtbar ist. |
Hast du die Panels selber erstellt?
_________________ Ciao, Sprint.
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 13:18
Ja hab ich.
Das ist so ein Spiel wo man die panels "fangen" muss und immer wenn ich draufklicke wird es unsichtbar gemacht und der timer macht dann immer wieder ein neues dazu, wenn 10 panels auf der form sind hat man verloren und wenn keins mehr da ist hat man gewonnen.
Das ist der Arbeitsauftrag: busch.netteweb.de/do...l-Kap29FangSpiel.doc
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Fr 29.10.04 13:23
Hallo deara,
dein Quelltext stimmt soweit (auch wenn du das Self weglassen kannst, weil du ja eh in der Form agierst.)
Ansonsten würde ich mal schauen, ob überhaupt irgend welche Panels gefunden werden. So zum Beispiel: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var I: Integer; begin for I := 0 to ComponentCount - 1 do begin if (omponents[I] is TPanel then begin with Components[I] as TPanel do begin if Visible then ShowMessage(format('Sichtbares Panel gefunden: %s', [Name])) else ShowMessage(format('Unsichtbares Panel gefunden: %s', [Name])); end; end; end; | Wenn das nicht funktioniert, dann sind gar keine Panels verfügbar.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 13:35
Stimmt, der scheint gar kein Panel zu finden, was ich nicht verstehe, denn ich hab die mit der procedur erstellt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TFSpiel.PanelNeu; var Panel: TPanel; x, y : integer; begin x:=(random(721)+1); y:=(random(350)+1); Panel:=TPanel.Create(Panel1); Panel.width := 40; Panel.Height := 40; Panel.Left := x; Panel.top := y; Panel.Caption:='F'; Panel.Color:=clblue; Panel.Parent := FSpiel; Panel.OnClick:=PanelWeg; Panel.Visible:=true; Panel.Show; AnzahlPanel:=AnzahlPanel+1; end; |
und es erscheinen auch panels mit der Ereignismethode PanelWeg die die Panels versteckt wenn ich sie anklicke.
|
|
Sprint
      
Beiträge: 849
|
Verfasst: Fr 29.10.04 14:19
deara hat folgendes geschrieben: | Delphi-Quelltext 1:
| Panel:=TPanel.Create(Panel1); | |
Somit ist die Form (Self) nicht der Eigentümer und kann dann mit auch nicht mit Self.Components[I] bzw. nur Components[I] gefunden werden.
_________________ Ciao, Sprint.
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 29.10.04 14:26
Danke jetzt gehts!
Es kommt nur noch dieser CPU Fehler wenn ich auf Start klicke oder schon wenn ich das Programm ausführe.
Auf jeden Fall danke 
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 29.10.04 16:03
Sowas in der Arti hatte ich vermutet. Konnte mich nur leider nicht mehr um dein Problem kümmern. Hatten gerade einen Virus auf 80% der Clients. Das war dringender. 
|
|
deara 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 31.10.04 22:01
oh ja  son Virus geht natürlich vor  Versteh ich.
Hänge aber schon am nächten Problem:
Also das ganze Spiel läuft super, hab jetzt auch schon so eine neue PunkteForm wo die Punkte angezeige werden und alles, mein einzeges Problem ist jetzt, wenn ich versuche ein Panel wegzuklicken dann kommt spätestens beim 2. Panel ein Fehler der lautet: List 'index out of bounds' und danach in klammern entweder eine 7 oder eine 8. mit dem Fehler kann ich gar nichts anfangen.
Hoffe jemand von euch weiss woran es vielleicht liegen könnte?
danke
|
|