Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: hWnd элементов управления
 
 автор: AlexSyr   (20.09.2010 в 15:27)   личное сообщение
35 Кб.
 
 

В MSA hWnd имеют формы и само приложение. Но порой появляется необходимость узнать hWnd элемента управления, расположенного на форме. К примеру, позиционирование вызываемой формы относительно элемента управления с использованием API. Использование API значительно упрощает задачу, но требует наличие hWnd.
С элементами управления, типа TextBox, более-менее разобрался (см. пример для MSA2003 ==>>).
Но хочется большего - КАК получить hWnd, к примеру, Кнопки, Прямоугольника, ...???
Если кто решал (или уже решил) такую задачу ТКНИТЕ в нужном направлении.

  Ответить  
 
 автор: AlexSyr   (20.09.2010 в 15:29)   личное сообщение
37 Кб.
 
 

Да. И если кому-то интересно, то тот-же примерчик для MSA2010 ==>>

  Ответить  
 
 автор: Lukas   (20.09.2010 в 16:19)   личное сообщение
 
 

Может проще через GetCursorPos?

  Ответить  
 
 автор: AlexSyr   (20.09.2010 в 16:54)   личное сообщение
 
 

Возможно. Но это частное решение по позиционированию вызываемой формы, и было приведено в качестве примера.
Вопрос то стоит немного шире - возможно ли получать hWnd элементов управления (любых) в MSA?
Для чего это нужно???
1. видимо, невозможно будет полностью использовать возможности API. Хорошо это или плохо пока не знаю, т.к. в API - полный профан - только делаю первые шаги в этом направлении. Думаю, что использование API довольно сильно расширит возможности самого MSA. К примеру, TextBox в MSA имеет только вертикальную прокрутку, с помощью API можно сделать также горизонтальную. Или кнопку сделать с полосами прокрутки - бред, но мало ли что может понадобиться.
Понимаю, что пока не оцениваю всех возможностей, которые могут быть предоставлены - нужно изучать, но сразу отталкивает, что без решения поставленного вопроса - все это может быть просто бесполезно.
2. да и и просто для общего развития

  Ответить  
 
 автор: Lukas   (20.09.2010 в 17:41)   личное сообщение
 
 


Вопрос то стоит немного шире - возможно ли получать hWnd элементов управления (любых) в MSA?


Вот что по этому поводу пишут Гетц & Ко: стр 476


В отличии от VB, элементы управления Access не являются отдельными окнами
и не имеют свойства hWnd.
В Access элемент управления - это всего лишь "картинка на экране",
и окном он становится только при получении фокуса....


стр 267:


...Элементы управления приложений Access тоже можно рассматривать как окна.
Подобно окнам, элементы управления могут принимать информацию от пользователя
только в активном состоянии, то есть имея фокус ввода....


Отсебятина, ИМХО:
Такие элементы как кнопка и прямоугольник не имеют инструментов пользовательского ввода.
Потому для них не создаются окна, а без окна нет и хендлера.

  Ответить  
 
 автор: AlexSyr   (20.09.2010 в 18:17)   личное сообщение
 
 

Спасибо.
Все это я уже понял в процессе ....

  Ответить  
 
 автор: Силblч   (20.09.2010 в 18:22)   личное сообщение
 
 

нее отчаивайся :)
- скачай программку 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 тоже скачайте себе :)

  Ответить  
 
 автор: AlexSyr   (20.09.2010 в 19:14)   личное сообщение
 
 

Спасибо.
Буду изучать!!!
Только WinID 3.1 НЕ поддерживает даже Vista, а у меня 7

  Ответить  
 
 автор: Explorer   (20.09.2010 в 19:23)   личное сообщение
 
 

Виста отстой, переходи уже на ИксПи (с)

  Ответить  
 
 автор: AlexSyr   (20.09.2010 в 19:27)   личное сообщение
 
 

По поводу Vista - пожалуй соглашусь, а вот насчет Windows 7 - это зря!!!

  Ответить  
 
 автор: Lukas   (20.09.2010 в 19:40)   личное сообщение
 
 

+++++++++++

  Ответить  
 
 автор: Lukas   (20.09.2010 в 19:32)   личное сообщение
 
 

Прикольно. :)

  Ответить  
 
 автор: Силblч   (20.09.2010 в 18:37)   личное сообщение
 
 

в виндовсе все элементы - окна :)
просто достучаться до некоторых бывает тяжело ;)

  Ответить  
 
 автор: kot_k_k   (20.09.2010 в 22:43)   личное сообщение
 
 

тогда система должна называться - "Дорз" - аба на рідній мові "Двері" - что более характерно для нее - полные двэри.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList