Autor Tema: Manejo de Ventana MDIForm  (Leído 5559 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Manejo de Ventana MDIForm
« en: Enero 20, 2013, 06:40:57 am »
Tengo un programa que usa un MDIForm y varios Form hijos.
Al MDIForm le oculto los iconos de minimizar, maximizar y restaurar con este codigo:
Código: (VB) [Seleccionar]
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const WS_CLOSEBOX As Long = &H80000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const GWL_STYLE As Long = (-16)

y lo invoco con esto en el MDIForm:
Código: (VB) [Seleccionar]
Private Sub MDIForm_Initialize()
  '------------- quitar icono del form ---------------
  Dim lWnd As Long
 
  lWnd = GetWindowLong(Me.hWnd, GWL_STYLE)
  lWnd = lWnd And Not (WS_MINIMIZEBOX)
  lWnd = lWnd And Not (WS_MAXIMIZEBOX)
  lWnd = lWnd And Not (WS_CLOSEBOX)
  lWnd = SetWindowLong(Me.hWnd, GWL_STYLE, lWnd)
  '--------------------------------------------------
End Sub

Ahora, las ventanas hijas que abro tienen el BorderStyle en 0 por aprovechar el máximo espacio y ademas porque estéticamente no me gusta ver dos barras de ventanas, ademas que el proyecto real lo tengo totalmente copado, no me serviría activar la barra del form hijo para resolver este problema: el problema que tengo es que cada vez que abro una ventana hijo necesito cambiar el caption del MDIForm, pero si hago eso los botones del MDIform se vuelven a activar quedándome así:
ANTES


DESPUÉS


Ya probé invocando de nuevo el codigo del initialize pero nada (quiza lo estoy haciendo mal), ¿se puede lograr esto? o de plano ya no debo tocar el caption del formulario MDI?

Gracias
« última modificación: Enero 20, 2013, 06:49:42 am por YAcosta »
Me encuentras en YAcosta.com

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Manejo de Ventana MDIForm
« Respuesta #1 en: Enero 20, 2013, 12:59:42 pm »
No sé si funcione, pero de primera dejaria de usar la propiedad caption y usaria el API SetWindowText (fijate el primer ejemplo)

Decis que no funciona llamar a SetWindowLong despues de cambiar el caption? ... Y si pones un DoEvents en el medio? como para que refresque :P

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Manejo de Ventana MDIForm
« Respuesta #2 en: Enero 20, 2013, 03:55:05 pm »
Estimado YACosta
 
Usa el siguiente código
 
Option Explicit
Private Const WS_CLOSEBOX As Long = &H80000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const GWL_STYLE As Long = (-16)

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long


Private Sub Command1_Click()
  MDIForm1.Caption = "Ventana Form1"
  Form1.Show
  YAcostaStyleForm MDIForm1.hWnd
End Sub


Private Sub MDIForm_Initialize()
  YAcostaStyleForm Me.hWnd
End Sub


Private Sub YAcostaStyleForm(ByVal hWnd As Long)
  Dim lWnd As Long
 
  lWnd = GetWindowLong(hWnd, GWL_STYLE)
  lWnd = lWnd And Not (WS_MINIMIZEBOX)
  lWnd = lWnd And Not (WS_MAXIMIZEBOX)
  lWnd = lWnd And Not (WS_CLOSEBOX)
  lWnd = SetWindowLong(hWnd, GWL_STYLE, lWnd)
End Sub

 
 
Saludos, desde algún lugar de Lima-Perú
 
Saludos, desde algún lugar de Lima-Perú

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Manejo de Ventana MDIForm
« Respuesta #3 en: Enero 20, 2013, 04:03:32 pm »
Estimado YAcosta
 
 
Espero esto sea lo que necesitas
 

 
Código fuente del proyecto de ejemplo:
 http://www.technetperu.org/webdrive/EA64835D2E2E41F9AF85EBE06318BC87/YAcostaStyleForm.rar
 
 
Saludos desde algun lugar de Lima-Perú
Saludos, desde algún lugar de Lima-Perú

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de Ventana MDIForm
« Respuesta #4 en: Enero 20, 2013, 06:22:30 pm »
Muchas gracias Albertomi, ya vi mi error, funciono perfecto, moví el sub (lo volvi publico) a un modulo junto con las declaraciones porque sucede que cuando el Form1 llama al Form2 volvian a aparecer los botones y el alcance no daba, ya con eso funciono perfecto.

Muchas gracias mi amigo.
Me encuentras en YAcosta.com

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Manejo de Ventana MDIForm
« Respuesta #5 en: Enero 21, 2013, 11:52:01 am »
Hola gente, es mi primer mensaje por aca.

Y no te sirve usar la propiedad ControlBox del form?
que justamente oculta los botones que mencionas.

ControlBox=False

Saludos

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de Ventana MDIForm
« Respuesta #6 en: Enero 21, 2013, 04:26:38 pm »
Hola gente, es mi primer mensaje por aca.

Y no te sirve usar la propiedad ControlBox del form?
que justamente oculta los botones que mencionas.

ControlBox=False

Saludos

Bienvenido al foro.

Amigo, no te has percatado bien del pedido que yo hacia y que ya está resuelto. El ControlBox que tu mencionas no existe en formularios MDI, eso existe solo en formularios normales, checalo y verás.

Saludos
Me encuentras en YAcosta.com

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Manejo de Ventana MDIForm
« Respuesta #7 en: Enero 21, 2013, 09:24:28 pm »
Pero al estar maximizado y darle doble click el mdi ya no se reajusta a la pantalla
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Manejo de Ventana MDIForm
« Respuesta #8 en: Enero 22, 2013, 12:12:54 am »
Pero al estar maximizado y darle doble click el mdi ya no se reajusta a la pantalla

Asi es, no quiero que se reajuste a la pantalla con el doble click.
« última modificación: Enero 22, 2013, 12:15:46 am por YAcosta »
Me encuentras en YAcosta.com