bin noch völliger Anfänger in Lazarus und hab damit angefangen ein Objekt (Bild) in der Form1 zu erstellen. Weiteres hab ich es geschaft das Objekt mittels Steuerung der Tasten: w,s,a und d über die Form1 zu jagen. Jetzt würde ich gerne eine Timer einbauen, der mein Objekt in eine Richtung bewegt und durch drücken einer der Steuerungstasten die Richtung entsprechend ändert. Leider hab ich in der Richtung noch keine brauchbaren Ergebnisse gefunden, außer vereinzelte Richtungsweiser (YouTube-Tutorials), aus dennen ich dann selbst Versuche gestartet habe. Da kamen dann leider Fehlermeldungen, da in der gewünschten Prozedur zb.: der Timer nicht integriert werden kann.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Shape1.Left:=Shape1.Left+1;
if (key = 87) then //87 steht für Taste w
begin
Shape1.Top:=Shape1.Top-1;
end
end;
end;
dies funktioniert aber nicht.
Bitte um Hilfestellung
MfG
freeprogrammer
Zuletzt geändert von Lori am Do 27. Dez 2012, 15:36, insgesamt 1-mal geändert.
Grund:richtiger Highlighter
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Fileutil, Forms, Controls, Graphics, Dialogs
, Buttons, thumbcontrol, Spin, ComCtrls, InFormWindow, StdCtrls, ExtCtrls;
type
{ Tform1 }
Tform1 = class(TForm)
Shape1: Tshape;
Timer1: Ttimer;
Procedure Formkeydown(Sender: Tobject; Var Key: Word; Shift: Tshiftstate);
Procedure Timer1timer(Sender: Tobject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: Tform1;
//Laufrichtung wird mit den konstanten oben links rechts und unten ausgelesen und beschrieben
laufrichtung:integer;
//tempo gibt das tempo an mit der sich das Shape über die form bewegen soll
tempo:integer=1;
implementation
const
oben=0;
unten=1;
links=2;
rechts=3;
{$R *.lfm}
{ Tform1 }
Procedure Tform1.Formkeydown(Sender: Tobject; Var Key: Word; Shift: Tshiftstate
);
Begin
if key=87 then laufrichtung:=oben;
if key=...
End;
//Timer1.intervall ist 100 oder Wahlweise 10(beispiele...)
Procedure Tform1.Timer1timer(Sender: Tobject);
Begin
case Laufrichtung of
Oben:Shape1.top:=shape1.top-tempo;
Unten:Shape1.top:=shape1.top+tempo;
Links:shape1.left:=shape1.left-tempo;
Rechts:shape1.left:=shape1.left+tempo;
End;
End;
end.
Komoluna
Programmer: A device to convert coffee into software.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Fileutil, Forms, Controls, Graphics, Dialogs
, Buttons, thumbcontrol, Spin, ComCtrls, InFormWindow, StdCtrls, ExtCtrls;
type
{ Tform1 }
Tform1 = class(TForm)
Shape1: Tshape;
Timer1: Ttimer;
Procedure Formkeydown(Sender: Tobject; Var Key: Word; Shift: Tshiftstate);
Procedure Timer1timer(Sender: Tobject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: Tform1;
//Laufrichtung wird mit den konstanten oben links rechts und unten ausgelesen und beschrieben
laufrichtung:integer;
//tempo gibt das tempo an mit der sich das Shape über die form bewegen soll
tempo:integer=1;
implementation
const
oben=0;
unten=1;
links=2;
rechts=3;
{$R *.lfm}
{ Tform1 }
Procedure Tform1.Formkeydown(Sender: Tobject; Var Key: Word; Shift: Tshiftstate
);
Begin
if key=87 then laufrichtung:=oben;
if key=...
End;
//Timer1.intervall ist 100 oder Wahlweise 10(beispiele...)
Procedure Tform1.Timer1timer(Sender: Tobject);
Begin
case Laufrichtung of
Oben:Shape1.top:=shape1.top-tempo;
Unten:Shape1.top:=shape1.top+tempo;
Links:shape1.left:=shape1.left-tempo;
Rechts:shape1.left:=shape1.left+tempo;
End;
End;
end.
Komoluna
Servus Komoluna,
danke für die nette Begrüßung und den tollen Code. Funktioniert wunderbar.
Komolunas Lösung ist gut aber ich würde ein Änderung machen und zwar Laufrichtung mit zwei neuen variablen ersetzen, dann braucht man bei Bewegung if/case-Abfragen nicht.