TImage - Arrastar pelo form

23/08/2004

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


Janete

Respostas

23/08/2004

Beppe

Vê se isso resolve:
Image1.Left := X - (ScreenToClient(Mouse.CursorPos).X - Image1.Left);
Image1.Top := Y - (ScreenToClient(Mouse.CursorPos).Y - Image1.Top);



Responder Citar

23/08/2004

Janete

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


Responder Citar

23/08/2004

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.
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;



Responder Citar

23/08/2004

Janete

[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.
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;
[/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


Responder Citar

23/08/2004

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.


Responder Citar

23/08/2004

Janete

[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. ???


Responder Citar

23/08/2004

Ipc$

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.


Responder Citar