Mover componente

Delphi

03/07/2003

você sabe como posso possibilitar ao usuário do programa mover determinado componente dentro do form?


Earmarques

Earmarques

Curtidas 0

Respostas

Fred

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)


GOSTEI 0
Thaisandrade

Thaisandrade

03/07/2003

Vou enviar um exemplo que tenho que você arrasta o componente com o mouse.


GOSTEI 0
Thaisandrade

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;


GOSTEI 0
Japa

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:


GOSTEI 0
Nigro

Nigro

03/07/2003

Teria como fazer isso com relatórios?


GOSTEI 0
Nigro

Nigro

03/07/2003

sobe....


GOSTEI 0
Michael

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:

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

Nigro

03/07/2003

Valeria a pena implementar esses códigos para não usar o QRDesigner?


GOSTEI 0
POSTAR