propiedad hWnd en VBA

14/04/2007 - 00:01 por Ivan | Informe spam
hola a todos,

no se si ha sido una alucinación mía, si me estoy haciendo un lió con
controles adicionales o si me lo estoy haciendo a causa de algún que otro
escarceo por VB 2005 Express, pero el caso es que hasta hace nada hubiera
jurado que los controles y formularios de VBA tenían la propiedad hWnd, pero
ahora, o estaba totalmente equivocado, o me ha desaparecido, pues ni aparece
en el examinador ni, por supuesto, me la reconoce.

¿podríais confirmarme que simplemente ha sido una alucinación mía ( que
supongo es lo mas probable)?¿o, si no es así, como podría haberse
'evaporado' y como podría 'recuperarla'?

bueno, si podéis echarme una mano os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 zz
14/04/2007 - 00:12 | Informe spam
no existe la propiedad HWND en los formularios, controles intrinsecos de
VBA, pero se puede subsanar con una API, pero en este momento no recuerdo
cual.

Zz

"Error: The file 'Brain.sys' could not be found in folder 'Head', body will
now work in reduced functionality mode'
Loading Heart.sys...

"Ivan" wrote in message
news:%
hola a todos,

no se si ha sido una alucinación mía, si me estoy haciendo un lió con
controles adicionales o si me lo estoy haciendo a causa de algún que otro
escarceo por VB 2005 Express, pero el caso es que hasta hace nada hubiera
jurado que los controles y formularios de VBA tenían la propiedad hWnd,
pero ahora, o estaba totalmente equivocado, o me ha desaparecido, pues ni
aparece en el examinador ni, por supuesto, me la reconoce.

¿podríais confirmarme que simplemente ha sido una alucinación mía ( que
supongo es lo mas probable)?¿o, si no es así, como podría haberse
'evaporado' y como podría 'recuperarla'?

bueno, si podéis echarme una mano os lo agradezco

un saludo y hasta pronto
Ivan

Respuesta Responder a este mensaje
#2 Héctor Miguel
14/04/2007 - 00:16 | Informe spam
hola, Ivan !

... hasta hace nada hubiera jurado que los controles y formularios de VBA tenian la propiedad hWnd
... o me ha desaparecido, pues ni aparece en el examinador ni, por supuesto, me la reconoce.
podriais confirmarme que simplemente ha sido una alucinacion mia (que supongo es lo mas probable)?
o, si no es asi, como podria haberse 'evaporado' y como podria 'recuperarla'?



[hasta donde se]... el 'tipo' de nombre que comentas -> hWnd
es el que [comunmente] se 'asigna' a los argumentos de funciones derivadas de llamadas a las API's de windows

o sea... mas que 'alucinacion'... pareciera una 'mezcla' de variables 'normales' segun 'tipo' de programacion :))

saludos,
hector.
Respuesta Responder a este mensaje
#3 Ivan
14/04/2007 - 00:53 | Informe spam
hola ZZ, muchas gracias por tu ayuda

no existe la propiedad HWND en los formularios, controles intrinsecos de
VBA



me imaginaba que era asi, pero 'tenia' que confirmarlo para dormir
'tranquilo'

pero se puede subsanar con una API, pero en este momento no recuerdo cual.



en ello andamos

lo dicho, muchas gracias y un saludo
Ivan
Respuesta Responder a este mensaje
#4 Ivan
14/04/2007 - 00:53 | Informe spam
hola Hector Miguel, y muchas gracias una vez mas

[hasta donde se]... el 'tipo' de nombre que comentas -> hWnd
es el que [comunmente] se 'asigna' a los argumentos de funciones derivadas
de llamadas a las API's de windows



es cierto, pero por lo que veo, algunos controles 'adicionales' (p.ej.
TreeWiev) si la admiten < bueno , escrita Hwnd > como propiedad propia, y
aunque me hubiera abrasado, (casi) hubiera puesto la mano en el fuego porque
en VBA tambien , uff

o sea... mas que 'alucinacion'... pareciera una 'mezcla' de variables
'normales' segun 'tipo' de programacion :))



la verdad es que tambien hay mucho de esto, pues ultimamente me estoy
volviendo majara entre APIs, 'Hooks', y dios sabe

bueno, creo que con esto elimino la duda.

de todas formas te explico un poco: se trata de una continuacion de las
pruebas con la 'rueda del raton', y aunque estoy mirando via APIs la forma
de obtener el controlador de ventana de los controles dentro de un
formulario, llevo dias con esta duda 'tonta'

gracias de nuevo y un saludo
Ivan.
Respuesta Responder a este mensaje
#5 zz
14/04/2007 - 02:51 | Informe spam
ya encontre algo que te puede ayudar, al menos en los Userforms:

la parte que hace el truco es esta

'Form window
hWnd = FindWindow("ThunderDFrame", Me.Caption)

le asigna el handle de la 'ventana' del formulario a la variable hWnd que es
del tipo Long , el mismo que usan las API's de windows.

la funcion FindWindowA encuentra la ventana por referencia a su nombre
[ThunderDframe es el nombre interno de los userforms].

de ahi deduzco podrás ajustarla a tus necesidades...




Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA"
(ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As
Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal
lParam As Long) As Long
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 Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA"
(ByVal hWnd As Long, ByVal lpString As String) As Long


Private Sub UserForm_Initialize()

Dim hWnd, eWnd As Long
Dim hIcon As Long
Dim f_style As Long

'Form window
hWnd = FindWindow("ThunderDFrame", Me.Caption)

'Application window
eWnd = FindWindow("XLMAIN", Application.Caption)

'Grab the icon from shell32.dll...
hIcon = ExtractIcon(0, "SHELL32.DLL", 165)

'draw the icon
SendMessage hWnd, &H80, True, hIcon
SendMessage hWnd, &H80, False, hIcon

'Form caption
Me.Caption = "Excel form with Icon"

f_style = GetWindowLong(hWnd, -16)
f_style = f_style Or &H30000 'system toolbox
f_style = f_style Or &H20000 'minimize
f_style = f_style Or &H10000 'maximize

SetWindowLong hWnd, -16, f_style

'Application caption
SetWindowText eWnd, "test123"
TextBox1.Width = Me.Width
TextBox1.Height = Me.Height - 20
TextBox1.Top = Me.Top - 40
TextBox1.Left = Me.Left

End Sub






Zz

"Error: The file 'Brain.sys' could not be found in folder 'Head', body will
now work in reduced functionality mode'
Loading Heart.sys...

"Ivan" wrote in message
news:%
hola ZZ, muchas gracias por tu ayuda

no existe la propiedad HWND en los formularios, controles intrinsecos de
VBA



me imaginaba que era asi, pero 'tenia' que confirmarlo para dormir
'tranquilo'

pero se puede subsanar con una API, pero en este momento no recuerdo
cual.



en ello andamos

lo dicho, muchas gracias y un saludo
Ivan

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida