Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос про API / 13 сообщений из 13, страница 1 из 1
16.06.2004, 01:04:08
    #32562675
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
В USER32 есть функция MapWindowPoints.
С её помощью в VBA определяю координаты верхнего-левого угла окна ACCESS (-X/-Y)

Код: plaintext
1.
Dim ScrShif as pointApi
MapWindowPoints GetDesktopWindow(), GetParent(me.hwnd), ScrShif,  1 

Причем работает все просто на ура (учитывает и панели меню и панели инструментов)

Хотелось бы найти что то подобное для правого нижнего угла (не путать с размером client зоны, поскольку она не учитывает ни statusbar, ни нижней или левой панели меню/инструментов).
...
Рейтинг: 0 / 0
16.06.2004, 01:13:43
    #32562678
Sfagnum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
возьми размеры для того же HWND... и вперёд
ф-я GetRect по моему это... либо мессага EM_GETRECT

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
16.06.2004, 03:26:49
    #32562693
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
GetWindowRect ?
...
Рейтинг: 0 / 0
17.06.2004, 02:01:11
    #32564590
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
Ну вот те раз..
В первом случае:
авторвозьми размеры для того же HWND... и вперёд
ф-я GetRect по моему это... либо мессага EM_GETRECT

Код: plaintext
1.
Retrieves the formatting rectangle for an edit control. Refer to “Text
Formatting,” earlier in this chapter, for a description of formatting rectangles.
А во втором:
авторGetWindowRect ?
координаты окна.

Нужны координаты рабочей зоны окна ACCESS, с учетом StatusBar, MenuBar1....MenuBarN.
...
Рейтинг: 0 / 0
17.06.2004, 02:13:35
    #32564595
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
GetWindowRect

VB Declaration

Declare Function GetWindowRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT)

Description

Obtains the bounding rectangle for the entire window including borders, title bars, scroll bars, menus, and so on.

По описанию вроде соответствует. Или врут?
...
Рейтинг: 0 / 0
17.06.2004, 05:28:34
    #32564608
Alexander G
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
Дошло :)
Можно получить системные размеры title bar и border, иотнять.
...
Рейтинг: 0 / 0
18.06.2004, 00:07:56
    #32566367
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
авторДошло :)
Можно получить системные размеры title bar и border, иотнять.
Но ведь они могут быть и снизу и сверху или где угодно. Нужна функция подобная MapWindowPoints.
...
Рейтинг: 0 / 0
18.06.2004, 01:04:42
    #32566385
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
авторНо ведь они могут быть и снизу и сверху или где угодно. Нужна функция подобная MapWindowPoints.
Посмотрите обсуждение Разместить форму впритык к правому-нижнему углу главного окна
...
Рейтинг: 0 / 0
18.06.2004, 07:55:31
    #32566451
well_wisher_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
2 Alexander Say

Миллион раз обсуждалось уже.
1. необходимо получить хендл "окна администратора" (класс MDIClient) см. FindWindowEx
2. Получить координаты клиентской части "окна администратора" см. GetClientRect
3. далее по желанию

и всё.

ЗЫ Исползуй SPY + PSDK
...
Рейтинг: 0 / 0
18.06.2004, 08:57:00
    #32566493
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
авторНужны координаты рабочей зоны окна ACCESS, с учетом StatusBar, MenuBar1....MenuBarN.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Public Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As Rect) As Long

Dim AccRect As Rect

    Call GetClientRect(Application.hWndAccessApp, AccRect)

Это в пикселах будет :)
Потом надо еще на 15 умножить, чтобы в твипах получить
...
Рейтинг: 0 / 0
19.06.2004, 01:27:51
    #32568282
Alexander Say
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
Много написано и что ?
Про клиент зону уже можно книги писать. В клиент зоне окна ACCESS меню, панели, формы сами являются объектами. Вот мне и нужно чтобы форма не выезжала не за переделы клиент зоны не под "прибитые" панели. Панели отдельно формы отдельно.

Код: plaintext
1.
2.
GetWindowRect  -	Used to obtain a rectangle describing the location and
size of the window rectangle in screen coordinates. The window rectangle includes 
the border, caption, menu bars, and so on. 
Не ужели не понятно тут они пишут про системные статусы и меню.
А ACCESS генерирует свои объекты его меню панели, панели инструментов не что иное как формы.

Вся эта беда нужна для класса посему должна быть универсальна и проста.
...
Рейтинг: 0 / 0
19.06.2004, 13:11:46
    #32568378
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
на бегу сделал бы, наверно, так.
1) завел "тестовую форму-линейку-измеритель"
2) заморозив обновление экрана, максимизировал ее и взял ее координаты,
получив т.о. размеры текущей "клиентской зоны".
3) закрыл линейку и отморозил экран.

ЗЫ
Похоже, тут совсем без апи можно обойтись.
Если класс "библиотечный" - должно быть "универсально". То есть как функцию библиотечную все это вполне оформить можно
...
Рейтинг: 0 / 0
21.06.2004, 06:27:30
    #32568866
well_wisher_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос про API
2 Alexander Say

Вы читаете, что Вам здесь пишут?
Хех... ладно, вот Вам пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Option Compare Database
Option Explicit

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Const SWP_NOSIZE = &H1
Const SWP_SHOWWINDOW = &H40

Private Declare Function FindWindowEx& Lib "user32.dll" Alias "FindWindowExA" _
    (ByVal hwndParent&, ByVal hwndChildAfter&, ByVal lpszClass$, ByVal lpszWindow$)
Private Declare Function GetClientRect& Lib "user32.dll" (ByVal hwnd&, lpRect As RECT)
Private Declare Function SetWindowPos& Lib "user32.dll" _
    (ByVal hwnd&, ByVal hWndInsertAfter&, ByVal x As Long, ByVal y&, ByVal cx&, ByVal cy&, ByVal wFlags&)

Private Sub Button0_Click()
    Dim rc As RECT
    Dim hclient&
    hclient = FindWindowEx(Application.hWndAccessApp,  0 &, "MDIClient", vbNullString)
    Call GetClientRect(hclient, rc)
    Call SetWindowPos(Me.hwnd,  0 &, rc.Right - Me.WindowWidth /  15 , _
        rc.Bottom - Me.WindowHeight /  15 ,  0 &,  0 &, SWP_NOSIZE + SWP_SHOWWINDOW)
End Sub
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос про API / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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