Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Bild bewegen, wie Name übermitteln? (https://www.delphipraxis.net/188017-bild-bewegen-wie-name-uebermitteln.html)

Monday 24. Jan 2016 13:30

Bild bewegen, wie Name übermitteln?
 
Hallo,

ich möchte ein Bild Bewegen. Ich lade dazu eine .png in ein TImage und mithilfe des Timer (und OnMouseDown usw) soll es dann bewegt werden. Da ich mehrere Bilder laden möchte, soll das alles dynamisch vorgehen. Aber wie kann ich im Timer das Bild auch als "Bild" bewegen, weil ich nicht mehr weiß wie das erstellte bild heißt bzw. ich weiß es aber komme nicht mehr ran?
Am besten sieht man es im code mit dem "???":


Hier ein gekürzter Ausschnitt:

Delphi-Quellcode:
procedure FormShow...
begin
// ...

    // mehrmals mit verschiedenen bilder, in einer schleife:
    figur := TImage.Create(Self);
    figur.Picture.LoadFromFile('figuren/rb.png');
    figur.OnMouseDown := @Image1MouseDown; //Timer starten = Bewegung starten
    figur.OnMouseUp := @Image1MouseUp; //Timer beenden = Bewegung beenden
    figur.OnClick := @Image1click;

    figur.parent := Form1;
    figur.Name  := 'Image987'; //Nur zum Test
    figur.Height := laenge-10;
    figur.Width := breite-10;
    figur.top   := 1*2*laenge+4;
    figur.left  := 1*2*breite+4;
    figur.Stretch:=True;
    figur.visible := True;
    figur.Show;  

end;


procedure TForm1.Image1Click(Sender: TObject);
begin
    if Sender is TImage then begin
        Label1.Caption := TImage(Sender).Name; // Bild Name merken bei Click
  end;

end;




procedure TForm1.Timer1Timer(Sender: TObject);
var
   Bild := TImage;

begin

         // Bild wird bewegt,...
{
ABER:
         Image1.Left:= ScreenToClient(Mouse.CursorPos).x; geht ja nicht
Wie komme ich an das Bild das bei "Label1.Caption" gemerkt habe?! Bzw. muss ich dort anders vorgehen?

}
         Bild = ???? 

         Bild.Left:= ScreenToClient(Mouse.CursorPos).x,
         Bild.Top:= ScreenToClient(Mouse.CursorPos).y;


end;

Wer kann mir bitte weiterhelfen?

LG
Monday

Umgebung: Lazarus

nahpets 24. Jan 2016 13:57

AW: Bild bewegen, wie Name übermitteln?
 
Mach Dir doch im Formular eine Eigenschaft vom Typ TImage.
Delphi-Quellcode:
 ...
   fAktuellesBild : TImage;
...

procedure TForm1.Image1Click(Sender: TObject);
begin
    if Sender is TImage then begin
        fAktuellesBild := TImage(Sender);
        Label1.Caption := fAktuellesBild.Name; // Bild Name merken bei Click
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  fAktuellesBild .Left:= ScreenToClient(Mouse.CursorPos).x,
  fAktuellesBild .Top:= ScreenToClient(Mouse.CursorPos).y;
end;
(Nur hingedaddelt und nicht getestet.)

Monday 24. Jan 2016 16:55

AW: Bild bewegen, wie Name übermitteln?
 
Hallo nahpets,

vielen Dank! Richtig gute Idee. Darauf hätte ich auch kommen können. Klar so funktioniert es einwandfrei. So kann ich mir auch den Umweg über das Label sparen.

Lg
Monday


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz