Fórum Mover e redimensionar componente en RunTime #336827
26/01/2007
0
Pesquisando, consegui desenvolver a função abaixo para mover e redimensionar os componentes...
Sendo que num funciona para TEdit, TLabel entre outros, alguem pode me ajudar?!?!?
Antecipadamente agradeço a todos.
Sendo que num funciona para TEdit, TLabel entre outros, alguem pode me ajudar?!?!?
procedure TForm1.CtrlMouseMove(Sender:TObject; Shift: TShiftState; X, Y: Integer);
function CheckDif(Tamanho, Posicao, Limite: Word): Boolean;
begin
Result := Abs(Tamanho - Posicao) <= Limite;
end;
begin
//{$Region´Muda o cursor do componente para redimensionar´}
if not (Sender is TForm) then
begin
//-- Redimensionar inferior direito
if (CheckDif(TWinControl(Sender).Width, X, 3) and CheckDif(TWinControl(Sender).Height, Y,3)) then
TWinControl(Sender).Cursor := crSizeNWSE
//-- Redimensionar inferior esquerdo
else if (CheckDif(0, X, 3) and CheckDif(TWinControl(Sender).Height, Y,3)) then
TWinControl(Sender).Cursor := crSizeNESW
//-- Redimensionar superior esquerdo
else if (CheckDif(0, X, 3) and CheckDif(0, Y,3)) then
TWinControl(Sender).Cursor := crSizeNWSE
//-- Redimensionar superior direito
else if (CheckDif(TWinControl(Sender).Width, X, 3) and CheckDif(0, Y,3)) then
TWinControl(Sender).Cursor := crSizeNESW
//-- Redimensionar pela base inferior
else if CheckDif(TWinControl(Sender).Height, Y, 3) then
TWinControl(Sender).Cursor := crSizeNS
//-- Redimensionar pela base superior
else if CheckDif(0, Y, 3) then
TWinControl(Sender).Cursor := crSizeNS
//-- Redimensionar pela lateral direita
else if CheckDif(TWinControl(Sender).Width, X, 3) then
TWinControl(Sender).Cursor := crSizeWE
//-- Redimensionar pela lateral esquerda
else if CheckDif(0, X, 3) then
TWinControl(Sender).Cursor := crSizeWE
else
TWinControl(Sender).Cursor := crDrag;
end;
//{$EndRegion}
if (ssLeft in Shift) and not (Sender is TForm) then
begin
//{$Region´Executa o redimensionamento dos componentes´}
ReleaseCapture;
if (ssLeft in Shift) then
begin
//-- Redimensionar inferior direito
if (CheckDif(TWinControl(Sender).Width, X, 3) and CheckDif(TWinControl(Sender).Height, Y,3)) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f008, 0)
//-- Redimensionar inferior esquerdo
else if (CheckDif(0, X, 3) and CheckDif(TWinControl(Sender).Height, Y, 3)) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f007, 0)
//-- Redimensionar superior esquerdo
else if (CheckDif(0, X, 3) and CheckDif(0, Y, 3)) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f004, 0)
//-- Redimensionar superior direito
else if (CheckDif(TWinControl(Sender).Width, X, 3) and CheckDif(0, Y, 3)) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f005, 0)
//-- Redimensionar pela base inferior
else if CheckDif(TWinControl(Sender).Height, Y, 3) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f006, 0)
//-- Redimensionar pela base superior
else if CheckDif(0, Y, 3) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f003, 0)
//-- Redimensionar pela lateral direita
else if CheckDif(TWinControl(Sender).Width, X, 3) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f002, 0)
//-- Redimensionar pela lateral esquerda
else if CheckDif(0, X, 3) then
TWinControl(Sender).perform(WM_SYSCOMMAND, $f001,0)
//-- Muda a posicao
else
TWinControl(Sender).Perform(WM_SYSCOMMAND, $f012, 0);
//-- Atualizar o form
TControl(Sender).Parent.Refresh;
//Application.ProcessMessages;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.OnMouseMove := CtrlMouseMove;
Button1.OnMouseMove := CtrlMouseMove;
Label1.OnMouseMove := CtrlMouseMove;
StaticText1.OnMouseMove := CtrlMouseMove;
MaskEdit1.OnMouseMove := CtrlMouseMove;
end;
Antecipadamente agradeço a todos.
Aloizio Castro
Curtir tópico
+ 0
Responder
Posts
27/01/2007
Aloizio Castro
up
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)