|
35 Кб. |
|
| В MSA hWnd имеют формы и само приложение. Но порой появляется необходимость узнать hWnd элемента управления, расположенного на форме. К примеру, позиционирование вызываемой формы относительно элемента управления с использованием API. Использование API значительно упрощает задачу, но требует наличие hWnd.
С элементами управления, типа TextBox, более-менее разобрался (см. пример для MSA2003 ==>>).
Но хочется большего - КАК получить hWnd, к примеру, Кнопки, Прямоугольника, ...???
Если кто решал (или уже решил) такую задачу ТКНИТЕ в нужном направлении. | |
|
| |
|
37 Кб. |
|
| Да. И если кому-то интересно, то тот-же примерчик для MSA2010 ==>> | |
|
| |
|
|
|
| Может проще через GetCursorPos? | |
|
| |
|
|
|
| Возможно. Но это частное решение по позиционированию вызываемой формы, и было приведено в качестве примера.
Вопрос то стоит немного шире - возможно ли получать hWnd элементов управления (любых) в MSA?
Для чего это нужно???
1. видимо, невозможно будет полностью использовать возможности API. Хорошо это или плохо пока не знаю, т.к. в API - полный профан - только делаю первые шаги в этом направлении. Думаю, что использование API довольно сильно расширит возможности самого MSA. К примеру, TextBox в MSA имеет только вертикальную прокрутку, с помощью API можно сделать также горизонтальную. Или кнопку сделать с полосами прокрутки - бред, но мало ли что может понадобиться.
Понимаю, что пока не оцениваю всех возможностей, которые могут быть предоставлены - нужно изучать, но сразу отталкивает, что без решения поставленного вопроса - все это может быть просто бесполезно.
2. да и и просто для общего развития | |
|
| |
|
|
|
|
Вопрос то стоит немного шире - возможно ли получать hWnd элементов управления (любых) в MSA?
|
Вот что по этому поводу пишут Гетц & Ко: стр 476
В отличии от VB, элементы управления Access не являются отдельными окнами
и не имеют свойства hWnd.
В Access элемент управления - это всего лишь "картинка на экране",
и окном он становится только при получении фокуса....
|
стр 267:
...Элементы управления приложений Access тоже можно рассматривать как окна.
Подобно окнам, элементы управления могут принимать информацию от пользователя
только в активном состоянии, то есть имея фокус ввода....
|
Отсебятина, ИМХО:
Такие элементы как кнопка и прямоугольник не имеют инструментов пользовательского ввода.
Потому для них не создаются окна, а без окна нет и хендлера. | |
|
| |
|
|
|
| Спасибо.
Все это я уже понял в процессе .... | |
|
| |
|
|
|
| нее отчаивайся :)
- скачай программку WinID
- рой в направлении API
не все потеряно ;)
Const WS_CHILD = &H40000000
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Const SW_HIDE = 0
Const SW_NORMAL = 1
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim tWnd As Long, bWnd As Long, ncWnd As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim R As RECT
'Get the taskbar's window handle
tWnd = FindWindow("Shell_TrayWnd", vbNullString)
'Get the start-button's window handle
bWnd = FindWindowEx(tWnd, ByVal 0&, "BUTTON", vbNullString)
'Get the start button's position
GetWindowRect bWnd, R
'Create a new button
ncWnd = CreateWindowEx(ByVal 0&, "BUTTON", "Hello !", WS_CHILD, 0, 0, R.Right - R.Left, R.Bottom - R.Top, tWnd, ByVal 0&, App.hInstance, ByVal 0&)
'Show our button
ShowWindow ncWnd, SW_NORMAL
'Hide the start button
ShowWindow bWnd, SW_HIDE
End Sub
Private Sub Form_Unload(Cancel As Integer)
'show the start button
ShowWindow bWnd, SW_NORMAL
'destroy our button
DestroyWindow ncWnd
End Sub
|
это инфа из API-Guide тоже скачайте себе :) | |
|
| |
|
|
|
| Спасибо.
Буду изучать!!!
Только WinID 3.1 НЕ поддерживает даже Vista, а у меня 7 | |
|
| |
|
|
|
| Виста отстой, переходи уже на ИксПи (с) | |
|
| |
|
|
|
| По поводу Vista - пожалуй соглашусь, а вот насчет Windows 7 - это зря!!! | |
|
| |
|
|
|
| +++++++++++ | |
|
| |
|
|
|
|
| в виндовсе все элементы - окна :)
просто достучаться до некоторых бывает тяжело ;) | |
|
| |
|