Variablen übergeben

Hallo,

ich habe ein Problem und zwar möchte ich bei einem Programm, dass in einer OnMouseDown-Prozedur sich die Koordinaten der Maus gemerkt werden.In einer 2. OnMouseUp-Prozedur soll dies wiederum geschehen. Die Vier Koordinaten sollen dann an eine OnKeyDown-Prozedur übergeben werden.Das ist mein schon geschriebener Quellcode unter dem Text(Die FormCreate-Prozedur ist nur damit ich das auch testen kann).
Könnte mir jemand sagen wo der Fehler liegt und wie ich ihn beheben kann, damit es funktioniert.

Danke schonmal im Voraus.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;

type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1OnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1OnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Form1OnKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=clBlack;
Image1.Canvas.Rectangle(0,0,300,300);
end;

procedure TForm1.Image1OnMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var Mausposition:TPoint;
Oben,Links:integer;
begin
Mausposition:=ScreenToClient(Mouse.CursorPos);
x:=Mausposition.x;
y:=Mausposition.y;
Oben:=Image1.Top;
Links:=Image1.Left;
TForm1.OnKeyDown(x,y);
end;

procedure TForm1.Image1OnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var Mausposition:TPoint;
w,z:integer;
begin
Mausposition:=ScreenToClient(Mouse.CursorPos);
w:=Mausposition.x;
z:=Mausposition.y;
TForm1.OnKeyDown(w,z);
end;

procedure TForm1.Form1OnKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState; w,x,y,z:integer);
begin
if Key = VK_DELETE{46/$2E} then
begin
Image1.Canvas.Brush.Color:=clWhite;
Image1.Canvas.Rectangle(x-Oben,y-Links,w-Oben,z-Links);
end;
end;

end.

Hallo Maehks,

dein Quelltext hat leider so viele Fehler, dass ich nicht weiß wo ich anfangen soll. Ich bin mir auch nicht ganz klar was du tun willst. Ich vermute mal, das Programm soll beim Drücken der Maustaste die Cursorposition speichern und dasselbe beim Loslassen der Maustaste. Wenn nun die Del-Taste betätigt wird, dann soll ein Rechteck von dem Start- bis zum Endpunkt gezeichnet werden. Ist das so? Das würde ich wie unten gezeigt machen. Da ich deinen Wissensstand nicht kenne, weiß ich auch nicht wo ich mit dem Erklären anfangen sollte. Vielleicht damit, dass du in jedem Fall erst einmal einige Grundlagen lernen musst um Programme zu schreiben. Ein Tutorial für Anfänger wäre da nicht schlecht. Ich habe leider keines zur Hand, aber eventuell weiß ja einer der anderen WWW-ler eines. Hier nun der Quelltext. Vielleicht verstehst du ja ein Kleinwenig davon.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls;

type
 TForm1 = class(TForm)
 Image1: TImage;
 procedure FormCreate(Sender: TObject);
 procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
 procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
 procedure FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
 private
 { Private-Deklarationen }
 FPaintRect : TRect;
 public
 { Public-Deklarationen }
 end;

var
 Form1: TForm1;

implementation

uses Types;

{$R \*.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Image1.Canvas.Brush.Color := clBlack;
 Image1.Canvas.Rectangle(0,0,300,300);
 FPaintRect := Rect(0, 0, 0, 0);
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 FPaintRect.TopLeft := ScreenToClient(Mouse.CursorPos);
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 FPaintRect.BottomRight := ScreenToClient(Mouse.CursorPos);
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
 if (Key = VK\_DELETE) then begin
 Image1.Canvas.Brush.Color := clWhite;
 OffsetRect(FPaintRect, -Image1.Left, -Image1.Top);
 Image1.Canvas.Rectangle(FPaintRect);
 end;
end;

end.

Gruß Mike