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
[-]
procedure TfrmPrincipal.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
begin
CompCorX:=X;
CompCorY:=Y;
CompMoviendo:=True;
TMovible(Sender).MouseCapture:=True;
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;
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;
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;
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 ?