Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Gestionar el evento OnMouseMove de la barra de titulo del Form

Hola amigos, estoy investigando un poco como funcionan las ventanas MDI y que desconocia que hacian y las veo muy utiles pero ahora tengo un par de dudas. He hecho que pueda arrastar el form MDIChild y gestionando los eventos OnMouseMove, OnMouseDown, y OnMouseUp controlo para que la ventana no se pueda salir del form que la contiene, o sea, salirse no se puede salir pero me refiero a que no se pueda salir de la zona visible. Ahora me gustaria hacer lo mismo pero en este caso arrastrando la barra de titulo del form hijo y no veo la manera de controlar esos eventos en la barra de titulo. Imagino que iran por aqui pero cambiando alguna cosa: http://www.clubdelphi.com/foros/show...oton+minimizar
La otra duda es que con mi codigo controlo que el form hijo no se pueda salir pero aun asi si mueves el raton muy rapido llega a salirse un poquito aunque lo arreglo en el evento OnMouseUp pero mientras arrastro me muestra los Scrolls del form padre y me gustaria saber si hay alguna manera de hacer que estos no aparezcan aunque me salga ya que no se ve bien.
¿podeis ayudarme?
Responder Con Cita
  #2  
Antiguo 19-10-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Maneja el mensaje WM_MOVING. En este hilo tienes un ejemplo en delphi.

Saludos.
Responder Con Cita
  #3  
Antiguo 19-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Lo siento pero me pierdo porque no tengo ni idea de delphi y aunque se parece pero me pierdo. Ahora mismo tengo esto:
En el .h:
Código PHP:
private:    // User declarations
   
void __fastcall WMSysCommand(TWMSysCommand &Msg);
protected:
  
BEGIN_MESSAGE_MAP
  VCL_MESSAGE_HANDLER
(WM_SYSCOMMANDTWMSysCommandWMSysCommand)
  
END_MESSAGE_MAP(TForm
En el .cpp:
Código PHP:
void __fastcall TFormHijo::WMSysCommand(TWMSysCommand &Msg)
{
   switch (
Msg.CmdType) {
      case 
SC_MOVE:
         
ShowMessage("Moviendo Form");
         break;
   }
   
DefaultHandler(&Msg);

Me interesaria mucho tu codigo pero para c++builder ya que antes de lo que estoy haciendo estuve intentando lo mismo que tu haces en tu codigo y lo consegui a medias.
Responder Con Cita
  #4  
Antiguo 19-10-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Estas manejando el mensaje WM_SYSCOMMAND y debes manejar WM_MOVING en la ventana child que se está moviendo. Este mensaje se produce antes de que el movimiento de ejectue, por lo que podrás evitar salirte del límite sin el efecto que comentabas más arriba, al mover deprisa el ratón.

Cita:
Empezado por msdn
lParam
A pointer to a RECT structure with the current position of the window, in screen coordinates. To change the position of the drag rectangle, an application must change the members of this structure.
Ahora no puedo ponerte un ejemplo en Builder cuando llegue a casa, si puedo, te lo pongo.

Saludos.

Última edición por escafandra fecha: 19-10-2015 a las 19:47:48.
Responder Con Cita
  #5  
Antiguo 19-10-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
Ok muchísimas gracias. Intentare seguir probando a ver que consigo pero la verdad es que el que no sabe es como el que no ve y voy dando palos de ciego.
Responder Con Cita
  #6  
Antiguo 19-10-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ejemplo simple reescribiendo la función virtual WndProc de un formulario:

Código PHP:
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
private:    // User declarations
protected:
  
virtual void __fastcall WndProc(TMessagemsg);
public:        
// User declarations
  
__fastcall TForm1(TComponentOwner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif 
Código PHP:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
  : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessagemsg)
{
  if(
msg.Msg == WM_MOVING){
    
TRect *= (TRect*)msg.LParam;
    if(
R->Left 50){
      
R->Left 50;
      
R->Right Left Width;
    }
  }
  
TForm::WndProc(msg);

Este ejemplo impide desplazar el formulario a la izquierda más allá del valor 50.


Saludos.
Responder Con Cita
Respuesta



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
Popup de la barra de titulo _cero_ C++ Builder 2 05-06-2008 18:02:21
cual es el evento contrario a onmousemove? carlosmat21 Gráficos 3 20-07-2007 16:46:37
Escribir en la barra de título marcoszorrilla Trucos 0 29-06-2006 22:50:13
URL en la barra de titulo??? Jonnathan Varios 7 30-01-2006 20:43:24
Capturar El Evento Onmousemove ANTONIOGALISTEO OOP 4 18-09-2003 09:16:01


La franja horaria es GMT +2. Ahora son las 22:35:56.


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