Visual Basic - tengo un problema??????????

Life is soft - evento anual de software empresarial
 
Vista:

tengo un problema??????????

Publicado por carlos (24 intervenciones) el 02/04/2006 18:19:24
hola como estan bien mi problema es el siguiente yo quiero desabilitar el boton cerra del mdiform y me dijeron que con este codigo lo podria yo hacer :

Private Declare Function getsystemmenu Lib "user32.dll" (Byhwnd As Long, ByVal brevent As Long) As Long
Private Declare Function removemenu Lib "user32.dll" (Byvalhmenu As Long, ByVal nposition As Long, Byvalnflags As Long) As Long

Private Sub MDIForm_Load()
Dim A As Long
A = getsystemmenu(Me.hWnd, 0)
Call removemenu(A, 6, mf_Byposition)

y entonces en el momento de la eje me sale un error ncual me dice que no se ha podido encontrar en la DLL en A = getsystemmenu(Me.hWnd, 0) en user32.dll ojala alguien me pueda ayudar a resolver este problema de antemano muchas gracias y saludos .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:tengo un problema??????????

Publicado por Hercules (15 intervenciones) el 02/04/2006 19:43:36
CORRIGE EL CÓDIGO de las llamadas a la API (fíjate en las separaciones entre variables):
Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
y declara la constante MF_BYPOSITION:
Private Const MF_BYPOSITION = &H400&
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Corrige sintaxis

Publicado por Zoto (55 intervenciones) el 02/04/2006 21:53:06
Hola Carlos.

Respecto al código que comentas, el problema se halla en la escritura de las declaraciones de las API. Pero no en el modo en el que había insistido Hercules, que ha respondido tu pregunta con anterioridad: no era problema de los separadores.
El problema es que no has incluido el Alias de la función de la DLL.
Esto hacía que el compilador no fuera capaz de encontrar la función respectiva dentro de la librería dinámica y mostrara el siguiente error, si no me equivoco:

"Error 435 en tiempo de ejecución. No se pudo encontrar el punto de entrada de la DLL getsystemmenu en user32.dll."

Para corregir este problema, añade los Alias a las declaraciones de las dos API.
Además, como muy bien ha dicho Hercules, deberás añadir la declaración de la constante mf_Byposition si quieres que el código tenga algún efecto.

Reemplaza este código:

'--------------------------------
'CÓDIGO ERRÓNEO
'--------------------------------

Private Declare Function getsystemmenu Lib "user32.dll" (Byhwnd As Long, ByVal brevent As Long) As Long
Private Declare Function removemenu Lib "user32.dll" (Byvalhmenu As Long, ByVal nposition As Long, Byvalnflags As Long) As Long

Private Sub MDIForm_Load()
Dim A As Long
A = getsystemmenu(Me.hWnd, 0)
Call removemenu(A, 6, mf_Byposition)
End Sub

'--------------------------------
'CÓDIGO ERRÓNEO
'--------------------------------

Por éste otro:

'--------------------------------
'CÓDIGO CORREGIDO
'--------------------------------

'Se añaden los Alias a las declaraciones de API

Private Declare Function getsystemmenu Lib "user32.dll" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function removemenu Lib "user32.dll" Alias "RemoveMenu" (ByVal hMenu As Long, ByVal nposition As Long, ByVal wFlags As Long) As Long

Const MF_BYPOSITION = &H400 'Se declara la constante MF_BYPOSITION

Private Sub MDIForm_Load()
Dim A As Long
A = getsystemmenu(Me.hwnd, 0)
Call removemenu(A, 6, MF_BYPOSITION)
End Sub

'--------------------------------
'CÓDIGO CORREGIDO
'--------------------------------

Ahora ya debería funcionar y el botón de cerrar [X] del formulario MIDI debería aparecer desactivado.
Espero que te haya ayudado.
Hasta otra,

Zoto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Corrige sintaxis

Publicado por Hercules (15 intervenciones) el 02/04/2006 22:56:59
¿Y estás seguro que sin declarar el "alias" no funciona?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Seguramente

Publicado por Zoto (55 intervenciones) el 08/04/2006 00:58:32
Hola Hercules.

Es lo más probable. Observando el código y comprobándolo, el error devuelto ha sido el que comentaba Carlos. Añadiéndole los Alias me ha funcionado correctamente y, a simple vista, no creo que se deba a otro aspecto distinto (cabe añadir que le faltaba también la declaración de la constante, como dijiste).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar