Hallo Thomas,
ich denke mal, das ist ein völlig falscher Ansatz,
nimm ein Image, zeichne dort die Rechtecke mit
Delphi-Quellcode:
Type
Tr=Record
x1:Integer;
y1:Integer
x2:Integer;
y2:Integer
end;
Var
a:Array[0..4] of Tr;
....
Procedure Form1.FormActivate(Sender: TObject);
Begin
...
a[1].x1:=100;
a[1].y1:=100;
a[1].x2:=200;
a[1].x2:=200;
// usw..
Image1.Canvas.Brush.Color:=clBlue;
Image1.Canvas.Pen.Color:=clBlue;
Polygon([Point(a[1].x1, a[1].y1), Point(a[1].x2, a[1].y1), Point(a[1].x2, a[1].y2), Point(a[1].x1, a[1].y2)]);
...
und mit
Delphi-Quellcode:
Image1.Canvas.Brush.Color:=clRed;
Image1.Canvas.Pen.Color:=clRed;
Ellipse([Point(a[2].x1, a[2].y1), Point(a[2].x2, a[2].y1), Point(a[2].x2, a[2].y2), Point(a[2].x1, a[2].y2)]);
deine Kreise
und dann definiere unter Implemantation zwei Variablen und diese werden dann im MouseMove gesetzt.
Delphi-Quellcode:
Var
My,Mx:Integer;
procedure TForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: INTEGER);
begin
Mx := x;
My := y;
// Panelfarbe.Color := Leinwand.Canvas.Pixels[x, y];
// mFarbe.Caption := InTtoStr(Leinwand.Canvas.Pixels[x, y]);
end;
und im OnClick- Ereignis schaust Du nach welches Rechteck oder welchen Kreis du getroffen hast.
[/delphi]
procedure TForm.ImageDblClick(Sender: TObject);
var
i,akt: INTEGER;
gefunden: Boolean;
begin
gefunden := false;
// StatusBar.Panels[0].TEXT:='X = '+IntToStr(Mx);
// StatusBar.Panels[1].TEXT:='Y = '+IntToStr(My);
for i := 0 to 4 do
begin
// showmessage(IntToStr(aEingabe[i].x1)+' <= '+IntToStr(Mx)+' <= '+IntToStr(aEingabe[i].x2)+#13+
// IntToStr(aEingabe[i].y1)+' <= '+IntToStr(My)+' <= '+IntToStr(aEingabe[i].y2));
if ((a[i].x1 <= Mx) and (Mx <= a[i].x2)) and
((a[i].y1) <= My) and (My <= a[i].y2)) then
begin
akt := i;
gefunden := True;
break;
end;
end;
if gefunden then
showmessage(IntToStr(akt));
case akt of
0:..;
1:...;
else
end;
end;
[delphi]
mfg
BrunoT