Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

h1d3

Movimentando Componetes no Form

Recommended Posts

Estava afim de fazer um form interativo,no eskema da area de trab do windows,no qual é possivel mexer as janelas...alguem sabe como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo para movimentar seria:

Cria um projeto e adiciona apenas um botão no form, faça o seguinte:

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls, JPeg, Menus;type  TForm1 = class(TForm)	BitBtn1: TBitBtn;	procedure BitBtn1Click(Sender: TObject);	procedure MouseParaBaixo(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);	procedure MouseMexer(Sender: TObject; Shift: TShiftState; X,Y: Integer);	procedure MouseParaCima(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);  private	{ Private declarations }	MouseDownSpot: TPoint;	Capturing: bool;  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);var	image: TImage;beginimage:=TImage.Create(Application);image.Parent:=self;image.Name:='image1';image.AutoSize:=True;image.OnMouseUp:=MouseParaCima;image.OnMouseDown:=MouseParaBaixo;image.OnMouseMove:=MouseMexer;image.Picture.LoadFromFile('C:\imagem2.jpg');end;procedure TForm1.MouseMexer(Sender: TObject; Shift: TShiftState; X, Y: Integer);beginif Capturing then	begin	(Sender as TImage).Left:=(Sender as TImage).Left -(MouseDownSpot.x-x);	(Sender as TImage).Top:=(Sender as TImage).Top - (MouseDownSpot.y-y);	end;end;procedure TForm1.MouseParaBaixo(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginif Capturing then	begin	ReleaseCapture;	Capturing:=false;	(Sender as TImage).Left:=(Sender as TImage).Left - (MouseDownSpot.x -x);	(Sender as TImage).Top:=(Sender as TImage).Top - (MouseDownSpot.y - y);	end;end;procedure TForm1.MouseParaCima(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginif ssCtrl in Shift then	begin	SetCaptureControl((Sender as TImage));	Capturing:=True;	MouseDownSpot.X:=x;	MouseDownSpot.Y:=Y;	end;end;end.

Para movimentar basta precionar o Ctrl sobre a imagem e mexer...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, adicionar um botão.. ir no evento OnClick e colocar o procedimento em questão, no caso ele vai criar um TImage na tela, carregando uma imagem sua, e tem as demais funções que precisa declarar ainda, é somente um exemplo, se quiser pode colocar o TImage e o botão na tela e colocar os procedimentos e testar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom fiz dos dois jeitus e tp eu cliko ctrl+drag encima do botaum ele naum mexe,ai cliko abre tp um janela vazia no canto eskerdo tb nm da pra mexe,fiz colocandu a imagem tb nm mexe nd naum Oo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... Testei aqui com o fonte acima e funcionou certinho...

Se quiser sem usar o Ctrl pode fazer assim:

 

Selecione o componente desejado que quer fazer o controle e faça assim, no meu exemplo vou fazer usando um Painel:

 

No evento OnMouseDown faça:

 

mexendo:=True;SetCapture(painel.Handle);GetCursorPos(posAntiga);

No evento OnMouseMove faça:

 

var	posNova: TPoint;beginif mexendo then	begin	GetCursorPos(posNova);	Screen.Cursor:=crSize;	painel.Left:=painel.Left - posAntiga.X + posNova.X;	painel.Top:=painel.Top - posAntiga.Y + posNova.Y;	posAntiga:=posNova;	end;

 

No evento OnMouseUp faça:

 

if mexendo then	begin	Screen.Cursor:=crDefault;	ReleaseCapture;	mexendo:=False;	end;

Declare ainda no Private o seguinte:

 

mexendo: boolean;posAntiga: TPoint;

Seu fonte deve de ficar algo do tipo:

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls;type  TForm1 = class(TForm)	painel: TPanel;	procedure painelMouseDown(Sender: TObject; Button: TMouseButton;	  Shift: TShiftState; X, Y: Integer);	procedure painelMouseMove(Sender: TObject; Shift: TShiftState; X,	  Y: Integer);	procedure painelMouseUp(Sender: TObject; Button: TMouseButton;	  Shift: TShiftState; X, Y: Integer);  private	{ Private declarations }	mexendo: boolean;	posAntiga: TPoint;  public	{ Public declarations }  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.painelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginmexendo:=True;SetCapture(painel.Handle);GetCursorPos(posAntiga);end;procedure TForm1.painelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);var	posNova: TPoint;beginif mexendo then	begin	GetCursorPos(posNova);	Screen.Cursor:=crSize;	painel.Left:=painel.Left - posAntiga.X + posNova.X;	painel.Top:=painel.Top - posAntiga.Y + posNova.Y;	posAntiga:=posNova;	end;end;procedure TForm1.painelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginif mexendo then	begin	Screen.Cursor:=crDefault;	ReleaseCapture;	mexendo:=False;	end;end;end.

Desta forma é mais simples e fácil :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

caraca!fiko bunitao!!!ueheuheuheu XDessa foi boa marcio ^^~~...."o marcio e um bom camarada,o marcio e um bom camarada,lalalal...XD"~~qualquer duvida a mais posso volta né :P?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara e dificil axa dica sobre multimidia =/,to um tempim procurandu e nada dum shufflelist,de sequencial...=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara percebi um erro no Drag,quando coloco as funcoes que voce me deu o componente com os codigo perde sua funcao,coloquei num button ele move mas naum da pra clik,nas listbox tb naum da pra clik,i agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi...

Bom, para resolver isto, vá no evento OnMouseDown e coloque:

 

if ssCtrl in Shift then	begin	\\Código	end;
Ficando assim:

 

if ssCtrl in Shift then	begin	mexendo:=True;	SetCapture(painel.Handle);	GetCursorPos(posAntiga);	end;
Vai precisa segurar o Ctrl para movimentar o mesmo na tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.