Delphi-PRAXiS
Seite 1 von 2  1 2      

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 15:03

Suche Hilfe bei Bewegung einer Form
 
Hallo, bin ein Delphi-Anfänger und ich soll für die Schule das Spiel Snake programmieren. Ich möchte vorerst den Kopf bewegen lassen. Ich kann den Kopf zeichen lassen und auch der Debugger läuft, aber ich kann ihn nicht bewegen. Wo liegt der Fehler?

mTSchlange ist der Kopf und der Schwanz in einem, wird jedoch nicht gezeichnet

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    {TiGameEngine: TTimer;}
    procedure FormCreate(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure TiGameEngineTimer (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(250,300,Image1,Futter);

Kopf:= TKopf.create(250,300,Image1,Futter);
Kopf.zeichnen();
Kopf.bewege_links();
Kopf.bewege_rechts();
Kopf.bewege_oben();
Kopf.bewege_unten();
end;

procedure TForm1.TiGameEngineTimer (Sender: TObject);
   begin
     IF (Links = True) and (Kopf.GetZXPosition > 0) Then
       begin
         Kopf.bewege_links();
       end;
     IF (Rechts = True) and (Kopf.GetZXPosition < 649) Then
       begin
         Kopf.bewege_rechts();
       end;
     IF (Hoch = True) and (Kopf.GetZYPosition > 0) Then
       begin
         Kopf.bewege_oben();
       end;
     IF (Runter = True) and (Kopf.GetZYPosition < 481) Then
       begin
         Kopf.bewege_unten();
       end;
    end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  IF (Key = VK_LEFT ) Then
    begin
       Links := True;
    end;
  IF (Key = VK_Right ) Then
    begin
       Rechts := True;
    end;
  IF (Key = VK_Up ) Then
    begin
       Hoch := True;
    end;
  IF (Key = VK_Down ) Then
    begin
       Runter := True;
    end;
end;

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

baumina 19. Jun 2013 15:12

AW: Suche Hilfe bei Bewegung einer Form
 
Ist KeyPreview des Formulars auf True, damit der Tastendruck überhaupt im FormKeyDown landet?

DeddyH 19. Jun 2013 15:16

AW: Suche Hilfe bei Bewegung einer Form
 
Wie sehen denn die verwendeten Klassen (THintergund etc.) aus? Und gewöhn Dir lieber gar nicht erst an, mit true oder false zu vergleichen, das kann zu falschen Ergebnissen führen.
Die OnKeyDown-Methode würde ich etwas anders schreiben:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT:
      Links := True;
    VK_Right:
      Rechts := True;
    VK_Up:
      Hoch := True;
    VK_Down
      Runter := True;
  end;
end;

abi9 19. Jun 2013 15:17

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von baumina (Beitrag 1219057)
Ist KeyPreview des Formulars auf True, damit der Tastendruck überhaupt im FormKeyDown landet?

Jetzt schon, klappt trotzdem noch nicht.. :?

baumina 19. Jun 2013 15:19

AW: Suche Hilfe bei Bewegung einer Form
 
Ja, ich befürchte, dass er in den Timer gar nicht reinkommt, weil du ja den Finger auf der Taste hast ... Klammer doch mal alles in KeyUp aus und schau ob dann irgendwas passiert, wenn du die Taste nach Links drückst und wieder loslässt.

EDIT : oder passiert da auch schon nix?
Kopf.bewege_links();
Kopf.bewege_rechts();
Kopf.bewege_oben();
Kopf.bewege_unten();

abi9 19. Jun 2013 15:19

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von DeddyH (Beitrag 1219058)
Wie sehen denn die verwendeten Klassen (THintergund etc.) aus? Und gewöhn Dir lieber gar nicht erst an, mit true oder false zu vergleichen, das kann zu falschen Ergebnissen führen.
Die OnKeyDown-Methode würde ich etwas anders schreiben:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT:
      Links := True;
    VK_Right:
      Rechts := True;
    VK_Up:
      Hoch := True;
    VK_Down
      Runter := True;
  end;
end;

Hat immer noch nicht geklappt :((
Aber so wie es aussieht ist das doch nur eine Vereinfachung von dem, was ich geschrieben habe..

DeddyH 19. Jun 2013 15:20

AW: Suche Hilfe bei Bewegung einer Form
 
Ist es, Du hast uns aber immer noch nicht die Klassen gezeigt.

Der schöne Günther 19. Jun 2013 15:21

AW: Suche Hilfe bei Bewegung einer Form
 
Probier es mal mit anderen Tasten, beispielsweise dem Nummernblock oder noch besser Buchstaben. Ich meine Dinge wie die Pfeiltasten sind Sonderfälle, die werden so garnicht normal an die Form durchgereicht.

abi9 19. Jun 2013 15:21

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von baumina (Beitrag 1219060)
Ja, ich befürchte, dass er in den Timer gar nicht reinkommt, weil du ja den Finger auf der Taste hast ... Klammer doch mal alles in KeyUp aus und schau ob dann irgendwas passiert, wenn du die Taste nach Links drückst und wieder loslässt.

Ne, auch nicht die Lösung :(

Ein Freund meinte außerdem irgendwie, dass der Kopf nur auf den Koordinaten 250, 300 createt wird

Delphi-Quellcode:
Kopf:= TKopf.create(250,300,Image1,Futter);
Liegt da irgendwo der Fehler?

DeddyH 19. Jun 2013 15:23

AW: Suche Hilfe bei Bewegung einer Form
 
Woher sollen wir das wissen, wenn wir die Klassen nicht kennen? Ich frag ja nicht umsonst die ganze Zeit danach.

abi9 19. Jun 2013 15:25

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von DeddyH (Beitrag 1219065)
Woher sollen wir das wissen, wenn wir die Klassen nicht kennen? Ich frag ja nicht umsonst die ganze Zeit danach.

Also soll ich hier die Kopf-Klasse reinkopieren?

Ginko 19. Jun 2013 15:26

AW: Suche Hilfe bei Bewegung einer Form
 
Oder wenns zu lang ist einen Anhang machen, da am besten mal alle "mT" Units mit rein.

DeddyH 19. Jun 2013 15:26

AW: Suche Hilfe bei Bewegung einer Form
 
mTHintergrund, mTSchlange, mTFutter und mTKopf werden wir wohl alle brauchen.

[edit] Und wie mein Vorredner schon sagte, bitte als Anhang ;) [/edit]

abi9 19. Jun 2013 15:30

AW: Suche Hilfe bei Bewegung einer Form
 
Liste der Anhänge anzeigen (Anzahl: 5)
Anhang 39430

Anhang 39431

Anhang 39432

Anhang 39433

Anhang 39434
Zitat:

Zitat von deddyh (Beitrag 1219070)
mthintergrund, mtschlange, mtfutter und mtkopf werden wir wohl alle brauchen.

[edit] und wie mein vorredner schon sagte, bitte als anhang ;) [/edit]


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

AW: Suche Hilfe bei Bewegung einer Form
 
Ich bleibe dabei, die Tastendrucke funktionieren noch nicht einmal. Ersetze das "bewegeSchlange" doch mal durch ein ShowMessage, allein das wird schon nicht kommen. Oder ich mache grade auch etwas gewaltig falsch:

Ich bekomme ohne weitere Hilfsmittel kein "onKeyDown" auf einer Form und das noch mit Pfeiltasten zum Laufen. Mit anderen Tasten wie Buchstaben allerdings schon.

abi9 19. Jun 2013 15:32

AW: Suche Hilfe bei Bewegung einer Form
 
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 39435

baumina 19. Jun 2013 15:34

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1219072)
Ich bleibe dabei, die Tastendrucke funktionieren noch nicht einmal. Ersetze das "bewegeSchlange" doch mal durch ein ShowMessage, allein das wird schon nicht kommen. Oder ich mache grade auch etwas gewaltig falsch:

Ich bekomme ohne weitere Hilfsmittel kein "onKeyDown" auf einer Form und das noch mit Pfeiltasten zum Laufen. Mit anderen Tasten wie Buchstaben allerdings schon.

Mein kleines Testprogramm (Formular + Image drauf) kommt in die OnKeyDown rein, wenn ich die Pfeiltasten nehm, daran liegts nicht. Es kann nur am Timer oder am Zeichnen liegen.

nahpets 19. Jun 2013 15:35

AW: Suche Hilfe bei Bewegung einer Form
 
@DeddyH
Zitat:

Zitat von DeddyH (Beitrag 1219058)
Wie sehen denn die verwendeten Klassen (THintergund etc.) aus? Und gewöhn Dir lieber gar nicht erst an, mit true oder false zu vergleichen, das kann zu falschen Ergebnissen führen.
Die OnKeyDown-Methode würde ich etwas anders schreiben:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_LEFT:
      Links := True;
    VK_Right:
      Rechts := True;
    VK_Up:
      Hoch := True;
    VK_Down
      Runter := True;
  end;
end;

Dein verkürzter Quelltext ist zwar syntaktisch korrekt und sicherlich "besser" als das Original: Aber er enthält weiterhin den gleichen Fehler: Ist Links einmal True, bleibt Links = True (dito für die drei anderen Variabeln).
Delphi-Quellcode:
procedure TForm1.TiGameEngineTimer (Sender: TObject);
   begin
     IF (Links = True) and (Kopf.GetZXPosition > 0) Then
       begin
         Kopf.bewege_links();
       end;
 ...
Ist der Kopf einmal links, bleibt er immer links.
Mir erscheint eine derartige Lösung sinnvoller:
Delphi-Quellcode:
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;
Key kann hier die Werte 37 bis 40 enthalten, die problemlos beim Form ankommen, diesbezügliche Befürchtungen sind unbegründet.
Mit
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ShowMessage(IntToStr(key));
end;
schön überprüfbar (zumindest bei Delphi 7). Im Debugger wird's nicht anders aussehen.

abi9 19. Jun 2013 15:38

AW: Suche Hilfe bei Bewegung einer Form
 
Ein Freund meinte außerdem irgendwie, dass der Kopf nur auf den Koordinaten 250, 300 createt wird

Kopf:= TKopf.create(250,300,Image1,Futter); Liegt da irgendwo der Fehler?

Habt ihr das eigentlich berücksichtigt? :) Hatte ich ja eben geschrieben

abi9 19. Jun 2013 15:40

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von nahpets (Beitrag 1219075)
@DeddyH
[/DELPHI]

Dein verkürzter Quelltext ist zwar syntaktisch korrekt und sicherlich "besser" als das Original: Aber er enthält weiterhin den gleichen Fehler: Ist Links einmal True, bleibt Links = True (dito für die drei anderen Variabeln).
Delphi-Quellcode:
procedure TForm1.TiGameEngineTimer (Sender: TObject);
   begin
     IF (Links = True) and (Kopf.GetZXPosition > 0) Then
       begin
         Kopf.bewege_links();
       end;
 ...
Ist der Kopf einmal links, bleibt er immer links.
[/QUOTE]

Bei Snake soll die Schlange doch auch durchgehend in diese Richtung verlaufen

baumina 19. Jun 2013 15:42

AW: Suche Hilfe bei Bewegung einer Form
 
EIDT : hat sich erledigt

nahpets 19. Jun 2013 15:45

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von abi9 (Beitrag 1219077)
Bei Snake soll die Schlange doch auch durchgehend in diese Richtung verlaufen

Auch wenn die Taste VK_Down gedrückt wurde?
Auch wenn die Taste VK_Right gedrückt wurde?

Wenn also einmal links gedrückt wurde, läuft die Schlange nach links.
Wird nun rechts gedrückt, läuft die Schlange nach rechts.
Da in der Abfrage geprüft wird, ob links gedrückt wurde, geht's nach links und dann wird nach rechts geprüft und die Schlange geht nach rechts und damit bleibt sie immer wo sie ist. Analog für oben und unten. Und das scheint doch momentan das Problem zu sein?

baumina 19. Jun 2013 15:46

AW: Suche Hilfe bei Bewegung einer Form
 
@nahpets : gugg dir auch die OnKeyUp an, dort wird's wieder auf False gesetzt.

DeddyH 19. Jun 2013 15:57

AW: Suche Hilfe bei Bewegung einer Form
 
Ich habe jetzt nur kurz in 2 der Dateien hineingeschaut. Im Konstruktor fehlt mir jeweils der inherited-Aufruf, Destruktoren fehlen ganz, obwohl hier die privaten Objekte, die im Konstruktor angelegt werden, freigegeben werden sollten. Und wieso sind alle Methoden virtuell, obwohl es keine Ableitungen gibt? Gut, das ist nicht weiter schlimm, aber virtuell nur einfach so sieht auch komisch aus.

abi9 19. Jun 2013 15:59

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von DeddyH (Beitrag 1219082)
Ich habe jetzt nur kurz in 2 der Dateien hineingeschaut. Im Konstruktor fehlt mir jeweils der inherited-Aufruf, Destruktoren fehlen ganz, obwohl hier die privaten Objekte, die im Konstruktor angelegt werden, freigegeben werden sollten. Und wieso sind alle Methoden virtuell, obwohl es keine Ableitungen gibt? Gut, das ist nicht weiter schlimm, aber virtuell nur einfach so sieht auch komisch aus.

Das heißt jetzt?? :D
Sorry, aber bin noch ein Anfänger²

nahpets 19. Jun 2013 16:06

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von baumina (Beitrag 1219080)
@nahpets : gugg dir auch die OnKeyUp an, dort wird's wieder auf False gesetzt.

Schön, stimmt, hab' ich nicht gesehen :oops:

D. H.: Wenn nicht während des Timerereignisses eine Taste gedrückt ist, kann auch keine Bewegung erfolgen.

Wenn ich jetzt wieder daneben liege, liegt's am Wetter, das heute meine Denkfähigkeit noch weiter einschränkt, als im Normalzustand ;-)

Eigentlich dachte ich, dass die Schlange solange in eine Richtung läuft, bis man diese per Tastatur ändert. Hier läuft sie aber nur solange in eine Richtung, wie eine Taste gedrückt gehalten wird und in diesen Zeitraum ein Timerereignis fällt. Ist das so gewünscht?

abi9 19. Jun 2013 16:08

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von nahpets (Beitrag 1219085)
Zitat:

Zitat von baumina (Beitrag 1219080)
@nahpets : gugg dir auch die OnKeyUp an, dort wird's wieder auf False gesetzt.

Schön, stimmt, hab' ich nicht gesehen :oops:

D. H.: Wenn nicht während des Timerereignisses eine Taste gedrückt ist, kann auch keine Bewegung erfolgen.

Wenn ich jetzt wieder daneben liege, liegt's am Wetter, das heute meine Denkfähigkeit noch weiter einschränkt, als im Normalzustand ;-)

Eigentlich dachte ich, dass die Schlange solange in eine Richtung läuft, bis man diese per Tastatur ändert. Hier läuft sie aber nur solange in eine Richtung, wie eine Taste gedrückt gehalten wird und in diesen Zeitraum ein Timerereignis fällt. Ist das so gewünscht?

ne eigentlich nicht, sie sollte schon durchlaufen, bis sie in eine andere richtung gelenkt wird.

nahpets 19. Jun 2013 16:12

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von abi9 (Beitrag 1219086)
ne eigentlich nicht, sie sollte schon durchlaufen, bis sie in eine andere richtung gelenkt wird.

Tun sie bei der von Dir implementierten Logik aber nicht.
Kommentiere bitte mal Dein onKeyUP aus und ändere das onKeyDown nach meinem Vorschlag und dann schau mal, ob sich was ändert. Wenn nicht, gebe ich mich geschlagen.

abi9 19. Jun 2013 16:14

AW: Suche Hilfe bei Bewegung einer Form
 
Zitat:

Zitat von nahpets (Beitrag 1219088)
Zitat:

Zitat von abi9 (Beitrag 1219086)
ne eigentlich nicht, sie sollte schon durchlaufen, bis sie in eine andere richtung gelenkt wird.

Tun sie bei der von Dir implementierten Logik aber nicht.
Kommentiere bitte mal Dein onKeyUP aus und ändere das onKeyDown nach meinem Vorschlag und dann schau mal, ob sich was ändert. Wenn nicht, gebe ich mich geschlagen.

wie jetzt? ich kann den kopf doch nicht einmal bewegen..

Ginko 19. Jun 2013 16:21

AW: Suche Hilfe bei Bewegung einer Form
 
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;

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 14:06 Uhr.
Seite 1 von 2  1 2      

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