"We are back" « oc.at

SOLVED: Delphi: Problem mit image.canvas

Luki1987 19.12.2004 - 19:04 478 5
Posts

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
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?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
@Ringding: Ganz großes Danke!
Also das habe ich mittlerweile hinbekommen, dass er etwas macht, wenn man auf eine der Tasten drückt ;)
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
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Ja klar als Variablen, wie denn sonst?

Luki1987

Ihr wollt Wacker sein?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
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?
Avatar
Registered: Oct 2003
Location: Tirol
Posts: 1630
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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz