Luki1987
Ihr wollt Wacker sein?
|
Hallo. Da ich wieder einmal in Informatik eine Hü bekommen habe, komme ich wieder wo nicht weiter... Also das Programm soll so aussehen, dass man ein Rechteck hat, das auf ein Image gezeichnet wird. Nun soll man dieses Rechteck durch das Drücken von den Pfeiltasten auf der Tastatur bewegen können.
Das Prog dürfte eigentlich kein Problem darstellen, nur weiß ich nicht, wie ich es schaffe, dass das Programm realisiert welche Taste nun gedrückt worden ist? Gibt's da irgendeine Funktion? Bei Ereignisse habe ich nichts gefunden und OnKeyPress gibt's ja nur im Form und nicht im Image (außerdem wird da nicht eingegrenzt welche Taste gedrückt wurde!).
Kennt sich da vielleicht jemand aus? Big TIA! MfG
Bearbeitet von Luki1987 am 19.12.2004, 21:12
|
Ringding
Pilot
|
OnKeyDown brauchst du hier, weil du nur damit die Cursortasten kriegst. Im Parameter Key wird eh mitgeliefert, welche Taste gedrückt wurde. Ich glaub, die Cursortasten heißen VK_DOWN & co.
Aus dem Event Handler vom Form kannst du ja ohne Probleme aufs Image zugreifen.
|
Luki1987
Ihr wollt Wacker sein?
|
@Ringding: Ganz großes Danke! Also das habe ich mittlerweile hinbekommen, dass er etwas macht, wenn man auf eine der Tasten drückt ![;)](/images/smilies/wink.gif) Nur muss ich es jetzt noch schaffen, dass er von der X1/X2/Y1/Y2 (jeweils welche Taste gedrückt wurde) jeweils 1 Pixel abzieht/addiert... Soll ich die Koordinaten als Variablen anlegen oder wie kann das gehen? Noch einmal TIA!
|
Ringding
Pilot
|
Ja klar als Variablen, wie denn sonst?
|
Luki1987
Ihr wollt Wacker sein?
|
Ja, das habe ich auch gerade gemacht. Das Viereck verändert auch seine Position, nur habe ich noch einen Logikfehler drinnen (wann welcher Wert erhöht/erniedrigt werden muss). Hier einmal der Quellcode (es liegt imho nur mehr am -1/+1...):
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Buttons, StdCtrls;
type TForm1 = class(TForm) Image1: TImage; Button1: TButton; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; X1,X2,Y1,Y2:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin image1.canvas.brush.color:=clblack; image1.canvas.Rectangle(240,240,260,260); X1:=240; X2:=240; Y1:=260; Y2:=260; button1.Visible:=false; end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key=VK_DOWN then begin image1.canvas.brush.color:=clwhite; image1.canvas.rectangle(0,0,500,500); image1.Canvas.Brush.color:=clblack; image1.canvas.rectangle(X1,X2+1,Y1,Y2+1); end;
if Key=VK_UP then begin image1.canvas.brush.color:=clwhite; image1.canvas.rectangle(0,0,500,500); image1.Canvas.Brush.color:=clblack; image1.canvas.rectangle(X1,X2-1,Y1,Y2-1); end;
if Key=VK_LEFT then begin image1.canvas.brush.color:=clwhite; image1.canvas.rectangle(0,0,500,500); image1.Canvas.Brush.color:=clblack; image1.canvas.rectangle(X1-1,X2,Y1-1,Y2); end;
if Key=VK_RIGHT then begin image1.canvas.brush.color:=clwhite; image1.canvas.rectangle(0,0,500,500); image1.Canvas.Brush.color:=clblack; image1.canvas.rectangle(X1+1,X2,Y1+1,Y2); end; end;
end.
Bearbeitet von Luki1987 am 19.12.2004, 21:04
|
Luki1987
Ihr wollt Wacker sein?
|
Fehler gefunden. Ich muss X1, X2, Y1, Y2 nachdem ich sie erhöhe natürlich auch wieder neu belegen. Also SOLVED! Thx noch einmal für deine Hilfe! MfG
|