![]() |
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:
Für den Fall, dass deine lustigen Panels immer noch über den linken und oberen Rand gucken aus
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;
Delphi-Quellcode:
wird
TPanel(Components[i]).Left:= Random(ShSpiel.Width)-25;
Delphi-Quellcode:
Müsste eigentlich nun gehen.... :gruebel:
TPanel(Components[i]).Left:= Random(ShSpiel.Width - 25);
|
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:
dann kommt bei dem Timer nun folgender Code:
var
FPanel1: TFPanel1;
Delphi-Quellcode:
bewegen tut sich aber immer noch nix :(
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; |
Re: Panel Spiel => Panel automatisch erzeugen?
1.) ???
Delphi-Quellcode:
2.) ???
Timer.Enabled := true;
Im Form.Create Zufallsgenerator initialisiert?
Delphi-Quellcode:
randomize;
|
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; |
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 |
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... |
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?
![]() |
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. |
Re: Panel Spiel => Panel automatisch erzeugen?
Sieht doch gut aus....
Du erstellst hier
Delphi-Quellcode:
TPANEL und versuchst sie dann hier hier nach
Panel:= TPanel.Create (ShSpiel);
Delphi-Quellcode:
TFPanel1 zu casten.
Components[i] is TFPanel1
Im Timer1Timer sämtliche Vorkommen von TFPanel1 durch TPanel ersetzen. |
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. |
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