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

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

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

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

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
Вопрос про API
    #32562693
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GetWindowRect ?
...
Рейтинг: 0 / 0
Вопрос про API
    #32564590
Alexander Say
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот те раз..
В первом случае:
авторвозьми размеры для того же 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
Вопрос про API
    #32564595
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Вопрос про API
    #32564608
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дошло :)
Можно получить системные размеры title bar и border, иотнять.
...
Рейтинг: 0 / 0
Вопрос про API
    #32566367
Alexander Say
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторДошло :)
Можно получить системные размеры title bar и border, иотнять.
Но ведь они могут быть и снизу и сверху или где угодно. Нужна функция подобная MapWindowPoints.
...
Рейтинг: 0 / 0
Вопрос про API
    #32566385
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНо ведь они могут быть и снизу и сверху или где угодно. Нужна функция подобная MapWindowPoints.
Посмотрите обсуждение Разместить форму впритык к правому-нижнему углу главного окна
...
Рейтинг: 0 / 0
Вопрос про API
    #32566451
well_wisher_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Alexander Say

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

и всё.

ЗЫ Исползуй SPY + PSDK
...
Рейтинг: 0 / 0
Вопрос про API
    #32566493
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНужны координаты рабочей зоны окна 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
Вопрос про API
    #32568282
Alexander Say
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Много написано и что ?
Про клиент зону уже можно книги писать. В клиент зоне окна 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
Вопрос про API
    #32568378
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на бегу сделал бы, наверно, так.
1) завел "тестовую форму-линейку-измеритель"
2) заморозив обновление экрана, максимизировал ее и взял ее координаты,
получив т.о. размеры текущей "клиентской зоны".
3) закрыл линейку и отморозил экран.

ЗЫ
Похоже, тут совсем без апи можно обойтись.
Если класс "библиотечный" - должно быть "универсально". То есть как функцию библиотечную все это вполне оформить можно
...
Рейтинг: 0 / 0
Вопрос про API
    #32568866
well_wisher_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос про API
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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