Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Consulta Sobre Drag and Drop (https://www.clubdelphi.com/foros/showthread.php?t=95705)

oscarac 27-05-2022 22:41:38

Consulta Sobre Drag and Drop
 
buenas tardes

estuve revisando este ejemplo

https://neftali.clubdelphi.com/crear...-con-el-raton/

y es una genialidad, se crea en tiempo de ejecucion y se le da un nombre al componente
mis preguntas son las siguientes:

si creo varias imagenes, como se que elemento selecciono?
como asigno un evento onclick a cada imagen ?

intente agregarle un texto a la imagen (debajo de ella), pero el texto lo coloca en top 0 left 0

alguien me da una mano para entender mejor como darle una funcionalidad?

escafandra 27-05-2022 23:14:11

Si tienes varias imágenes Sender te da cual es. Si lo conviertes a TImage: TImage(Sender) esa es la imagen. Las puedes distinguir por su nombre: TImage(Sender).Name. Date cuenta que en el ejemplo se le asigna un nombre.


Para agregar un texto puedes usar:
Código Delphi [-]
TImage(Sender).Canvas.TextOut(X,Y, TImage(Sender).Name);




Saludos.

oscarac 27-05-2022 23:19:51

perfecto, con TImage(Sender).Name
ya tengo identificado que elemento he seleccionado, y para agregar un evento onclik por ejemplo

oscarac 28-05-2022 00:00:31

Estoy creando un Tlabel en tiempo de ejecucion para colocar debajo de la imagen un texto (Ejemplo, "sector - 1", "Sector - 2", etc)

lo crea, pero no puedo colocarlo debajo de la imagen o quiza estoy haciendo algo mal o quiza se esta colocando debajo de la imagen y no encuentro la instruccion "Bring to front"

escafandra 28-05-2022 01:52:14

Puedes crear el label asi:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  newImage: TImage;
  newLabel: TLabel;
begin
  newImage:= Timage.Create(Image1);
  with newImage do
  begin
    picture := Image1.picture;
    name := 'MS_' + inttostr(nmesas);
    nmesas := nmesas + 1;
    Stretch := True;
    Parent := Panel1;
    Left := 10;
    Top := 10;
    height := 57;
    width := 61;
    Transparent := true;
    onMouseDown := Image1MouseDown;
    onMouseMove := Image1MouseMove;
    onMouseUp := Image1MouseUp;
    onDblClick := Image1DblClick;
  end;
  newLabel:= TLabel.Create(self);
  with newLabel do
  begin
    name:= 'L'+newImage.Name;
    Left:= newImage.Left;
    Top := newImage.Top + newImage.Height + 10;
    Caption:= newImage.Name;
    Parent:= Panel1;
  end;
end;


Y luego puedes moverlo así:
Código Delphi [-]
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  Lab: TLabel;
begin
  if Capturing then begin
    TImage(Sender).Left := TImage(Sender).Left - (MouseDownSpot.x - x);
    TImage(Sender).Top := TImage(Sender).Top - (MouseDownSpot.y - y);

    StatusBar1.Panels[0].Text := IntToStr(TImage(Sender).Left) + ' - ' + IntToStr(TImage(Sender).Top);
    TImage(Sender).Hint := StatusBar1.Panels[0].Text;
    TImage(Sender).ShowHint := True;

    Lab:= FindComponent('L'+TImage(Sender).Name) as TLabel;
    Lab.Left:=  TImage(Sender).Left;
    Lab.Top:=  TImage(Sender).Top + TImage(Sender).Height + 10;
  end;
end;



Saludos.


La franja horaria es GMT +2. Ahora son las 01:11:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi