Entwickler-Ecke

Multimedia / Grafik - Position eines Images auslesen..


Adam Weishaupt - Sa 20.03.04 18:52
Titel: Position eines Images auslesen..
Guten Tag,

sagen wir mal ImageX (X soll irgendeine Zahl sein) ist auf den Koordinaten Left=600 Top=150.
Jetzt will ich, dass ImageY (Y soll irgendeine Zahl sein) die Positionen mit ImageX wechselt.

z.B.


Delphi-Quelltext
1:
2:
3:
4:
5:
ImageY.Left := 500;
ImageY.Top := 200;

ImageX.Left := 600:
ImageX.Top := 150;


Wenn man auf ImageY klickt, sollen sich die Positionen von den beiden Images umtauschen.
Wie finde ich heraus was X bei ImageX ist bzw. welches Image auf der Position ist?

Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt


patrick - Sa 20.03.04 19:06

du warst schon 3 zeilen an der lösung dran: :D

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Image1Click(Sender: TObject);
var oldx,oldy:integer;
begin
oldx:=image2.Left;
oldy:=image2.Top;
image2.Left:=image1.Left;
image2.Top:=image1.Top;

image1.Left:=oldx;
image1.Top:=oldy;
end;


für image2 sieht das genauso aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Image2Click(Sender: TObject);
var oldx,oldy:integer;
begin
oldx:=image2.Left;
oldy:=image2.Top;
image2.Left:=image1.Left;
image2.Top:=image1.Top;

image1.Left:=oldx;
image1.Top:=oldy;
end;


Adam Weishaupt - Sa 20.03.04 19:22

danke fuer die antwort, aber bei mir ist es so:

ich weiss ja nicht, ob es image2 oder image3 oder image sonstwas ist..

ich will die position z.b. top=500 , left= 150 auslesen, um herauszufinden welches image dort ist..
soll heissen, ich weiss nicht, welches image von z.b. 50 an der position ist und will es herausfinden ;-)

danke nochmal


derDoc - Sa 20.03.04 19:53

Eine Lösung wäre eine Variable Image vom Typ TImage zu definieren und in einer for-Schleife für i von 1 bis zur Anzahl der Images folgendes machen

Delphi-Quelltext
1:
2:
3:
4:
5:
Image := TImage(FindComponent('Image'+IntToStr(i)));
if (Image.Left = 150and (Image.Top = 500then
  begin
    // Image.Left und Image.Top verändern
  end;


Adam Weishaupt - Sa 20.03.04 20:05

es funktioniert, vielen dank an euch beiden :-)


Adam Weishaupt - Sa 20.03.04 20:23

hmm... es funktioniert doch nicht so, wie ich es gedacht habe..
hier der quelltext, den ich geschrieben habe:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
var a: Boolean;
    old: TImage;

[...]

procedure TForm1.Image9Click(Sender: TObject);
var i, oldx, oldy: Integer;
begin
  oldx:=image9.left;
  oldy:=image9.top;
  if a=false then
    begin
      image9.Left:=616;
      image9.top:=160;
      a:=true;
    end 
  else 
  if a=true then
    begin
      for i:=1 to 45 do
        begin
          old := TImage(FindComponent('Image'+IntToStr(i)));
          if (old.Left = 616and (old.Top = 160then
            begin
              old.top:=oldx;
              old.left:=oldy;
              image9.Left:=616;
              image9.top:=160;
            end;
        end;
    end;
end;


das problem ist, dass das alte Image (variable: old) ganz ploetzlich nach ganz unten der form.clientheight verschwindet, statt zur alten position von image9.. oh man ein problem nach dem anderen ^^

noch was: die variable: a testet, ob schon ein image auf den koordinaten 616,160 schon ein image ist.. bei true ist eins da, bei false nicht ;-)


Adam Weishaupt - Sa 20.03.04 20:34

LOOOOOOOOL

ich habe es allein herausgefunden ;-)

ich habe oldx und oldy verwechselt.. nochmals danke an patrick und derDoc :-D