Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Cual es el evento que se ejecuta al mover un formulario

Hola a todos.
Quiero hacer una consulta que a lo mejor es un poco tonta pero a mi me está volviendo loco
Quiero saber cual es el evento que se ejecuta al mover un formulario. Lo que necesito es que cuando mueva el formulario, otro formulario siga al primero como si fuera parte de el.
Desde ya agradezco sus comentarios.

Saludos
Jorge
Responder Con Cita
  #2  
Antiguo 16-06-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No es una pregunta tonta. Creo que Delphi no provee un evento como tal pero puedes interceptar el mensaje WM_SYSCOMMAND. En este hilo hay una forma de hacerlo aunque ahí el objetivo era impedir que se moviera el formulario.

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 16-06-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jorge.

Podrías capturar el mensaje WM_MOVING, vg.:
.h
Código PHP:
...
class 
TForm1 : public TForm
{
__published:    // IDE-managed Components
 
private:    // User declarations
  
void virtual __fastcall WMMoving(TMessageMessage);
protected:
  
BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER
(WM_MOVINGTMessageWMMoving);
  
END_MESSAGE_MAP(TForm);
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
}; 
.cpp
Código PHP:
...
void __fastcall TForm1::WMMoving(TMessageMessage)
{
  if (
Message.Msg == WM_MOVING)
    
ShowMessage("Moviendo");
  
DefaultHandler(&Message);

O también el mensaje WM_SYSCOMMAND como te indicó roman:
.h
Código PHP:
...
class 
TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
  
void virtual __fastcall WMSysCommand(TWMSysCommand &Message);
protected:
  
BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandWMSysCommand)
  
END_MESSAGE_MAP(TForm)
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
}; 
.cpp
Código PHP:
...
const 
SC_DRAGMOVE 0xF012;

void __fastcall TForm1::WMSysCommand(TWMSysCommand &Message)
{
 if (
Message.CmdType == SC_DRAGMOVE)
    
ShowMessage("Moviendo");
  
DefaultHandler(&Message);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 16-06-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Muchísimas gracias a los dos por las respuestas, son unos genios.
Estoy intentando ponerlo en practica. El primer método me tira varios errores, el segundo me anduvo pero con un problemita.
Solo ejecuta lo que está en el if cuando hago click en la barra para moverlo. Mientras estoy moviendo el formulario no ejecuta el bucle hasta que no vuelvo a hacer click en la barra de arriba.
¿Habrá alguna manera de que vaya actualizando los valores de Left y Top del formulario 2 a medida que vaya moviendo el formulario 1?
Responder Con Cita
  #5  
Antiguo 16-06-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Thumbs up

[quote=ecfisa;506219]Hola Jorge.

Podrías capturar el mensaje WM_MOVING, vg.:
.h
Código PHP:
...
class 
TForm1 : public TForm
{
__published:    // IDE-managed Components
 
private:    // User declarations
  
void virtual __fastcall WMMoving(TMessageMessage);
protected:
  
BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER
(WM_MOVINGTMessageWMMoving);
  
END_MESSAGE_MAP(TForm);
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
}; 
.cpp
Código PHP:
...
void __fastcall TForm1::WMMoving(TMessageMessage)
{
  if (
Message.Msg == WM_MOVING)
    
ShowMessage("Moviendo");
  
DefaultHandler(&Message);

Ya encontré el problema. Gracias ecfisa hay un ";" de mas.
Anduvo perfecto y ya se mueven los dos formularios juntos.
Muchísimas gracias, esta es la tercera vez que me das la solución a lo que necesito.
Gracias a los dos por tomarse el tiempo para contestarme.
Voy a continuar con la programación y espero no tener que volver a molestarlos.

Hasta pronto
Responder Con Cita
  #6  
Antiguo 16-06-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra opción mas:
.h
Código PHP:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
  
void __fastcall FormClick(TObject *Sender);
private:    
// User declarations
  
void __fastcall WMNCHitTest(TMessageMsg);
protected:
  
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER
(WM_NCHITTESTTMessageWMNCHitTest)
  
END_MESSAGE_MAP(TForm)
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
}; 
.cpp
Código PHP:
void __fastcall TForm1::WMNCHitTest(TMessage &Msg)
{
   
// mover el segundo form
   
Form2->Left Form1->Left Form1->Width;
   
Form2->Top  Form1->Top 20;
   
   if (
Msg.Result == HTCLIENT
     
Msg.Result HTCAPTION;
   
TForm::Dispatch(&Msg);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-06-2016
MARX MARX is offline
Miembro
NULL
 
Registrado: abr 2016
Posts: 35
Poder: 0
MARX Va por buen camino
Muchas gracias.
Que diferencia tiene este ultimo con los otros?
En los otros uno muestra el mensaje cuando se hace click en la barra y el otro es cuando se mueve el formulario.
Este código cuando se ejecutaría?
Responder Con Cita
  #8  
Antiguo 16-06-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jorge.

Podes encontrar la descripción (y diferencias) en la referencia de Microsoft:
(*) SC_DRAGMOVE sólo funciona con descendientes de TWinControl. No funciona por ejemplo, con un TImage.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 17-06-2016
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Yo también miraría WM_WINDOWPOSCHANGING y WM_WINDOWPOSCHANGED quizás te sean de utilidad. Yo los he usado para adosar una ventana a la ventana que se está arrastrando, (Como la ventana de TeamViewer de contactos).
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No se ejecuta un evento a tiempo vani OOP 2 24-10-2012 13:51:11
Al crear el formulario ejecuta evento OnShow(), Por qué? El_Raso Varios 4 12-07-2012 16:19:06
Problema: Hilo No ejecuta Procedimiento de su formulario. aoshishin1 Varios 9 11-07-2012 03:27:22
Evento que se ejecuta al Pulsar el boton de Minimizar de una Forma AGAG4 Varios 2 09-10-2004 18:31:38
cual es el evento que se ejecuta al mover la barra de seleccion en un dbgrid soyhugo Varios 3 17-02-2004 18:42:52


La franja horaria es GMT +2. Ahora son las 10:33:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi