TImage - Arrastar pelo form
Estou tentando mover um TImage pelo form e quase dá certo, é q fica meio estranho eu consigo arrastar só q não consigo deixar o componente exatamente no ponto q eu quero quando solto o mouse, será q falta alguma coisa para funcionar corretamente, estou fazendo assim:
Vamos lá!
DragMode do form e coloquei dmAutomatic
evento onDragOver do form:
if(Source is TImage)then
Accept := True;
evento onEndDrag da Image coloquei:
Image1.Top := Y;
Image1.Left := X;
na realidade eu queria poder arrastar somente em cima de um outro TImage q está em baixo, então tentei colocar no lugar do evento OnDragOver do Form colocar no mesmo evento só q o do segundo TImage q tenho no form, mais fica do mesmo jeito
já pesquisei pelo forum e foi esse exemplo q achei, foi o q deu mais certo mais não totalmente, então se alguém souber como fazer e puder me ajudar eu agradeço
Vamos lá!
DragMode do form e coloquei dmAutomatic
evento onDragOver do form:
if(Source is TImage)then
Accept := True;
evento onEndDrag da Image coloquei:
Image1.Top := Y;
Image1.Left := X;
na realidade eu queria poder arrastar somente em cima de um outro TImage q está em baixo, então tentei colocar no lugar do evento OnDragOver do Form colocar no mesmo evento só q o do segundo TImage q tenho no form, mais fica do mesmo jeito
já pesquisei pelo forum e foi esse exemplo q achei, foi o q deu mais certo mais não totalmente, então se alguém souber como fazer e puder me ajudar eu agradeço
Janete
Curtidas 0
Respostas
Beppe
23/08/2004
Vê se isso resolve:
Image1.Left := X - (ScreenToClient(Mouse.CursorPos).X - Image1.Left); Image1.Top := Y - (ScreenToClient(Mouse.CursorPos).Y - Image1.Top);
GOSTEI 0
Janete
23/08/2004
Vê se isso resolve:
Image1.Left := X - (ScreenToClient(Mouse.CursorPos).X - Image1.Left); Image1.Top := Y - (ScreenToClient(Mouse.CursorPos).Y - Image1.Top);
Obrigado pela sugestão, mas não deu certo
GOSTEI 0
Ipc$
23/08/2004
Não sei se resolve seu problema, mas esse código arrasta p/ qualquer lugar do Form e se vc quiser delimitar a área de arrasto, vc implementa no código. Desabilite os eventos de Drag.
var ClicouNaImagem:Boolean; iLeft,iTop:Integer; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then Exit; ClicouNaImagem := true; iLeft := Mouse.CursorPos.x; iTop := Mouse.CursorPos.y; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not ClicouNaImagem then Exit; Image1.Left := Image1.Left - iLeft + Mouse.CursorPos.x; Image1.Top := Image1.Top - iTop + Mouse.CursorPos.y; iLeft := Mouse.CursorPos.x; iTop := Mouse.CursorPos.y; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ClicouNaImagem := false; end;
GOSTEI 0
Janete
23/08/2004
[quote:e89cd80487=´IPC$´]Não sei se resolve seu problema, mas esse código arrasta p/ qualquer lugar do Form e se vc quiser delimitar a área de arrasto, vc implementa no código. Desabilite os eventos de Drag.
[/quote:e89cd80487]
Blz, deu certinho obrigado, agora eu não consegui implementar no código a área de arrasto q seria um panel, vc pode me dar mais uma mãozinha? :D
var ClicouNaImagem:Boolean; iLeft,iTop:Integer; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then Exit; ClicouNaImagem := true; iLeft := Mouse.CursorPos.x; iTop := Mouse.CursorPos.y; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not ClicouNaImagem then Exit; Image1.Left := Image1.Left - iLeft + Mouse.CursorPos.x; Image1.Top := Image1.Top - iTop + Mouse.CursorPos.y; iLeft := Mouse.CursorPos.x; iTop := Mouse.CursorPos.y; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ClicouNaImagem := false; end;
Blz, deu certinho obrigado, agora eu não consegui implementar no código a área de arrasto q seria um panel, vc pode me dar mais uma mãozinha? :D
GOSTEI 0
Ipc$
23/08/2004
A imagem já está no Panel ou não?
Se não estiver é só setar a propriedade Parent do TImage p/ TPanel do Panel que automaticamente vc só consegue arrastar dentro dele.
Se não estiver é só setar a propriedade Parent do TImage p/ TPanel do Panel que automaticamente vc só consegue arrastar dentro dele.
GOSTEI 0
Janete
23/08/2004
[quote:19a5342c67=´IPC$´]A imagem já está no Panel ou não?
Se não estiver é só setar a propriedade Parent do TImage p/ TPanel do Panel que automaticamente vc só consegue arrastar dentro dele.[/quote:19a5342c67]
Desculpe, mas eu não consegui achar a propriedade Parent do TImage só tem ParentShowHint. ???
Se não estiver é só setar a propriedade Parent do TImage p/ TPanel do Panel que automaticamente vc só consegue arrastar dentro dele.[/quote:19a5342c67]
Desculpe, mas eu não consegui achar a propriedade Parent do TImage só tem ParentShowHint. ???
GOSTEI 0
Ipc$
23/08/2004
A propriedade Parent é descendente de TControl e não aparece no Object Inspector; vc tem que setá-la via código ou colocar o TImage no TPanel em tempo de projeto.
GOSTEI 0