Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Form wird nach dem compilieren nicht angezeigt (https://www.delphipraxis.net/166829-form-wird-nach-dem-compilieren-nicht-angezeigt.html)

Perlsau 1. Mär 2012 20:41

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:
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;
Eine Endlos-Schleife ist eine Schleife, deren Endbedingung niemals eintritt.

fox67 1. Mär 2012 20:47

AW: Form wird nach dem compilieren
 
rschliessen wird true wenn die anwendung geschlossen wird :) deshalb heisst es ja auch so

Perlsau 1. Mär 2012 21:12

AW: Form wird nach dem compilieren
 
Zitat:

Zitat von fox67 (Beitrag 1153959)
rschliessen wird true wenn die anwendung geschlossen wird :) deshalb heisst es ja auch so

Was soll dein Programm denn überhaupt machen? Wenn ich deinen Code bei mir laufen lasse, hagelt's nämlich erstmal Zugriffsfehler. Du greifst in FormCreate auf noch nicht initialisierte Objekte zu. Mach das doch in einem Button statt in FormCreate.

fox67 1. Mär 2012 21:26

AW: Form wird nach dem compilieren
 
Zitat:

Was soll dein Programm denn überhaupt machen? Wenn ich deinen Code bei mir laufen lasse, hagelt's nämlich erstmal Zugriffsfehler. Du greifst in FormCreate auf noch nicht initialisierte Objekte zu. Mach das doch in einem Button statt in FormCreate.
Auf welche? Mein Programm soll nichts anderes als shapes in form von einem kreis hoch und runter fahren lassen jedemal wenn ich auf den buttonklick ensteht ein neues shape das auch hoch und runter fährt hatt noch keinen wirklichen sinn aber ich will es später vieleicht in einem spiel einsetzen

Coffeecoder 2. Mär 2012 08:11

AW: Form wird nach dem compilieren
 
Zitat:

Zitat von fox67 (Beitrag 1153969)
Auf welche? Mein Programm soll nichts anderes als shapes in form von einem kreis hoch und runter fahren lassen jedemal wenn ich auf den buttonklick ensteht ein neues shape das auch hoch und runter fährt hatt noch keinen wirklichen sinn aber ich will es später vieleicht in einem spiel einsetzen

Wie ich sehe, erstellst du kein Shape oder anderes um auf dem Canvas zu zeichnen:
Delphi-Quellcode:
type
  TPunkt = class(TObject)
    private
    { Private-Deklarationen }
     rRichtung : Integer;
     rhoehe : Integer;
     rpunkt : TPoint;
     rschliessen : Boolean;
//     procedure ermmittlehöhe();
     public
    { Public-Deklarationen }
    procedure Bewegung();

  end;

...
Hier fehlen noch der Contructor und eine zeichen-Methode so ungefähr:
Delphi-Quellcode:
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;
...
Ich hoffe ich konnte dir bisschen auf die Sprünge helfen ;)

fox67 2. Mär 2012 12:24

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).

fox67 3. Mär 2012 09:51

AW: Form wird nach dem compilieren
 
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 :?:

fox67 13. Mär 2012 17:04

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 http://dl.dropbox.com/u/62039624/Delphi%20projekt.zip

Gruß Arni

fox67 13. Mär 2012 18:24

AW: Form wird nach dem compilieren
 
Weiß keiner ne Antwort? :?:

himitsu 13. Mär 2012 19:07

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.
Seite 3 von 4     123 4      

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