Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta 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:
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:
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
(http://i.snag.gy/oEUEj.jpg)
DESPUÉS
(http://i.snag.gy/L2spk.jpg)
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
-
No sé si funcione, pero de primera dejaria de usar la propiedad caption y usaria el API SetWindowText (http://allapi.mentalis.org/apilist/SetWindowText.shtml) (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
-
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ú
-
Estimado YAcosta
Espero esto sea lo que necesitas
(http://www.technetperu.org/webdrive/EA64835D2E2E41F9AF85EBE06318BC87/YAcostaStyleForm.JPG)
Código fuente del proyecto de ejemplo:
http://www.technetperu.org/webdrive/EA64835D2E2E41F9AF85EBE06318BC87/YAcostaStyleForm.rar (http://www.technetperu.org/webdrive/EA64835D2E2E41F9AF85EBE06318BC87/YAcostaStyleForm.rar)
Saludos desde algun lugar de Lima-Perú
-
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.
-
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
-
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
-
Pero al estar maximizado y darle doble click el mdi ya no se reajusta a la pantalla
-
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.