Delphi-PRAXiS
Seite 4 von 6   « Erste     234 56      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Suche Hilfe bei Bewegung einer Form (https://www.delphipraxis.net/175411-suche-hilfe-bei-bewegung-einer-form.html)

abi9 19. Jun 2013 16:28

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von Ginko (Beitrag 1219090)
in mTKopf steht folgendes:

Delphi-Quellcode:
procedure TKopf.bewege_links;
begin
  zXPosition := zXPosition - zXGeschwindigkeit;
end;
was heißt hier werden nur die Koordinaten geändert, es muss aber wieder neu gezeichnet werden.

Es sollte doch dann eigentlich so in der Art gehen:

Delphi-Quellcode:
 IF (Links = True) and (Kopf.GetZXPosition > 0) Then  
     begin
       Kopf.bewege_links();
       //hier noch mal altes Image löschen ?
       Kopf.zeichne();  
     end;

so klappts auch nicht :(
kann es nicht sein, dass hier :

Delphi-Quellcode:
Kopf:= TKopf.create(250,300,Image1,Futter);
Kopf.zeichnen();
der Kopf nur an den Koordinaten 250,300 sein kann, da nur dort ein create vorhanden ist?

Der schöne Günther 19. Jun 2013 16:31

AW: Suche Hilfe bei Bewegung einer Form
 
Nochmal: Du zeichnest den Kopf nur ein einziges mal. Danach nie wieder.

Hast du auch das
Delphi-Quellcode:
Kopf.zeichne()
nach allen Abfragen eingesetzt oder nur gerade für den Links-Fall?

Ginko 19. Jun 2013 16:33

AW: Suche Hilfe bei Bewegung einer Form
 
Also bei mir funktioniert es so:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, mTHintergrund, mTSchlange, mTFutter, mTKopf;

type

  { TForm1 }

  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private-Deklarationen }
    Hintergrund : THintergrund;
    Links,Rechts,Hoch,Runter : Boolean;
    Kopf : TKopf;
  public
    { Public-Deklarationen }
    Schlange : TSchlange;
    Futter : TFutter;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Hintergrund:= THintergrund.create(Image1);
  Hintergrund.zeichnen();

  Schlange:= TSchlange.create(Image1.Width div 2,Image1.Height-30,Image1,Futter);

  Kopf:= TKopf.create(Image1.Width div 2 ,Image1.Height-30 ,Image1,Futter);
  Kopf.zeichnen();
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Links := Key = VK_LEFT;
  Rechts := Key = VK_Right;
  Hoch := Key = VK_Up;
  Runter := Key = VK_Down;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   IF (Links = True) and (Kopf.GetZXPosition > 0) Then  
     begin
       Kopf.bewege_links();
       Kopf.zeichnen;
     end;
   IF (Rechts = True) and (Kopf.GetZXPosition < 649) Then
     begin
       Kopf.bewege_rechts();
       Kopf.zeichnen;
     end;
   IF (Hoch = True) and (Kopf.GetZYPosition > 0) Then
     begin
       Kopf.bewege_oben();
       Kopf.zeichnen;
     end;
   IF (Runter = True) and (Kopf.GetZYPosition < 481) Then
     begin
       Kopf.bewege_unten();
       Kopf.zeichnen;
     end;
  end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Links := Key = VK_LEFT;
  Rechts := Key = VK_Right;
  Hoch := Key = VK_Up;
  Runter := Key = VK_Down;
end;
end.

abi9 19. Jun 2013 16:34

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1219093)
Nochmal: Du zeichnest den Kopf nur ein einziges mal. Danach nie wieder.

Hast du auch das
Delphi-Quellcode:
Kopf.zeichne()
nach allen Abfragen eingesetzt oder nur gerade für den Links-Fall?

Ich kann dich da irgendwie nicht verstehen.. Wie muss ich das dann machen?

Der schöne Günther 19. Jun 2013 16:36

AW: Suche Hilfe bei Bewegung einer Form
 
Eigentlich genau so wie Ginko es gerade noch einmal schön ausgeschrieben hat: Nur durch das Ändern der Zahlen-Variablen ändert sich auf dem Bildschirm ja noch nichts. Du musst nach jeder Änderung (also einer Bewegung) die Zeichne()-Prozedur aufrufen damit diese die Änderungen überhaupt auf den Bildschirm malen kann.

Ginko 19. Jun 2013 16:39

AW: Suche Hilfe bei Bewegung einer Form
 
Man sollte noch die Klassen die man mit Create erstellt hat wieder freigeben.

Also:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Hintergrund);
  FreeAndNil(Kopf);
  //usw...
end;

abi9 19. Jun 2013 16:46

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von Ginko (Beitrag 1219097)
Man sollte noch die Klassen die man mit Create erstellt hat wieder freigeben.

Also:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(Hintergrund);
  FreeAndNil(Kopf);
  //usw...
end;

Vielen Dank :)))
Aber du hast hoch und runter vertauscht :)
Was soll das aber heißen, Klassen freizugeben?

Ginko 19. Jun 2013 16:53

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Während man jederzeit auf die Daten eines Records zugreifen kann, muss bei einer Klasse zunächst Speicher angefordert und zum Schluss wieder freigeben werden. Die speziellen Methoden Create und Destroy bzw. Free sind in jeder Klasse enthalten und müssen nicht gesondert programmiert werden. Zur Freigabe des Speichers sollte dabei Free bevorzugt verwendet werden.
Siehe hier http://de.wikibooks.org/wiki/Program...ascal:_Klassen,
unter allgemeiner Aufbau.

An Hoch und runter hatte ich nichts geändert, war schon vertauscht.
Mfg

DeddyH 19. Jun 2013 17:00

AW: Suche Hilfe bei Bewegung einer Form
 
Deshalb ja auch mein Hinweis auf den Destruktor. Im Konstruktor werden Objekte angelegt, deshalb sollte es auch einen Destruktor geben, der die wieder abräumt.

abi9 19. Jun 2013 18:34

AW: Suche Hilfe bei Bewegung einer Form
 
Eine Frage hätte ich noch : Wie kann ich den Schritt der Bewegung schreiben? :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr.
Seite 4 von 6   « Erste     234 56      

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