existe algum jeito de mover um componente com o mouse?
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
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
Curtidas 0
Respostas
Emerson Nascimento
30/11/2005
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.
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;
GOSTEI 0
Emerson Nascimento
30/11/2005
esqueci de mencionar:
é preciso segurar o CTRL e clicar no componente para poder movimentá-lo.
é preciso segurar o CTRL e clicar no componente para poder movimentá-lo.
GOSTEI 0
Salsa
30/11/2005
a variavel MouseDownSpot eh q tipo de variavel?
eu declaro como?
eu declaro como?
GOSTEI 0
Dedi
30/11/2005
veja nesta pagina: [url]http://www.forumweb.com.br/foruns/index.php?showtopic=15069&mode=linearplus[/url]
GOSTEI 0
Emerson Nascimento
30/11/2005
declare na seção private do form:
MouseDownSpot : TPoint;
Capturing : bool;
MouseDownSpot : TPoint;
Capturing : bool;
GOSTEI 0
Salsa
30/11/2005
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 :/
GOSTEI 0
Weber
30/11/2005
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;
GOSTEI 0
Salsa
30/11/2005
valeu weber esse funcionou legal... brigadao :)
GOSTEI 0
Marco Salles
30/11/2005
no meu caso deu das duas maneiras
Talves voce deva ter esquecido de fazer isto:
mas sem dúvida que o codigo que o weber sugeriu é mais enxuto
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
GOSTEI 0
Salsa
30/11/2005
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:
alguem ae pode me dar um help pra fazer isso? :)
valeu!!!!
:p
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
GOSTEI 0
Salsa
30/11/2005
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
ninguem ae sabe como posso mover o panel e o botao como se eles tivessem grudados?
valeu :P
GOSTEI 0