ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Why doesn't this work ? (https://www.excelbanter.com/excel-programming/333635-why-doesnt-work.html)

RAFAAJ2000[_2_]

Why doesn't this work ?
 
Hi all,

I have a UserForm with a TextBox and a CommandButton.
I want to write some text on the TexBox using the 'SendMessage' API when the
CommandButton is clicked .

I am able to get the window handle of the TextBox control by using the
'apiGetFocus' but for somw reason, the text is not added !!!!


Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
TextBox1.SetFocus
Hndle = apiGetFocus
SendMessage Hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


Any help would be much appreciated.

Regards.

Rob Bovey

Why doesn't this work ?
 

All of the MSForms controls are windowless, so none of the API calls
that return window handles will work on them. The window handle returned by
your GetFocus API call is for a Window that is part of the UserForm itself,
rather than any of the controls on it. Is there some reason you need to
write to the textbox this way? It would be much easier to just set its Text
property.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm

"RAFAAJ2000" wrote in message
...
Hi all,

I have a UserForm with a TextBox and a CommandButton.
I want to write some text on the TexBox using the 'SendMessage' API when
the
CommandButton is clicked .

I am able to get the window handle of the TextBox control by using the
'apiGetFocus' but for somw reason, the text is not added !!!!


Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As
Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
TextBox1.SetFocus
Hndle = apiGetFocus
SendMessage Hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


Any help would be much appreciated.

Regards.




RAFAAJ2000[_2_]

Why doesn't this work ?
 
Thanks for the quick reply Rob,

Actually the Hnandle of the UserForm is different from that of the TextBox
as shown by the MsggBox in the snippet take below :

Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
Form_Handle = FindWindow(vbNullString, Me.Caption)
TextBox1.SetFocus
TextBox_Handle = apiGetFocus
MsgBox Form_Handle & vbTab & TextBox_Handle
SendMessage hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


The reason I want to use the SendMessage API rather than the Text property
is for experimenting purposes only. I saw some similar code on the Web for
Access which does work ! I don't see why Excel shouldn't !

Regards.




"Rob Bovey" wrote:


All of the MSForms controls are windowless, so none of the API calls
that return window handles will work on them. The window handle returned by
your GetFocus API call is for a Window that is part of the UserForm itself,
rather than any of the controls on it. Is there some reason you need to
write to the textbox this way? It would be much easier to just set its Text
property.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm

"RAFAAJ2000" wrote in message
...
Hi all,

I have a UserForm with a TextBox and a CommandButton.
I want to write some text on the TexBox using the 'SendMessage' API when
the
CommandButton is clicked .

I am able to get the window handle of the TextBox control by using the
'apiGetFocus' but for somw reason, the text is not added !!!!


Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As
Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
TextBox1.SetFocus
Hndle = apiGetFocus
SendMessage Hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


Any help would be much appreciated.

Regards.





Rob Bovey

Why doesn't this work ?
 
Actually the Hnandle of the UserForm is different from that of the TextBox
as shown by the MsggBox in the snippet take below :


You aren't getting the window handle of the UserForm itself, but rather
a child window of the UserForm that represents the area you drop controls
on.

The reason I want to use the SendMessage API rather than the Text
property
is for experimenting purposes only. I saw some similar code on the Web for
Access which does work ! I don't see why Excel shouldn't !


Access uses a much different Forms package than the rest of the Office
applications, so they aren't comparable.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm

"RAFAAJ2000" wrote in message
...
Thanks for the quick reply Rob,

Actually the Hnandle of the UserForm is different from that of the TextBox
as shown by the MsggBox in the snippet take below :

Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As
Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
Form_Handle = FindWindow(vbNullString, Me.Caption)
TextBox1.SetFocus
TextBox_Handle = apiGetFocus
MsgBox Form_Handle & vbTab & TextBox_Handle
SendMessage hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


The reason I want to use the SendMessage API rather than the Text
property
is for experimenting purposes only. I saw some similar code on the Web for
Access which does work ! I don't see why Excel shouldn't !

Regards.




"Rob Bovey" wrote:


All of the MSForms controls are windowless, so none of the API calls
that return window handles will work on them. The window handle returned
by
your GetFocus API call is for a Window that is part of the UserForm
itself,
rather than any of the controls on it. Is there some reason you need to
write to the textbox this way? It would be much easier to just set its
Text
property.

--
Rob Bovey, Excel MVP
Application Professionals
http://www.appspro.com/

* Take your Excel development skills to the next level.
* Professional Excel Development
http://www.appspro.com/Books/Books.htm

"RAFAAJ2000" wrote in message
...
Hi all,

I have a UserForm with a TextBox and a CommandButton.
I want to write some text on the TexBox using the 'SendMessage' API
when
the
CommandButton is clicked .

I am able to get the window handle of the TextBox control by using the
'apiGetFocus' but for somw reason, the text is not added !!!!


Code:

Private Declare Function apiGetFocus Lib "user32" Alias "GetFocus" ()
As
Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
_
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam
As
Any) As Long

Const WM_SETTEXT = &HC

Private Sub CommandButton1_Click()
TextBox1.SetFocus
Hndle = apiGetFocus
SendMessage Hndle, WM_SETTEXT, 0, ByVal "WOW!"
End Sub


Any help would be much appreciated.

Regards.








All times are GMT +1. The time now is 09:50 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com