SOLVED: Delphi: Problem mit image.canvas

Seite 1 von 1 - Forum: Applications, Apps & Drivers auf overclockers.at

URL: https://www.overclockers.at/applications/solved_delphi_problem_mit_image_canvas_132429/page_1 - zur Vollversion wechseln!


Luki1987 schrieb am 19.12.2004 um 19:04

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


Ringding schrieb am 19.12.2004 um 19:34

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 schrieb am 19.12.2004 um 20:47

@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 schrieb am 19.12.2004 um 20:57

Ja klar als Variablen, wie denn sonst?


Luki1987 schrieb am 19.12.2004 um 21:01

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.


Luki1987 schrieb am 19.12.2004 um 21:07

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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026