Ver Mensaje Individual
  #2  
Antiguo 28-06-2006
rocio84 rocio84 is offline
Miembro
 
Registrado: oct 2005
Posts: 19
Reputación: 0
rocio84 Va por buen camino
Hola

para mover componentes dinamicamente debes usar los siguientes eventos:

OnMouseDown: aqui debes almacenar en dos variables (raton_x, raton_y) la posición actual del ratón, que
se pasa como parámetro en el evento y poner a cierto una variable booleana que indica cuando se debe mover.

Código Delphi [-]
mover := true;
raton_x := X
raton_Y := Y

OnMouseMove: sumar la diferencia, entre la posicion actual y la posición guardada del ratón, a las propiedades
Top y Left de la componente.

Código Delphi [-]
if mover then
begin
    with shape do 
    begin    
        top := top + (Y-raton_Y);
        left := left + (X-raton_X);
    end;
end;

OnMouseUp: poner a falso la variable mover.

Para redimiensionar seria muy parecido pero en lugar de modificar las propiedades Top y Left debes
modificar Heigth y Width.

Como los shapes los creas dinámicamente, no puedes acceder a los eventos como cuando las componentes se
crean dinamicamente, por eso, tendrás que crear tres procedimientos, uno para cada evento anterior, que
tengan los parámetros de entrada y salida igual que los de los eventos. Para ver que parametros son pue
des crear un shape de prueba y haz doble click en estos eventos y copias la cabecera.

Código Delphi [-]
procedure TForm1.IniciarMovimiento(...//parametros de OnMouseDown...);
procedure TForm1.MoverShape(...//parametros de OnMouseMove...);
procedure TForm1.FinalizarMovimiento(...//parametros de OnMouseUp...);

y en el lugar donde creas los shapes le asignas estro procedimiento al shape creado
Código Delphi [-]
...
onmousedowm := iniciarmovimiento;
onmousemove := movershape;
onmouseup   := finalizarmovimiento;
...

Para seleccionar una componente puedes usar la clase Canvas para dibujar un rectangulo alrededor del
shape ,al hacer click sobre el, para indicar de alguna manera que está seleccionado.

Espero que te haya sido útil.
Responder Con Cita