existe algum jeito de mover um componente com o mouse?

30/11/2005

0

eu queria colocar um componente ex um panel sei la.. onde qndo eu clickasse nele eu pudesse arrastar ele pra onde quiser....

se for panel melhor ... pra poder colocar coisas nele ex botoes dentro de uma panel e pode arrastar o panel pro lugar q eu quiser no form...

num sei se expliquei direito masss....

se alguem souber de algum componente ou alguma funçao q faça esse eskema de movimentar um componente pelo form clickando com um mouse e arrastando.. eu agradeceria... valeu :p


Salsa

Salsa

Responder

Posts

30/11/2005

Emerson Nascimento

acho que esse exemplo pode te ajudar:
crie os três procedimentos abaixo e aponte os eventos OnMouseDown, OnMouseMove e OnMouseUp de todos os componentes que precisam ser movidos em run-time para a respectiva procedure.

// Evento OnMouseDown
procedure TForm1.ComponenteMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
  if ssCtrl in Shift then
    try
      SetCapture(TWinControl(Sender).Handle);
      Capturing := true;
      MouseDownSpot.X := x;
      MouseDownSpot.Y := Y;
    except
    end;
end;

// Evento OnMouseMove
procedure TForm1.ComponenteMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
begin
  if Capturing then
    try
      TWinControl(Sender).Left:= TWinControl(Sender).Left - (MouseDownSpot.x-x);
      TWinControl(Sender).Top:= TWinControl(Sender).Top - (MouseDownSpot.y-y);
    except
    end;
end;

// Evento OnMouseUp
procedure TForm1.ComponenteMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
  if Capturing then
  begin
    ReleaseCapture;
    Capturing := false;
    try
      TWinControl(Sender).Left := TWinControl(Sender).Left - (MouseDownSpot.x -x);
      TWinControl(Sender).Top := TWinControl(Sender).Top - (MouseDownSpot.y - y);
    except
    end;
  end;
end;



Responder

30/11/2005

Emerson Nascimento

esqueci de mencionar:
é preciso segurar o CTRL e clicar no componente para poder movimentá-lo.


Responder

30/11/2005

Salsa

a variavel MouseDownSpot eh q tipo de variavel?
eu declaro como?


Responder

01/12/2005

Dedi

veja nesta pagina: [url]http://www.forumweb.com.br/foruns/index.php?showtopic=15069&mode=linearplus[/url]


Responder

01/12/2005

Emerson Nascimento

declare na seção private do form:

MouseDownSpot : TPoint;
Capturing : bool;


Responder

02/12/2005

Salsa

no meu nao rolou nao esse eskema de arrastar e fiz igualzinho os exemplos :( tento arrastar com o mouse ou sem o mouse como no ex do link e nada :/


Responder

03/12/2005

Weber

Se for só pra mover usando o mouse tá ai:

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  TWinControl(Sender).perform(WM_SYSCOMMAND, $f012, 0);
end;



Responder

03/12/2005

Salsa

valeu weber esse funcionou legal... brigadao :)


Responder

03/12/2005

Marco Salles

no meu caso deu das duas maneiras

Talves voce deva ter esquecido de fazer isto:

crie os três procedimentos abaixo e aponte os eventos OnMouseDown, OnMouseMove e OnMouseUp de todos os componentes


mas sem dúvida que o codigo que o weber sugeriu é mais enxuto


Responder

04/12/2005

Salsa

aproveitando a funçao to tentando fazer o seguinte....

eu to movimentando o panel com o mouse como weber explicou ... blz....
agora coloquei um botao do lado do panel.. pra qndo eu arrastar o botao ir junto... como se tivesse grudado sabe... mas nao to conseguindo fazer direito...

aqui eu arrasto e soh qndo solto o meu panel q o botao vai pra posiçao...
queria q ele arrastasse junto tb :)


o jeito q nao tah dando certo eh esse:

ReleaseCapture;
TWinControl(Sender).perform(WM_SYSCOMMAND, $f012, 0);
Botao.Left := TWinControl(Sender).Left + TWinControl(Sender).Width;
Botao.Top := TWinControl(Sender).Top;



alguem ae pode me dar um help pra fazer isso? :)

valeu!!!!


:p


Responder

05/12/2005

Salsa

jah tentei colocar um Application.ProcessMessage tb e nada..

ninguem ae sabe como posso mover o panel e o botao como se eles tivessem grudados?


valeu :P


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar