Einzelnen Beitrag anzeigen

fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#27

AW: Form wird nach dem compilieren

  Alt 3. Mär 2012, 09:51
Delphi-Quellcode:
unit test;

interface

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

type
  TPunkt = class(TObject)
   rTimer : TTimer;
   procedure rTimerTimer(Sender: TObject);
    private
    { Private-Deklarationen }
     rRichtung : Integer;
     rhoehe : Integer;
     rpunkt : TPoint;
     rschliessen : Boolean;

// procedure ermmittlehöhe();
     public
    { Public-Deklarationen }
    constructor Create;
    destructor Destroy; override;
    procedure Bewegung();
  end;


  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Shape1: TShape;
    Button1: TButton;
    Timer3: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure onclose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    
  private
    { Private-Deklarationen }
    punkt : TPunkt;
    sh : array of TShape;
    shpos : array of TPunkt;
    anzahl : integer;
  public
    { Public-Deklarationen }
    procedure erstellen();
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{procedure TPunkt.ermmittlehöhe;
begin
  rhoehe := form1.ClientHeight;
  Bewegung();
end;}


procedure TPunkt.Bewegung();
var
i : integer;
begin

// repeat
  case rRichtung of
 1:
  begin
    rpunkt.Y:= rpunkt.Y +3;
    if rpunkt.Y > rhoehe-33 then rRichtung := 2;

    Sleep(25);
  end;
 2: begin
    rpunkt.Y:= rpunkt.Y -3;

    if rpunkt.Y < 0 then rRichtung := 1;
    Sleep(25);
  end;

 end;
  Application.ProcessMessages;
  //until rschliessen = true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 punkt := TPunkt.Create;
 //punkt.ermmittlehöhe;

 end;

procedure TForm1.onclose(Sender: TObject; var Action: TCloseAction);

begin
timer1.Enabled:=false;
timer3.Enabled := false;
punkt.Free;
punkt.rschliessen := true;
setlength(sh, 0);
setlength(shpos, 0);

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
shape1.Top:= punkt.rpunkt.Y;
label1.Caption:=inttostr(punkt.rpunkt.Y);
end;



procedure TForm1.Timer3Timer(Sender: TObject);
var index : word ;
begin
for index := 0 to anzahl do
 begin
  sh[index].Top := shpos[index].rpunkt.Y;
// sh2[index].Bewegung;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var X: Integer;
begin
  x:= anzahl+1;
  setLength(sh, x);
  setLength(shpos, x);
  erstellen();
end;


procedure TForm1.erstellen;
begin
  shpos[anzahl]:= TPunkt.Create;
  sh[anzahl]:= TShape.Create(self);
  sh[anzahl].Parent:= self;
  sh[anzahl].Brush.Color:= clred;
  sh[anzahl].Shape:= stcircle;
  sh[anzahl].Top :=shpos[anzahl].rpunkt.Y;
  sh[anzahl].Left := random(200);
  sh[anzahl].Height:= 33;
  sh[anzahl].Width:= 33;
  shpos[anzahl].rTimer.Enabled:= true;
  timer3.Enabled:= true;
end;

constructor TPunkt.Create;
begin
 rpunkt.Y := 0;
 rRichtung:= 1;
 rhoehe := form1.ClientHeight;
 rtimer := TTimer.Create(nil);
 rtimer.Interval := 25;
 rtimer.Enabled := true;
 rtimer.OnTimer := rTimerTimer;
end;

procedure TPunkt.rTimerTimer(Sender : TObject);
begin
Bewegung();
end;

destructor TPunkt.Destroy;
begin
  rtimer.Enabled := false;
  rtimer.Free;
end;
end.
So ich hab jetzt an meinem Programm etwas rum probiert und verbessert jetzt kommen beim Schliessen keine Fehlermeldungen mehr. Wenn ich nun auf den Button klick um das erste shape zu erzeugen Funktioniert alles super es erscheint und fährt so wie es soll hoch und runter. Klick ich nochmal auf den Button bleibt das erste Shape stehen(was es nicht soll) und das Kontroll Shape wird langsamer(das wird immer schlimmer um so öfter man auf den Button klickt um neue Shapes zu erstellen). Ausserdem wen man jetzt die Anwendung schliessen will bleibt das programm einfach stehen.
Was hab ich falsch gemacht

Geändert von mkinzler (14. Mär 2012 um 19:17 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat