Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear TLabel en Runtime asociado a una TImage (https://www.clubdelphi.com/foros/showthread.php?t=64773)

mjjj 18-04-2009 01:39:33

Crear TLabel en Runtime asociado a una TImage
 
hola amigos del foro.

Estoy utilizando los componentes de Neftali (TSelectOnRunTime y TsaveComps).

Adjunto a estos componentes tiene un ejemplo de un restorant.
Lo que necesito hacer es muy semejante a esto, pero con algunas cosas extras.
Primero necesito que a las mesas se le despliegue un Popup, lo cual lo logre al agregar una linea como sigue.

Código Delphi [-]
procedure TForm1.OnpuntoClick(Sender: TObject);
begin
  if (pcModo.ActivePageIndex = 0) then begin
    SelectOnRunTime.Selected := False;
    // En un TControl?
    if (Sender is TControl) then begin
      SelectOnRunTime.Selected := false;
      SelectOnRunTime.SelectControl := TControl(Sender);
      SelectOnRunTime.Selected := True;
  if (Sender is TImage) then Timage(sender).PopupMenu:=popupmenu1;
   end;
  end;
end;

esto funciona bien, lo segundo, que es el porque de mi consulta, es que quiero agregar algunas TLabel asociadas a cada una de las mesas. Además que cuando modifique la posicion de alguna de estas mesas, las Tlabel asociadas a esta mesa en particulas se mueva con la mesa.

Otra cosa la cantidad de Tlabel que contenga cada mesa puede ser variable, y depende de usuario que escogera de una lista cuales quiere que aparezcan.

Se podra hacer esto... como se hace??

Espero que me puedan ayudar.. mil gracias

mjjj 19-04-2009 21:29:14

Algunas preguntas.

Al crear un componente no puedo seleccionar como parent a un TImagen?
Que componentes puedo utilizar como parent?

He pensado en utilizar un TPanel como parent, en donde colocar un TImagen y TLabel. El problema que estoi teniendo es que el Tpanel no tiene la propiedad transparent como un TImagen, por lo que se ve mal.

Entonces, que otro componente poder utilizar en donde genere otros componentes (imagen y label), pero que sea transparente... existe??

Si no existe como puedo crear alguno que cumpla estas condiciones.

Espero que me puedan ayudar... muchas gracias

Neftali [Germán.Estévez] 20-04-2009 10:24:40

1 Archivos Adjunto(s)
Cita:

Empezado por mjjj (Mensaje 345483)
(1) Que componentes puedo utilizar como parent?

(2) He pensado en utilizar un TPanel como parent, en donde colocar un TImagen y TLabel. El problema que estoi teniendo es que el Tpanel no tiene la propiedad transparent como un TImagen, por lo que se ve mal.

Hola.

(1) Cualquiera que derive de TWinControl (cosa que no hace TImage). ;)

En cuanto a la cuestión, yo lo que haría en este caso es no utilizar como parent el TImage, sino el Parent de TImage y luego mover la etiqueta/s cuando muevas el componente.

Te lo muestro. He utilizado el ejemplo que hay aquí, que mueve imágenes con el ratón. Y lo he modificado para crear una etiqueta y que se mueva cuando mueves la imagen.

Crear la etiqueta:

Código Delphi [-]
function TForm1._CreateAsociatedLabel(AImage: TImage):TLabel;
var
  lbl:TLabel;
begin
  lbl := TLabel.Create(Self);
  lbl.Parent := AImage.Parent;
  lbl.Left := AImage.Left + 5;
  lbl.Top := AImage.Top + 5;
  lbl.Caption := 'Imagen';
  lbl.Color := clYellow;
  lbl.Name := 'Label_' + IntToStr(Random(100000));  
  Result := lbl;
end;

Mover la etiqueta cuando mueves la imagen...

Código Delphi [-]
    // Mover el TLabel asoaciado
    lbl := TLabel(FindComponent(TImage(Sender).Hint));
    lbl.Left := TImage(Sender).Left + 5;
    lbl.Top := TImage(Sender).Top + 5;

En este caso utilizao el Hint de la imagen para almacenar el nombre de la etiqueta asociada y luego buscarla. Este método está bien para la prueba, pero en tu caso utilizaría algo más robusto para almacenar las etiquetas asociadas a un TImage; Además comentas que debes poder asociar varias etiquetas, con lo que esta solución se queda "corta".

mjjj 22-04-2009 20:47:58

Gracias Neftali, me funciona bien el tema de arrastrar varias TLabel con la imagen... lo que hize fue almacenar todas las Tlabel asociadas a una imagen, cosa que la moverla se mueven todas las que estasn asociadas.

Por otro lado, el problema que me surgio fue que al mover la imagen, si me salgo de la aplicacion (con el mouse) , la fota queda fuera de la vista, fuera del parent al cual corresponde.

Como puedo hacer para restringuir esto, que la imagen solo pueda moverse dentro de cierto componente, por ejemplo un TPanel.

Espero que se entienda mi duda.

Muchas gracias

Neftali [Germán.Estévez] 22-04-2009 22:58:12

Cita:

Empezado por mjjj (Mensaje 345843)
Como puedo hacer para restringuir esto, que la imagen solo pueda moverse dentro de cierto componente, por ejemplo un TPanel.


En el evento MouseMove tienes las coordenadas actuales; Ahí puedes comprobar si está fuera de límites y dejar la nueva posición donde te interese (sin exceder los límites).

IVAND 17-11-2009 22:16:40

Hola Neftali

Excelente ejemplo como siempre ,

Una pregunta solamente , estoy intentando darle una mejora a mi sistema financiero echo con delphi 6 y firebird 1.5 , y entre las mejoras estan el poder arrastar un elemento de un menu cualquiera y pegarlo en un panel como si se tratase de un acceso directo (tal como se lo hace en windows seleccionas un elemento de un menu y lo arrastas al escritorio y se crea un acceso directo

Esto se puede lograr un poco con la idea de tu programa .. pero cuando salgo del aplicativo se borran los elementos creados ... como se podria evitar q no se borren cuando se vuelva a ejecutar el programa


Gracias por tu tiempo

Neftali [Germán.Estévez] 18-11-2009 09:14:33

Cita:

Empezado por IVAND (Mensaje 346822)
Esto se puede lograr un poco con la idea de tu programa .. pero cuando salgo del aplicativo se borran los elementos creados ... como se podria evitar q no se borren cuando se vuelva a ejecutar el programa

Está claro que debes guardarlo de alguna forma, ya sea en INI o Base de Datos, para que la siguiente vez que vuelvas a entrar en el programa seas capaz de recrear esos objetos de nuevo.

Piensa los datos que necesitas para crear esos objetos y esos son los que deberás guardar.

IVAND 18-11-2009 17:17:29

Si creo q es la mejor opcion .... como puedo simular la accion de arrastar un objeto desde un Tmenu

Voy a revisar lo q me sugieres y de antemano nuevamente muy agradecido


La franja horaria es GMT +2. Ahora son las 09:53:11.

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