Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cool Como seleccionar multiples controles y moverlos

Hola a todos
Siguiendo con mi mapa de red, que ya esta funcionando bien, quisiera mejorarlo un poco.

Necesito ahora que se puedan seleccionar multiples TImages (nodos), ya sea presionando Ctrl o Shift, o arrastrando con el mouse un recuadro que seleccione a los que contenga en su interior, y poder mover todos los nodos seleccionados

Con este codigo, logor mover cada nodo con su etiqueta asociada, pero solo uno a la vez

Código Delphi [-]
//----- Para Seleccionar y Mover el Nodo -----
procedure TfrmPrincipal.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
begin
  CompCorX:=X;
  CompCorY:=Y;
  CompMoviendo:=True;
  TMovible(Sender).MouseCapture:=True;

  //--- Resaltar Nodo Seleccionado ---
  with shpSelect do
  begin
    Parent:=(Sender as TsImage).Parent;
    Visible:=True;
    Top:=TsImage(Sender).Top-1;
    Left:=TsImage(Sender).Left-1;
  end;
end;

procedure TfrmPrincipal.ControlMouseMove( Sender: TObject; Shift: TShiftState; X, Y: Integer );
begin
  if CompMoviendo then
  begin
    TImage(Sender).Left:=TImage(Sender).Left - (MouseDownSpot.x - x) - 24;
    TImage(Sender).Top:=TImage(Sender).Top - (MouseDownSpot.y - y) - 24;

    //--- Mover la etiqueta asociada ---
    lblDisp:=TLabel(FindComponent(TImage(Sender).Hint));
    lblDisp.Left:=TImage(Sender).Left+25 - Round(lblDisp.Width/2);
    lblDisp.Top:=TImage(Sender).Top + TImage(Sender).Height + 2;

    //--- Resaltar Nodo Seleccionado ---
    with shpSelect do
    begin
      SendToBack;
      Visible:=True;
      Top:=TsImage(Sender).Top-1;
      Left:=TsImage(Sender).Left-1;
    end;
  end;
end;

procedure TfrmPrincipal.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
begin
  if CompMoviendo then
  begin
    CompMoviendo:=False;
    TMovible(Sender).MouseCapture:=False;
  end;

  //----- Para guardar las nuevas coordenadas en la BD -----
  if (Sender is TImage) then imgSelect:=TImage(Sender);
  NombDisp:=Copy(imgSelect.Name, 4, Length(imgSelect.Name));
  with DataMod do
  begin
    if (Sender as TsImage).Parent = sbMapaRed then
      begin
        fdtRedes.Locate('IdRed', NombDisp, []);
        fdtRedResum.Locate('IdRed', NombDisp, []);
        fdtRedes.Edit;
          fdtRedesPosX.Value:=imgSelect.Left;
          fdtRedesPosY.Value:=imgSelect.Top;
        fdtRedes.Post;
      end;
    if (Sender as TsImage).Parent = sbMapaLAN then
      begin
        fdtDisposit.Locate('IdDisp', NombDisp, []);
        fdtDispInf.Locate('IdDisp', NombDisp, []);
        fdtDisposit.Edit;
          fdtDispositPosX.Value:=imgSelect.Left;
          fdtDispositPosY.Value:=imgSelect.Top;
        fdtDisposit.Post;
      end;
  end;
end;

Como modificaria el código para lograr lo que quiero ?
O que tengo que agregar ?
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #2  
Antiguo 22-02-2017
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
Existe un componente de Neftali (no estoy seguro), el codigo de ejemplo se encuentra en el ftp del foro, es para mover componentes en runtima, no se si ese te sirva.

Saludos.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #3  
Antiguo 23-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cita:
Empezado por bitbow Ver Mensaje
Existe un componente de Neftali (no estoy seguro), el codigo de ejemplo se encuentra en el ftp del foro, es para mover componentes en runtima, no se si ese te sirva.

Saludos.
Pues lo conozo, y lo probe, pero solo sirve para mover uno solo, no me permite la seleccion multiple
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #4  
Antiguo 23-02-2017
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
Me pafrece que lo que andas buscando son los Cindy Components, en particular el TcyResizer:

Cita:
TcyResizer: move and resize components at run-time like delphi 2009 does
LineComment Saludos
Responder Con Cita
  #5  
Antiguo 23-02-2017
bitbow bitbow is offline
Miembro
 
Registrado: jul 2006
Posts: 366
Poder: 18
bitbow Va camino a la fama
Tiene razon Roman, ademas que en el Pack de demo vienen dos referentes al componentes.
__________________
¡Ni como ayudarte Niño!!
bitbow
Responder Con Cita
  #6  
Antiguo 24-02-2017
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 todos,

Cita:
Empezado por roman Ver Mensaje
Me pafrece que lo que andas buscando son los Cindy Components, en particular el TcyResizer:

LineComment Saludos
+1 por "TcyResizer" en alguno de mis proyectos con muy buenos resultados. Sin desmerecer los componentes de Neftalí, por supuesto.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 24-02-2017
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
La verdad es que debí acreditarte No recordaba cuáles eran los componentes, así que fuí a ese alguno de tus proyectos y miré la lista de componentes usados. Por cierto, que ese alguno de tus proyectos es espectacular. Digo, para quien no lo sepa

LineComment Saludos
Responder Con Cita
  #8  
Antiguo 24-02-2017
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 todos,

Cita:
Empezado por roman Ver Mensaje
La verdad es que debí acreditarte No recordaba cuáles eran los componentes, así que fuí a ese alguno de tus proyectos y miré la lista de componentes usados. Por cierto, que ese alguno de tus proyectos es espectacular. Digo, para quien no lo sepa

LineComment Saludos
Hombre Román, muchas gracias. Viniendo de ti me pongo colorado y no sé qué decir.

P.S. El proyecto en cuestión tiene futuro, según creo,... espero seguir con él (mejorándolo) muchos años, fíjate lo que digo, pero, claro, no soy adivino.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 24-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Me pafrece que lo que andas buscando son los Cindy Components, en particular el TcyResizer:

LineComment Saludos

Instale los Cindy Components, pero la verdad que no lo entiendo bien, en la descarga no vino con ejemplos para guiarme y saber como usar el TcyResizer

Una pregunta: Tambien me permitirá hacer selecciones multiples de TImages ?
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 24-02-2017 a las 20:09:11.
Responder Con Cita
  #10  
Antiguo 24-02-2017
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 todos,

Los ejemplos de los Cindy Components se descargan por separado aquí (mira en la carpeta "Demo"). Verás que hay al menos un par de ellos que usan el componente "cyResizer".
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 24-02-2017
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
Tal como dice dec, los demos viene aparte. La idea básica es muy sencilla:
  1. Escoges un contenedor donde colocar los controles que desees redimensionar y/o mover. Puede ser todo el formulario o, por ejemplo, un panel.

  2. Colocas un componente cyResizer.

  3. Activas el "modo de edición" del contenedor del paso 1:

    Código Delphi [-]
    cyResizer1.Activate(Panel1);
  4. Los componentes dentro de dicho contenedor son los que podras redimensionar y/o mover.

  5. Sales del "modo de edición" con

    Código Delphi [-]
    cyResizer1.Deactivate();

LineComment Saludos
Responder Con Cita
  #12  
Antiguo 24-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Thumbs up

Cita:
Empezado por dec Ver Mensaje
Hola a todos,

Los ejemplos de los Cindy Components se descargan por separado aquí (mira en la carpeta "Demo"). Verás que hay al menos un par de ellos que usan el componente "cyResizer".
Muchas gracias, justamente ya he encontrado y descargado un pack de ejemplos.

Ya estuve viendo y probando el cyResizer, y de verdad que es justamente lo que necesito, ademas de mover una seleccion múltiple, tambien permite alinear y organizar los elementos que contiene, esta bastante bueno


Y gracias a Roman tambien por la explicación, es bastante sencillo trabajar con el componente

Tema Resuelto
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 24-02-2017 a las 20:40:53.
Responder Con Cita
  #13  
Antiguo 24-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Pues parece que aun no he terminado

Lo que ahora me falta como guardar la nueva posición, para que se carguen los nodos en ella, la proxima vez que se abra el mapa de red

En que evento sería?, o en que momento ejecutar el procedimiento de guardar las nuevas coordenadas?
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes
Responder Con Cita
  #14  
Antiguo 24-02-2017
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 todos,

Cita:
Empezado por JoAnCa Ver Mensaje
Pues parece que aun no he terminado

Lo que ahora me falta como guardar la nueva posición, para que se carguen los nodos en ella, la proxima vez que se abra el mapa de red

En que evento sería?, o en que momento ejecutar el procedimiento de guardar las nuevas coordenadas?
Puedes hacerlo en el momento que quieras, es decir, puedes guardar la posición de los controles en el momento que necesites. Además podrás hacerlo sencillamente, usando las propiedades "Top", "Left", "Width" y "Height" de los propios controles. Se trata de recorrer la propiedad "Controls" del componente "cyResizer". La única dificultad añadida puede ser que uses controles dentro de controles, de modo que tendrías que identificar a los contenedores y recorrerlos de igual manera, recursivamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #15  
Antiguo 24-02-2017
Avatar de JoAnCa
JoAnCa JoAnCa is offline
Miembro
 
Registrado: jul 2005
Ubicación: Cuba
Posts: 435
Poder: 19
JoAnCa Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola a todos,

Puedes hacerlo en el momento que quieras, es decir, puedes guardar la posición de los controles en el momento que necesites. Además podrás hacerlo sencillamente, usando las propiedades "Top", "Left", "Width" y "Height" de los propios controles. Se trata de recorrer la propiedad "Controls" del componente "cyResizer". La única dificultad añadida puede ser que uses controles dentro de controles, de modo que tendrías que identificar a los contenedores y recorrerlos de igual manera, recursivamente.
Pues me será facil, porque no uso controles dentro de controles
Ya el procedimiento de guardar la posicion lo tengo implementado,

Cita:
Se trata de recorrer la propiedad "Controls" del componente "cyResizer"
Era algo como esto lo que estaba buscando, saber localizar los controles
__________________
La hora de acción no es hora de aprender, es necesario haber aprendido antes

Última edición por JoAnCa fecha: 24-02-2017 a las 23:02:03.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Agregar múltiples Campo de una tabla a múltiples TEdit y TdbEdit novato_erick Varios 21 21-08-2011 02:18:58
como generar ventas multiples (seleccionar multiples items) userdelphi Varios 4 30-12-2010 03:52:21
Como seleccionar campos de una tabla sin saber cuantos van a seleccionar david duarte SQL 7 05-04-2010 22:15:43
Seleccionar multiples columnas en TDbGrid Leandro Ferrara OOP 1 02-11-2008 00:02:29
Seleccionar multiples objectos para modificacion mdomeyko OOP 3 10-01-2008 23:17:12


La franja horaria es GMT +2. Ahora son las 15:09:08.


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