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 28-10-2004
chechu chechu is offline
Miembro
 
Registrado: oct 2004
Ubicación: argentina
Posts: 26
Poder: 0
chechu Va por buen camino
Question Copia de un componente...

Buen dia para todos....Necesito una ayuda en lo siguiente.


tengo un formulario que tiene componentes y en tiempo de ejecucion estos se pueden arrastrar, lo que quiero hacer es que esos componentes antes de comenzar el arrastre dejen una copia de si mismos en la posision original de la cual los saco, me explico? bueno si alguien me puede ayudar .........porfi
Responder Con Cita
  #2  
Antiguo 28-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una vez que tengas más claro lo que tratamos en el hilo Guardar Frame... creo que podrás "clonar" una componente- al menos sus propedades publicadas (sección published).

Los métodos ReadComponent y WriteComponent de TFileStream que te mencioné en el otro hilo se aplican también a otro tipo de streams. Podrías usar TMemoryStream en lugar de TFileStream para crear una copia de la componente: la escribes al stream con WriteComponent y la lees en una nueva instancia con ReadComponent.

Pero por otra parte, pienso que quizá te estés complicando la vida. Según entiendo de tu hilo Arrastrar y Soltar!!!, tú quieres tener algo similar a una paleta de componentes que el usuario arrastra al área de trabajo (un frame).

En el proceso de drag and drop no tienes necesariamente que arrastrar físicamente la componente. En el evento OnDragDrop del frame, en lugar de mover la componente origen, puedes dejarla donde está y crear tú misma una nueva instancia inicializando sus propiedades con los valores que tenga la componente que se "arrastró" o con otros valores por defecto:

Código Delphi [-]
procedure FrameDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source is TEdit then
  begin
    with TEdit.Create(Self) do
    begin
      Text := TEdit(Source).Text;
      Width := TEdit(Source).Width;
 
      Color := clWindow;
    end;
  end;
end;
// Saludos
Responder Con Cita
  #3  
Antiguo 28-10-2004
chechu chechu is offline
Miembro
 
Registrado: oct 2004
Ubicación: argentina
Posts: 26
Poder: 0
chechu Va por buen camino
gracias y.........

Intente hacer lo que me aconsejas y no puedo lograrlo, no se porque no funciona ..........el no arrastrar fisicamente el componente sino crear uno .....el codigo que utilizo es el siguiente:

El usuario da el permiso para crear una nueva pagina(tab) por medio de un boton............, en esa pagina puede agregar componentes (lo que intento hacer arrastrando.. ) y la pagina que quede diseñada por el usuario la debo poder reutilizar (por lo que dentro de las tabs creo frames contenedores los que luego me van a permitir guardar y recuperar las paginas ''segun lo que yo imagino'')..............entonces:

procedure TForm1.ToolButton1Click(Sender: TObject);
var
NuevoTabSheet: TTabSheet;
Marco: TFrame;
i: integer;
begin
NuevoTabSheet:= TTabSheet.Create(PageControl1);
NuevoTabSheet.Visible:= True;
NuevoTabSheet.Caption:= IntToStr(i);;
NuevoTabSheet.PageControl:= PageControl1;
PageControl1.ActivePage:= NuevoTabSheet;
Marco:= TFrame.Create(NuevotabSheet);
NuevoTabSheet.InsertControl(Marco);
Marco.Color:= clwhite;
Marco.Align:= alClient;
Marco.OnDragOver:= Mover;
Marco.OnDragDrop:= FrameDragDrop;
end;

Bien .......defino el procedimiento que cree un nuevo componente y no sea arrastrarlo fisicamente...como me sugeris

procedure TForm1.FrameDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TButton then
begin
with TButton.Create(Self) do
begin
width := TButton(Source).Width; {solo a modo de prueba}
end;
end;
end;


entonces al intentar arrastrar el componente no tengo ninguna respuesta .........no se , no funciona
Responder Con Cita
  #4  
Antiguo 28-10-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola chechu,

En el ejemplo que te puse se me olvidó asignar la propiedad Parent del Edit creado. Debes asignarle el frame para que se haga visible.

Una cosa, el manejador del evento OnDragDrop lo tienes definido en el formulario y no en el frame. No hay mayor problema con esto excepto que en tal situación Self será el formulario y no el frame. Por ello, cuando hagas

TButton.Create(Self)

el owner del botón será el formulario, cosa que no debe ser si piensas seguir el método que te describí en otro hilo. El owner debe ser el frame.

Otra cosa; aunque puedes asignar a Frame.OnDragDrop y Frame.OnDragOver métodos del formulario pienso que será más claro si defines un frame base (como el DesignerFrame que te mostré anteriormente) y en ese frame base asignas los eventos mediante el inspector de objetos.

// Saludos
Responder Con Cita
  #5  
Antiguo 24-05-2006
DANY DANY is offline
Miembro
 
Registrado: nov 2003
Posts: 145
Poder: 21
DANY Va por buen camino
Que manera de copiar de este foro

lo dicho, solucion total para mi.
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


La franja horaria es GMT +2. Ahora son las 12:06:42.


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