Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mover un label en tiempo de ejecución (https://www.clubdelphi.com/foros/showthread.php?t=78134)

CarlosAlberto 22-03-2012 12:48:48

Mover un label en tiempo de ejecución
 
Estimados miembros del club: quisiera saber ¿cómo puedo mover un label dentro de un panel o en el mismo formulario?. Tengo otra pregunta: ¿cómo puedo crear en tiempo de ejecución del programa un componente Label?
Muchas gracias y saludos.
Carlos Alberto

juanlaplata 22-03-2012 13:46:53

Hay un ejemplo muy bueno aqui mismo en el FTP del club..
http://terawiki.clubdelphi.com/Delph...tes-Funciones/

Busca "Componente_resize_controls_y_demo"

Saludos

Caro 22-03-2012 14:55:47

Hola CarlossAlberto, para mover el Label dentro de un panel solo tienes que cambiar su Parent y viceversa.

Código Delphi [-]
  Label.Parent := Panel1;

si quieres puedes utilizar los eventos de arrastrar y soltar.

Para crear un Label en ejecución:

Código Delphi [-]
var
 Lab:TLabel;
begin
 Lab:=TLabel.Create(self);
 With Lab do
 begin
  Parent:=self;
  Name:='nombre';
  Caption:='Label';
  Left:=10;
  Top:=10;
 end;

Saluditos

Cañones 22-03-2012 19:06:31

Tal vez este componente del compañero Neftalí te sirva.
Saludos.

CarlosAlberto 22-03-2012 19:35:13

Crear un label en tiempo de ejecución
 
Estimada Caro: gracias por la repuesta. Crearlo pude hacerlo pero para moverlo dentro del form donde lo cree ¿cómo hago? o ¿cómo llego a un evento del label ceado?
Saludos.
Carlos Alberto

ecfisa 22-03-2012 19:54:15

Hola Carlos.

Si queres utilizar Drag&Drop sobre el TLabel que creaste para situarlo en el TPanel, podrías hacer:
Código Delphi [-]
  ...
  private
    FLabel: TLabel;
    procedure LabelMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  public
  end;
...

implementation

(* Label OnMouseDown *)
procedure TForm1.LabelMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 TLabel(FindComponent('MiLabel')).BeginDrag(True);
end;

(* Crear Label *)
procedure TForm1.Button1Click(Sender: TObject);
begin
  FLabel:= TLabel.Create(Self);
  FLabel.Name:= 'MiLabel';
  FLabel.Left:= 10;
  FLabel.Top:= 10;
  FLabel.Parent:= Self;
  FLabel.OnMouseDown:= LabelMouseDown;
end;

(* Panel OnDragOver *)
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept:= Source is TLabel;
end;

(* Panel OnDragDrop *)
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  TLabel(FindComponent('MiLabel')).Parent:= Panel1;
end;

Saludos.

Caro 22-03-2012 20:16:12

Hola de nuevo CarlosAlberto, puedes utilizar también el parámetro source de los eventos OnDragDrop y OnDragOver, te pongo un ejemplo.

Digamos que quieres crear varios TLabel y no solo uno y asignarles el evento Onclick a todos, en cual solo vamos a mostrar su Caption de cada Label.

Código Delphi [-]
  public
    I : Integer;
    Lab:TLabel;
    procedure LabClick(Sender: TObject);

....................................................
....................................................
//Evento Onclick del Label
procedure TForm1.LabClick(Sender: TObject);
begin
 Showmessage(TLabel(Sender).Caption);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Lab:=TLabel.Create(self);
 With Lab do
 begin
  Parent:=self;
  Caption:='Label'+IntToStr(I);
  //si quieres también le puedes dar un nombre a cada label creado en este ej. vacío para todos
  Name := '';
  //esta propiedad es para trabajar con los eventos Drag&Drop
  DragMode := dmAutomatic;
  Left:=10;
  Top:=I;
  OnClick := LabClick;//Aquí le asignamos en mismo evento OnClick a cada Label
  Inc(I,20);
 end;
end;

Y en los eventos OnDragDrop y OnDragOver del Panel lo siguiente.

Código Delphi [-]
procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Source is TLabel) then
   begin
    TLabel(Source).Parent := Panel1;
    TLabel(Source).Left := X;
    TLabel(Source).Top := Y;
   end;
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
 Accept := (Source is TLabel);
end;

Si tienes duda sobre algo, solo pregunta y no te olvides inicializar I en en Oncreate de tu formulario.

Saluditos

CarlosAlberto 23-03-2012 18:44:23

Gracias
 
Estimados amigos del club:
Estoy agradecido por las respuesta que me brindaron. Probé la de la moderadora Caro y logré los resultados que esperaba.
Saludos
Carlos Alberto


La franja horaria es GMT +2. Ahora son las 19:28:29.

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