Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#18

AW: Suche Hilfe bei Bewegung einer Form

  Alt 19. Jun 2013, 16:35
@DeddyH
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.
  Mit Zitat antworten Zitat