Mover componente
você sabe como posso possibilitar ao usuário do programa mover determinado componente dentro do form?
Earmarques
Curtidas 0
Respostas
Fred
03/07/2003
Por exemplo coloque um botão com uma seta para cada lado do form
e digite o código para cada botao
para cima ==> componente.top := componente.top-1;
para baixo ==> componente.top := componente.top+1;
para a direita ==> componente.left := componente.left+1;
para a esquerda ==> componente.left := componente.left-1;
:wink: 8)
e digite o código para cada botao
para cima ==> componente.top := componente.top-1;
para baixo ==> componente.top := componente.top+1;
para a direita ==> componente.left := componente.left+1;
para a esquerda ==> componente.left := componente.left-1;
:wink: 8)
GOSTEI 0
Thaisandrade
03/07/2003
Vou enviar um exemplo que tenho que você arrasta o componente com o mouse.
GOSTEI 0
Thaisandrade
03/07/2003
Altere as seguintes propriedades dos componentes que quer mover:
OnMouseDown -> ControlMouseDown
OnMouseMove -> ControlMouseMove
OnMouseUp -> ControlMouseUp
É só clicar e arrastar.
procedure TfrmMain.ControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TControl(Sender).BringToFront;
TControl(Sender).WindowProc:=
TControl(Sender).Repaint;
downX := X;
downY := Y;
dragging := TRue;
TMoveCracker(Sender).MouseCapture := True;
end;
procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If dragging Then
with Sender As TControl Do
Begin
Left := X-downX+Left;
Top := Y-downY+Top;
End;
end;
procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If dragging then
Begin
dragging := False;
TMoveCracker(Sender).MouseCapture := False;
End;
end;
OnMouseDown -> ControlMouseDown
OnMouseMove -> ControlMouseMove
OnMouseUp -> ControlMouseUp
É só clicar e arrastar.
procedure TfrmMain.ControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
TControl(Sender).BringToFront;
TControl(Sender).WindowProc:=
TControl(Sender).Repaint;
downX := X;
downY := Y;
dragging := TRue;
TMoveCracker(Sender).MouseCapture := True;
end;
procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If dragging Then
with Sender As TControl Do
Begin
Left := X-downX+Left;
Top := Y-downY+Top;
End;
end;
procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If dragging then
Begin
dragging := False;
TMoveCracker(Sender).MouseCapture := False;
End;
end;
GOSTEI 0
Japa
03/07/2003
thaisandrade se vc puder me mandar o exemplo para mim tambem eu agradeço muitoooo
meu e-mail é: ctk@dct.ufms.br
Obrigado :wink:
meu e-mail é: ctk@dct.ufms.br
Obrigado :wink:
GOSTEI 0
Nigro
03/07/2003
Teria como fazer isso com relatórios?
GOSTEI 0
Nigro
03/07/2003
sobe....
GOSTEI 0
Michael
03/07/2003
Olá!
Isto pode ser feito apenas com o evento [b:cccefafb03]OnMouseMove [/b:cccefafb03]da classe [b:cccefafb03]TControl[/b:cccefafb03], descartando-se os demais. Veja:
Basta usar a propriedade [b:cccefafb03]ControlState [/b:cccefafb03]e o método [b:cccefafb03]ClientToParent[/b:cccefafb03], ambos introduzidos por [b:cccefafb03]TControl[/b:cccefafb03].
Este código irá posicionar o controle sendo arrastado de forma que o cursor do mouse fique centralizado dentra da sua área. Se quiser mudar este comportamente, apenas mude o cálculo que é feito para se obter as coordenadas X e Y.
[]´s
Isto pode ser feito apenas com o evento [b:cccefafb03]OnMouseMove [/b:cccefafb03]da classe [b:cccefafb03]TControl[/b:cccefafb03], descartando-se os demais. Veja:
procedure TForm.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin with Sender as TControl do if csLButtonDown in ControlState then begin Left := ClientToParent(Point(X, Y)).X - (Width div 2); Top := ClientToParent(Point(X, Y)).Y - (Height div 2); end; end;
Basta usar a propriedade [b:cccefafb03]ControlState [/b:cccefafb03]e o método [b:cccefafb03]ClientToParent[/b:cccefafb03], ambos introduzidos por [b:cccefafb03]TControl[/b:cccefafb03].
Este código irá posicionar o controle sendo arrastado de forma que o cursor do mouse fique centralizado dentra da sua área. Se quiser mudar este comportamente, apenas mude o cálculo que é feito para se obter as coordenadas X e Y.
[]´s
GOSTEI 0
Nigro
03/07/2003
Valeria a pena implementar esses códigos para não usar o QRDesigner?
GOSTEI 0