Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / API для жизни / 4 сообщений из 4, страница 1 из 1
09.10.2003, 12:49
    #32288722
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
API для жизни
Периодически встречал примеры как некоторые ст. элементы заставить вести себя полюдски. В частности понадобилось мне заставить один ListBox прокрутиться вниз. - ничего не получилось, ... взял вариант попроще, попробовал послать SB_PAGEDOWN главному окну Excel - тоже ничего, ничего понимаю, кто в курсах, гляньте код, почему он не работает, а то уже не знаю что и думать, вроде все уже перепробовал... :-(

Dim i As Long
Dim hndExpl As Long

Public Const WM_VSCROLL = &H115
Public Const SB_PAGEDOWN = 3

hndExpl = FindWindow("XLMAIN", vbNullString)
i = SendMessage(hndExpl, WM_VSCROLL, SB_PAGEDOWN, Null)
...
Рейтинг: 0 / 0
09.10.2003, 13:07
    #32288753
IgorM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
API для жизни
В частном случае (форма с одним списком, без заголовка и примечания) список крутится так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Const WM_VSCROLL = &H115
Public Const GW_HWNDNEXT =  2 

Declare Function SendMessage Lib  "user32"  Alias  "SendMessageA"  _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
LParam As Any) As Long
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
Declare Function GetNextWindow Lib  "user32"  Alias  "GetWindow"  _
(ByVal hwnd As Long, ByVal wFlag As Long) As Long

Private Sub Кнопка0_Click()
  Dim w As Long, wn As Long
  w = FindWindowEx(Me.hwnd,  0 ,  "OFormSub" , vbNullString)
  w = GetNextWindow(w, GW_HWNDNEXT)
  wn = FindWindowEx(w,  0 ,  "OGrid" , vbNullString)
  SendMessage wn, WM_VSCROLL,  1 ,  0  'крутим вниз
End Sub


Кроме того, hwnd списка можно найти так: http://www.mvps.org/access/api/api0027.htm
...
Рейтинг: 0 / 0
09.10.2003, 14:14
    #32288897
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
API для жизни
Cпасибо (особенно за ссылку, забыл я совсем про эту функцию), будем экспериментировать дальше, просто я хотел это применять не только в Access, но и в Excel формах.
...
Рейтинг: 0 / 0
09.10.2003, 16:04
    #32289093
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
API для жизни
Достал я наконец Spy++ старенький, чтобы без всяких доп. библиотек запускался, запустил и проследил за этими ListBox.

Оказалось, что ListBox из Access вполне приличный себе списочек, который исправно реагирует на колесико мышки, и прокручивается получая WM_VSCROLL.

А вот гадский ListBox из Excel просто плюет и на колесико мышки и на WM_VSCROLL в том числе (он себя только лишний раз перерисовывает после получения WM_VSCROLL и все...), тогда я стал мотреть, что же он получает, когда его прокручиваешь нажимая на скролбар, он получает такие сообщения:

WM_LBUTTONDOWN: fwKeys: MK_LBUTTON xPos:185 yPos:8
WM_PAINT
WM_PAINT
WM_NCHITTEST
WM_NCHITTEST
WM_NCHITTEST
WM_NCHITTEST
WM_SETCURSOR: ncHittest:HTCLIENT; wMouseMsg: WM_MOUSEMOVE
WM_SETCURSOR: fHaltProcessing:False
WM_MOUSEMOVE: fwKeys:0000 xPos:185 yPos:8
WM_NCHITTEST
WM_NCHITTEST
WM_LBUTTONDOWN: fwKeys: MK_LBUTTON xPos:185 yPos:8
WM_PAINT
WM_PAINT
WM_NCHITTEST
WM_NCHITTEST
WM_NCHITTEST
WM_NCHITTEST
WM_SETCURSOR: ncHittest:HTCLIENT; wMouseMsg: WM_MOUSEMOVE
WM_SETCURSOR: fHaltProcessing:False
WM_MOUSEMOVE: fwKeys:0000 xPos:185 yPos:8
WM_NCHITTEST
WM_NCHITTEST

это я типа 2 раз нажал скроллбар и прокрутил его вниз
.... пытаюсь теперь понять через какие же сообщение он допирает, что его прокручивают...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / API для жизни / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]