![]() |
AW: Form wird nach dem compilieren
Also, mal ganz langsam zum mitschreiben: Du hast eine REPEAT-Schleife, die erst beendet wird, wenn die Variable rschliessen, die du im FormCreate auf FALSE setzt, TRUE geworden ist. Kannst du mir erklären, wo innerhalb deiner Schleife diese Variable den Wert TRUE erhalten soll?
Delphi-Quellcode:
Eine Endlos-Schleife ist eine Schleife, deren Endbedingung niemals eintritt.
repeat
case rRichtung of 1: begin // rRichtung := 1 rpunkt.Y:= rpunkt.Y +3; if rpunkt.Y > rhoehe-33 then rRichtung := 2; Sleep(25); end; 2: begin // rRichtung := 2 rpunkt.Y:= rpunkt.Y -3; if rpunkt.Y < 0 then rRichtung := 1; Sleep(25); end; end; // case rRichtung of Application.ProcessMessages; until rschliessen = true; // wo wird rschließen TRUE??? end; |
AW: Form wird nach dem compilieren
rschliessen wird true wenn die anwendung geschlossen wird :) deshalb heisst es ja auch so
|
AW: Form wird nach dem compilieren
Zitat:
|
AW: Form wird nach dem compilieren
Zitat:
|
AW: Form wird nach dem compilieren
Zitat:
Delphi-Quellcode:
Hier fehlen noch der Contructor und eine zeichen-Methode so ungefähr:
type
TPunkt = class(TObject) private { Private-Deklarationen } rRichtung : Integer; rhoehe : Integer; rpunkt : TPoint; rschliessen : Boolean; // procedure ermmittlehöhe(); public { Public-Deklarationen } procedure Bewegung(); end; ...
Delphi-Quellcode:
Ich hoffe ich konnte dir bisschen auf die Sprünge helfen ;)
type
TPunkt = class(TObject) private { Private-Deklarationen } rRichtung : Integer; rhoehe : Integer; rpunkt : TPoint; rschliessen : Boolean; // procedure ermmittlehöhe(); public { Public-Deklarationen } procedure Bewegung(); constructor Create(); procedure zeichnen(aCanvas : TCanvas); end; .... constructor TPunkt.Create(); begin // punkte initialisieren und vielleicht Farbe noch setzen end; procedure TPunkt.zeichnen(aCanvas : TCanvas); begin aCanvas.brush.color := clRed; // ? aCanvas.ellipse(deine TPunktkoordinaten); end; ... |
AW: Form wird nach dem compilieren
Nein mit der Classe TPunkt will ich keine Shape zeichnen sie soll lediglich die x oder y coordinate eines objektes aus einer anderen classe veränder so das das object eben hoch und runter fährt(oder von links nach rechts und umgekehrt).
|
AW: Form wird nach dem compilieren
Delphi-Quellcode:
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.
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. Was hab ich falsch gemacht :?: |
AW: Form wird nach dem compilieren
Also ich hab mal weiter experimentiert und jetzt geschafft das das Programm nich immer langsamer wird das andere Problem bleibt aber bestehen. Hier Hab ich mal die Projekt datein
![]() Gruß Arni |
AW: Form wird nach dem compilieren
Weiß keiner ne Antwort? :?:
|
AW: Form wird nach dem compilieren
Tipp: Das Puschen ist innerhalb von 24 Stunden verboten sehr ungern gesehn.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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