Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Question Agregar y Arrastrar como en Tiempo de Diseño?

Foro, mi duda y consulta es la siguiente ¿se puede agregar un edit (cajita de texto) y arrastrarlo por el formulario cuando un programa esta en ejecucion ¿Como? alguna idea ¿ puede implementarse ? si pueden un ejemplo sencillo y cortito.
Un Abrazo.
Responder Con Cita
  #2  
Antiguo 31-01-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Supongo que habrá mejores formas de hacerlo, pero puedes utilizar las propiedades y eventos relacionadas con arrastrar y soltar (propiedades Drag... y OnDrag...).

Aquí te pongo un ejemplo muy sencillito:
Código Delphi [-]
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure FormDragDrop(Sender, Source: TObject; X, Y: Integer);
  end;
  
implementation

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source = Edit1 then
    Accept := True;
end;

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source = Edit1 then
    with Edit1 do
    begin
      Left := X;
      Top := Y;
    end;
end;

(Para que el ejemplo funcione tienes que poner la propiedad DragMode del componente Edit1 a dmAutomatic).

Saludos!

P.D: Se me había pasado que tambien preguntabas el tema de "agregar", para ello tendrías que crear el componente en tiempo de ejecución (lo único es que tendrías que decidir cuando "crearlo").

Última edición por jmariano fecha: 31-01-2006 a las 13:23:58.
Responder Con Cita
  #3  
Antiguo 31-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En cualquiera de éstos dos hilos (por no buscar más) puedes ver cómo se crea un TEdit en ejecución:
http://www.clubdelphi.com/foros/showthread.php?t=20088
http://www.clubdelphi.com/foros/showthread.php?t=19465

También tienes demos de cómo crear controles en ejecución aquí.

Para moverlo en ejecucion puedes hacerlo como te han dicho o utilizar éste componente de mi Web TSelectOnRuntime, que sirve justo para eso, para mover y redimensionar componentes en ejcución;
Puedes descargarlo junto con la demo de aquí.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 31-01-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Question lo he probado yyyyyyyy?

Hola de nuevo he probado lo de Jmariano y nada la cajita de texto se queda en su lugar , no puedo arrastrarla por el formulario y tampoco puedo cambiarle su tamaño¿ que podra ser?
Un Abrazo
Responder Con Cita
  #5  
Antiguo 31-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

El código de Mariano debería ir bien para cambiar la posición del "TEdit" con el ratón, arrastrándolo por el formulario. Pero, en todo caso, después de probar el componente que refiere Neftalí creo que podría irte bastante bien. ¿Lo comprobaste?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 31-01-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Cita:
Empezado por jam888
Hola de nuevo he probado lo de Jmariano y nada la cajita de texto se queda en su lugar , no puedo arrastrarla por el formulario y tampoco puedo cambiarle su tamaño¿ que podra ser?
Acuérdate de especificar en la propiedad DragMode del componente Edit1 el valor dmAutomatic para que funcione (por defecto está a dmManual).

De todas formas, como te dice dec, fíjate en el componente de Neftali que es más completo.

Saludos!
Responder Con Cita
  #7  
Antiguo 31-01-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Question ok, ahora si

Ahora si marcha bien lo de Jmariano, lo que me queda es por cambiarle el tamaño tambien al edit ¿Como?. El tema es que no puedo incorporar componentes, si no ya tendria resuelto todo. Gracias por el tiempo dedicado.
¿ahora como puedo cambiarle el tamaño? Un Abazo.
Responder Con Cita
  #8  
Antiguo 31-01-2006
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.272
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jam888
¿ahora como puedo cambiarle el tamaño?
Si te vale hacerlo mediante teclado es bastante sencillo; Ésto te puede servir de guía (evento OnKeyDown del Edit):

Código Delphi [-]
var
  edt:TEdit;
begin

  if not (Sender is TEdit) then begin
    Exit;
  end
  else begin
    edt := TEdit(Sender);
  end;

  if (key = VK_DOWN) and (Shift = [ssCtrl]) then begin
    edt.Height := edt.Height + 5;
  end;

  if (key = VK_UP) and (Shift = [ssCtrl]) then begin
    edt.Height := edt.Height - 5;
  end;

  if (key = VK_LEFT) and (Shift = [ssCtrl]) then begin
    edt.Width := edt.Width - 5;
  end;

  if (key = VK_RIGHT) and (Shift = [ssCtrl]) then begin
    edt.Width := edt.Width + 5;
  end;

Utiliza el CTRL + las flechas para modificar el tamaño.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 31-01-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Thumbs up anda pero........

Anda con las teclas pero debo de hacerlo con el mouse (agrandarlo)por que asi me lo han solicitado, que va a hacer yo no mando. Espero me puedan respomder.Gracias
Responder Con Cita
  #10  
Antiguo 31-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver. El componente escrito por Neftalí y que él mismo te refiere más arriba hace exactamente lo que precisas. Como el componente es de código abierto bien podrías estudiar su funcionamiento. ¿Porqué no echas un vistazo al componente susomentado de una vez por todas y nos dices qué tal te va con el mismo?

O, cuando menos, dínos, pues mira, he mirado el componente de Neftalí pero, no me va bien por esto, por esto y por esto otro. Porque, ya te digo, teniendo tan a la mano una posible solución a tu problema no entiendo por qué no la miras siquiera... ¿o es que la miraste ya, que es lo que digo, y no te sirvió?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 31-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Esto mas bien parece una tarea del colegio que un requerimiento de un programa normal... yo diría que ya tenes suficiente información para hacerlo por tu cuenta. ... ¿no?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 02-02-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Talking Casi todo ok...

Estimados les comento que chequee el componente y ahora todo marcha ok,
lo unico es que cuando cambio de tamaño y lugar los componentes estos cambios no permanecen en el formulario, es decir lo cierro y cuando vuelvo a ejecutarlo los componentes esatan en el lugar original ¿Como guardo la distribucion y el tamaño de los componentes en el formulario?
Gracias y Un Abrazo.
Responder Con Cita
  #13  
Antiguo 02-02-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Poder: 19
jmariano Va por buen camino
Lógicamente, todos los cambios que hagas sobre posición y tamaño estarán sólo almacenados en memoria (de ahí que se pierdan al salir del formulario), por lo que tendrás que almacenarlo en algún medio "no volátil", como un archivo en el disco duro, por ejemplo.

Para ello puedes utilizar la clase TStringList que te permite almacenar y cargar fácilmente cadenas de texto o utilizar las funciones que posee Delphi para almacenar y recuperar el estado (o recursos) de un objeto o componente.

Te pongo un ejemplo que viene en la ayuda de Delphi para "convertir" un componente a cadena de caracteres y viceversa:
Código Delphi [-]
function ComponentToString(Component: TComponent): string;

var
  BinStream:TMemoryStream;
  StrStream: TStringStream;
  s: string;
begin
  BinStream := TMemoryStream.Create;
  try
    StrStream := TStringStream.Create(s);
    try
      BinStream.WriteComponent(Component);
      BinStream.Seek(0, soFromBeginning);
      ObjectBinaryToText(BinStream, StrStream);
      StrStream.Seek(0, soFromBeginning);
      Result:= StrStream.DataString;
    finally
      StrStream.Free;

    end;
  finally
    BinStream.Free
  end;
end;

function StringToComponent(Value: string): TComponent;
var
  StrStream:TStringStream;
  BinStream: TMemoryStream;
begin
  StrStream := TStringStream.Create(Value);
  try
    BinStream := TMemoryStream.Create;
    try
      ObjectTextToBinary(StrStream, BinStream);
      BinStream.Seek(0, soFromBeginning);
      Result := BinStream.ReadComponent(nil);

    finally
      BinStream.Free;
    end;
  finally
    StrStream.Free;
  end;
end;

(Consulta la ayuda de Delphi si tienes dudas de lo que hace ambos procedimientos porque está mu' bien explicado)

Saludos!
Responder Con Cita
  #14  
Antiguo 02-02-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
las jedi tienen gestores de persistencia de propiedades que podes almacenar en archivos ini, el registry, xml o una base de datos.

Si te interesa, mirá los compoentes de la paleta Jv Persistence
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #15  
Antiguo 03-02-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

O tambien puedes usar este componente de la pagina de neftali
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #16  
Antiguo 08-02-2006
jam888 jam888 is offline
Miembro
 
Registrado: sep 2004
Posts: 115
Poder: 20
jam888 Va por buen camino
Talking ok, esta bueno

Estimados gracias a todos por ocuparse de este tema.
Un Abrazo
Responder Con Cita
  #17  
Antiguo 30-03-2007
marcial marcial is offline
Miembro
 
Registrado: may 2003
Posts: 147
Poder: 21
marcial Va por buen camino
Habria algo de esto para D5 ??
Gracias
Marcial
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
en Rave como agregar un direct data view? Pascual Montes Impresión 2 08-06-2005 02:45:04
agregar una atributo en tiempo de ejecución seken Conexión con bases de datos 6 21-10-2004 23:21:03
Como agregar una banda en tiempo de ejecucion en otra pagina edo Impresión 2 29-07-2003 01:07:12
Como configurar un alias en el DataBaseDesktop, pero por codigo (tiempo de ejecución) hhuillcen Conexión con bases de datos 1 14-06-2003 06:16:45
Agregar una impresora en tiempo de ejecucion fanon Impresión 1 26-05-2003 10:16:20


La franja horaria es GMT +2. Ahora son las 02:01:55.


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
Copyright 1996-2007 Club Delphi