Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Panel Spiel => Panel automatisch erzeugen? (https://www.delphipraxis.net/101819-panel-spiel-%3D-panel-automatisch-erzeugen.html)

nachti1505 19. Okt 2007 01:04

Re: Panel Spiel => Panel automatisch erzeugen?
 
Hinter der IF-Abfrage begin und end setzen...

Sonst wird der zweite TypCast nach TPanel für jede Komponente ausgeführt... müsste ne AV geben....

Delphi-Quellcode:
for i:=0 to ComponentCount-1 do begin
  if Components[i] is TPanel then begin
     TPanel(Components[i]).Left:= Random(ShSpiel.Width)-25;
     TPanel(Components[i]).Top:= Random(ShSpiel.Height)-25;
  end;
Für den Fall, dass deine lustigen Panels immer noch über den linken und oberen Rand gucken aus

Delphi-Quellcode:
TPanel(Components[i]).Left:= Random(ShSpiel.Width)-25;
wird

Delphi-Quellcode:
TPanel(Components[i]).Left:= Random(ShSpiel.Width - 25);
Müsste eigentlich nun gehen.... :gruebel:

Juggy D 19. Okt 2007 11:39

Re: Panel Spiel => Panel automatisch erzeugen?
 
Hi, erstmal danke für deine Hilfe. Die Panels gucken nun nicht mehr drüber, wie du sagtest, mussten die -25 in die Klammer mit rein und danach noch +30, damit die nun unten nicht mehr drüber stehen.

Das mit dem Timer läuft aber immer noch nicht.

Ich hab oben die Variable angegeben:
Delphi-Quellcode:
var
  FPanel1: TFPanel1;
dann kommt bei dem Timer nun folgender Code:
Delphi-Quellcode:
procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
for i:=0 to ComponentCount-1 do begin
  if Components[i] is TFPanel1 then begin
     TFPanel1(Components[i]).Left:= Random(ShSpiel.Width-25);
     TFPanel1(Components[i]).Top:= Random(ShSpiel.Height-25);
     end;
  end;
end;
bewegen tut sich aber immer noch nix :(

nachti1505 19. Okt 2007 12:24

Re: Panel Spiel => Panel automatisch erzeugen?
 
1.) ???
Delphi-Quellcode:
Timer.Enabled := true;
2.) ???
Im Form.Create Zufallsgenerator initialisiert?
Delphi-Quellcode:
  randomize;

Juggy D 19. Okt 2007 13:14

Re: Panel Spiel => Panel automatisch erzeugen?
 
Hi,

hab nun auch randomize eingegeben, es tut sich aber immer noch nichts... :wall: Es ist bestimmt nur irgendwo ein klitzekleiner Fehler.. Aber ich find ihn nicht..

Delphi-Quellcode:
procedure TFPanel1.FormCreate(Sender: TObject);
begin
randomize;
end;

procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
Timer1.Enabled:= True;
for i:=0 to ComponentCount-1 do begin
  if Components[i] is TFPanel1 then begin
     TFPanel1(Components[i]).Left:= Random(ShSpiel.Width-25);
     TFPanel1(Components[i]).Top:= Random(ShSpiel.Height-25);
     end;
  end;
end;

_frank_ 19. Okt 2007 13:18

Re: Panel Spiel => Panel automatisch erzeugen?
 
setz doch mal breakpoints auf die top/left-zeilen und ggf. weiter oben. so weist zumindest wie weit der code durchläuft...

Gruß Frank

nachti1505 19. Okt 2007 13:20

Re: Panel Spiel => Panel automatisch erzeugen?
 
Kann du evt. mal den ganzen Quellcode reinstellen... vllt. auch als Anhang...

Ach so, ich gehe mal davon dass dein Timer Enabled war....... (Schau mal im OI nach). Weil ein Enablen im Aufruf bringt gar nüscht. Ohne Enabled kein Aufruf und ohne Aufruf wird er nicht auf Enabled gesetzt --> ein Paradoxon...

Juggy D 19. Okt 2007 13:26

Re: Panel Spiel => Panel automatisch erzeugen?
 
break; hat auch nichts gebracht... Ich hab mal nen Screenshot gemacht, vllt gebe ich ja nur irgendwo das falsche Formular oder so an.. TFPanel1 ist schon richtig ind er IF Abfrage, oder?

http://img524.imageshack.us/img524/5229/screen1yb8.jpg

Juggy D 19. Okt 2007 13:28

Re: Panel Spiel => Panel automatisch erzeugen?
 
Ja Timer ist auch im OI enabled.

hier der Quelltext
Delphi-Quellcode:
unit UFang1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TFPanel1 = class(TForm)
    BStart: TButton;
    ShSpiel: TShape;
    Panel: TPanel;
    Timer1: TTimer;
    procedure BStartClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure PanelWeg(Sender:TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FPanel1: TFPanel1;

implementation

uses UPunkte;


{$R *.dfm}

procedure TFPanel1.BStartClick(Sender: TObject);
var i: integer;
begin
for i:= 0 to 4 do begin
  Panel:= TPanel.Create (ShSpiel);
  Panel.Color:= clYellow;
  Panel.Caption:= 'F';
  Panel.Width:= 49;
  Panel.Height:= 33;
  Panel.Left:= Random(ShSpiel.Width-60)+30;
  Panel.Top:= Random(ShSpiel.Height-50)+30;
  Panel.Parent:= FPanel1;
  Panel.OnClick:= PanelWeg;

end;


//FPunkte:=TFPunkte.Create(self);
//FPunkte.showModal;
end;

procedure TFPanel1.FormCreate(Sender: TObject);
begin
randomize;
end;

procedure TFPanel1.Timer1Timer(Sender: TObject);
var i: integer;
begin
Timer1.Enabled:= True;
for i:=0 to ComponentCount-1 do begin
  if Components[i] is TFPanel1 then begin
     TFPanel1(Components[i]).Left:= Random(ShSpiel.Width-25);
     TFPanel1(Components[i]).Top:= Random(ShSpiel.Height-25);
     end;
  end;
end;

procedure TFPanel1.PanelWeg(Sender:TObject);
begin
  TPanel(Sender).Hide;
end;

end.

nachti1505 19. Okt 2007 13:34

Re: Panel Spiel => Panel automatisch erzeugen?
 
Sieht doch gut aus....

Du erstellst hier
Delphi-Quellcode:
  Panel:= TPanel.Create (ShSpiel);
TPANEL und versuchst sie dann hier hier nach

Delphi-Quellcode:
Components[i] is TFPanel1
TFPanel1 zu casten.

Im Timer1Timer sämtliche Vorkommen von TFPanel1 durch TPanel ersetzen.

Juggy D 19. Okt 2007 13:39

Re: Panel Spiel => Panel automatisch erzeugen?
 
hab im Timer1Timer nun TPanel eingesetzt, es geht aber immer noch nicht. :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz