Autor Beitrag
deara
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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! :oops:
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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.

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

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 29.10.04 12:44 
ich hab das jetzt so gemacht:

ausblenden 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-1do begin
      if Self.Components[i] is TPanel then begin
        if (Self.Components[i] as TPanel).Visible=true then begin
// aber in die schleife springt er erst gar nicht rein und ich weiss nicht wieso da 
// auf jeden fall mindestens ein TPanel sichtbar ist.
           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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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.
:lol:
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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:

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



BeitragVerfasst: Fr 29.10.04 14:19 
deara hat folgendes geschrieben:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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. :wink:
deara Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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