Estoy haciendo una aplicación en Delphi 7, con CLX, y utilizo Drag&Drop para pasar imágenes desde un panel a otro. Me gustaría saber como puedo personalizar ese paso de imagen y que, o bien desaparezca el ratón y se mueva solamente la imagen o bien aparezca el ratón con la imagen en la punta... No creo que sea muy original, pero si sabes otra manera de personalizar el ese paso de imágenes, estoy abierto a ello...
Respuesta de antipauli
1
1
antipauli, Analista/Programador de Sistemas Oracle
Aquí te paso una idea que, aunque primaria, quizá te pueda ayudar. La cuestión es mover un image de un panel a otro. El problema es que los paneles al ser twincontrols (contenedores) y el image no, no lo podemos mover alegremente a menos que le cambiemos el Parent. Y para que el efecto de movimiento del image sea convincente, lo debemos insertar en un panel temporal cuyo parent sea la aplicación y así al mover este panel con la imagen dentro, conseguiremos que la imagen se desplace por encima de los demás controles y no por debajo. Si quieres esconder el cursor sólo tienes que hacer showcursor(true/false). Ejemplo: - 2 paneles. - 1 image en el primero. unit uCLXMoureImage; Interface Uses SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, QExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Image1: TImage; procedure Image1DblClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } APanel : TPanel; Procedure MoverImagen(Orig, Dest : TPanel; Img : TImage); public { Public declarations } end; var Form1: TForm1; implementation {$R *.xfm} procedure TForm1.Image1DblClick(Sender: TObject); begin MoverImagen(Panel1, Panel2, (sender as TImage)); end; procedure TForm1.MoverImagen(Orig, Dest: TPanel; Img: TImage); const MOVIMIENTOS = 30; var i, ini, fin, tramo : Integer; ImgCoordsOrig : TPoint; begin APanel.Width := Img.Width; APanel.Height := Img.Height; APanel.Left := Orig.Left + Img.Left; APanel.Top := Orig.Top + Img.Top; Img.Parent := APanel; ImgCoordsOrig := Point(Img.Left, Img.Top); Img.Left := 0; Img.Top := 0; APanel.Visible := True; ini := Orig.Left + Img.Left; fin := Dest.Left + Img.Left; tramo := (fin - ini) div MOVIMIENTOS; for i := 1 to MOVIMIENTOS do begin APanel.Left := APanel.Left + tramo; sleep(10); Application.ProcessMessages; end; Img.Left := ImgCoordsOrig.X; Img.Top := ImgCoordsOrig.Y; Img.Parent := Dest; APanel.Visible := False; end; procedure TForm1.FormCreate(Sender: TObject); begin APanel := TPanel.Create(self); APanel.Parent := self; APanel.BevelOuter := bvNone; APanel.Visible := False; end; procedure TForm1.FormDestroy(Sender: TObject); begin If Assigned(APanel) then Apanel.Free; end; end.