Einzelnen Beitrag anzeigen

Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#8

Re: Image soll durch darüber liegendes Label angeklickt werd

  Alt 2. Sep 2005, 08:06
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
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat