powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получение фокуса и координаты поля
47 сообщений из 47, показаны все 2 страниц
Получение фокуса и координаты поля
    #32762408
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ежели на поле есть фокус то можно получить его координаты и соответственно их использовать.

но как получить координаты поля в событии "получение фокуса"?
поле получает фокус и ежели в неи Null открывается формочка по координатам привязанная к полю? типа широкоизвестного календарика.
только в том календаре есть кнопка для его вызова, а нада чтоб без кнопки
сам вызывался...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762410
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
left, top - если не годится, то почему?
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762417
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Саныч!
не пробовал, не знаю. я взял где-то , счас уже не помню, и сделал по аналогии, там было через АПИ. до сих пор на этот "глюк" (если нет активного контрола - использует форму и по ее координатам отрабатывает) не обращал внимания . а счас дошло из-за чего это происходит и как бы ну...

форму нада открыть по определенным кординатам на экране а лефт, топ не совсем то.. наверное.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762420
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Секундочку. Нужны координаты контрола? Это и есть его left и top. Это относительно левого верхнего угла секции, но можно пересчитать во что угодно. Что не так?
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762424
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробую......
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762425
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде так оно, но почему тогда в календаре используют АПИ?

это наверное Сенин Виктор должен знать поточнее.

хотелось бы его услышать по данному поводу..
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762428
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадявроде так оно, но почему тогда в календаре используют АПИ?


Потому что с Win32 API проще получить экранные координаты контрола.
Left даст положение относительно формы, надо еще учесть положение формы, в Access это свойство формы WindowLeft, но надо учесть еще и другие факторы, толщину бордюров, вложенность форм ...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762521
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну значит мой вопрос остаётся в силе....
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762631
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадя я тебе на мыло скинул базу с примерами из книги Гетца, там как раз на эту тему. Думаю разберёшся, что к чему :)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762637
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяну значит мой вопрос остаётся в силе....
А почему в календарике-то не посмотрите?
Используйте тот код, что на кнопке, для события получения фокуса.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762760
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА почему в календарике-то не посмотрите?
Используйте тот код, что на кнопке, для события получения фокуса


там принцип нескольуо другой получения фокуса - там нажимается кноппка и перевод фокуса..

а мне нада чтоб автоматом при получении фокуса. но при этом поле еще не активно screen.activcontrol не срабатывает
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762908
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
вадяscreen.activcontrol не срабатывает
А просто написать имя контрола нельзя?
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32762931
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя ...а мне нада чтоб автоматом при получении фокуса. но при этом поле еще не активно screen.activcontrol не срабатывает

Вы уверены? У меня срабатывает

Private Sub Text2_GotFocus()
Debug.Print "Text2_GotFocus", Screen.ActiveControl.name
End Sub
В Immediate Window:
Text2_GotFocus Text2
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763057
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч А просто написать имя контрола нельзя?

не...

потому как это нада в вызываемой формачке , а откуда вызывали не известно заранее...
т.е. вызов из разных полей с разными именами...


2Serge Gavrilov

попробую вечером, может я несовсем точно диагностировал...

приведу код..
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763154
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Serge Gavrilov
получил. буду читать.

меня интересует календарь в котором месяцы приведены списком с номером месяца и именем месяца. и года списком ( не поле с выпадающим списком, для обоих)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763170
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя2Serge Gavrilov
получил. буду читать.


Не понял, что вы получили?
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763172
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge Gavrilov вадя2Serge Gavrilov
получил. буду читать.


Не понял, что вы получили?

он наверно получил мыло от меня, там примеры из Гетца :)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763275
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Serge Gavrilov

прошу на ты...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32763300
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя2Serge Gavrilov

прошу на ты...

поВыеживаться не дают :)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32764065
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ежели кто пробовал календарик трех авторов.
дак там тот же "глюк"
если сделать запуск календарика при получении фокуса полем , то он так же откроется по координатам формы , а не поля.!!!!!

для желающих поэкперементировать - прилогается.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32764101
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяежели кто пробовал календарик трех авторов.
дак там тот же "глюк"
если сделать запуск календарика при получении фокуса полем , то он так же откроется по координатам формы , а не поля.!!!!!

для желающих поэкперементировать - прилогается.

Да никакого особого глюка нет, все открывается правильно, если поле получает фокус после полной прорисовки формы.
Проверьте, сделайте еще одно поле с TabIndex-ом меньше, чем у поля с календарем и после открытия перейдите с него на поле с календарем, форма календаря откроется правильно.
Сделайте прозрачную кнопку, которая будет получать фокус при открытии формы, это решит проблему.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32764448
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроверьте, сделайте еще одно поле с TabIndex-ом меньше, чем у поля с календарем и после открытия перейдите с него на поле с календарем, форма календаря откроется правильно.

именно это я и сделал с оригиналом авторов Козина & Ко.

эффект тот же .

форма активна, размер не максимальный, фокус на поле (с TabIndex-ом меньше, чем у поля с календарем ) . мышкой встаешь на поле с календарём - календарик открывается нетам...
если двойной клик - всё ОК. вызов календарика одинаковый.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32764457
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСделайте прозрачную кнопку, которая будет получать фокус при открытии формы.

этого не хочется делать - не совсем красивое решение, дату нада вводить и вручную, и по двойному клику...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32764609
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя авторСделайте прозрачную кнопку, которая будет получать фокус при открытии формы.

этого не хочется делать - не совсем красивое решение, дату нада вводить и вручную, и по двойному клику...
Думаю, вы меня неправильно поняли, что я хотел предложить, но если вы говорите, что даже при получении фокуса на клик мышки окно открывается неправильно, то я это пока отпадает. А если Tab-ом переходить? Потому как я посмотрел, у меня было все нормально, но я переходил по клавише Tab
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765079
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Табом не пробовал - не используют.

похоже это не решенная проблема....

в лоб не решается

даже А. Козин через доп. поле предлагает...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765204
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордаже А. Козин через доп. поле предлагает...

слово даже не уместно в контексте
т.к. считаю сергея гаврилова более квалифицированым спецом ...

по теме разберусь детальнее как тока будет немного времени
наверняка ерунда какая - нить
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765230
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяТабом не пробовал - не используют.

похоже это не решенная проблема....

в лоб не решается

даже А. Козин через доп. поле предлагает...

Текстбок это не совсем настоящее окно, он имеет hwnd, только тогда, когда получает фокус. Видимо при щелчке мыши событие получения фокуса возникает до того, когда поле действительно получает фокус и имеет hwnd, который возвращает GetFocus.
Это легко проверить. Действительно, при щелчке мыши на поле GetFocus возвращает hwnd формы (при переходе по Tab - hwnd текстбокса).
В общем случае это легко обойти с помощью таймера
Допустим на событие получения фокуса Text0 вешаем процедурку

Private Sub Text0_GotFocus()
Debug.Print "Text0_GotFocus", GetFocus()
Me.TimerInterval = 10
End Sub

А на таймер
Private Sub Form_Timer()
Debug.Print "Form_Timer", Me.ActiveControl.name, GetFocus()
Me.TimerInterval = 0
End Sub

Text0 - первый контрол и получает фокус при открытии

При открытии формы имеем

Text0_GotFocus 1771832
Form_Timer Text0 91752644 - правильный hwnd

При последующем получении фокуса щелчком мыши:
Text0_GotFocus 8390862 - hwnd формы
Form_Timer Text0 91752644 - правильный hwnd
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765238
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейК автордаже А. Козин через доп. поле предлагает...

слово даже не уместно в контексте
т.к. считаю сергея гаврилова более квалифицированым спецом ...


Спасибо, Алексей. Хотел бы соответствовать :)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765304
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не посоветуете ли заодно, как скрывать календарь, если пользователь передумал по нему кликать и просто перешел на другой контрол (у меня на форме обычный контрол - календарь). На событие потери фокуса самим календарем не удается повесить код - кричит - нельзя скрыть активный контрол....
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765342
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мужики! специалисты вы все классные.

поэтому и спрашиваю.

через таймер - это на данный момент лучшее предложение.
мне оно больше нравится, чем доп. поле.

но в идеале хотелось бы конечно как-нибудь более правильнеееее, не через что-то.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765441
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не шибко вчитываясь и вдумываясь, целиком и полностью
присоединяюсь к мнению Саныча, о том, что что знания Left и Top
должно быть достаточно.

в коде значения возвращаются в твипах.
их значения надо пересчитать в пиксели, чтобы использовать вместе с апи-функциями.

У Гетса описан в исходных кодах класс AccessInfo ,
в котором есть "все необходимое".
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765444
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе посоветуете ли заодно, как скрывать календарь, если пользователь передумал по нему кликать и просто перешел на другой контрол (у меня на форме обычный контрол - календарь). На событие потери фокуса самим календарем не удается повесить код - кричит - нельзя скрыть активный контрол....

видимо совсем старенькая версия у тебя
последний называется datepikerv33.mdb

в ней есть код закрывающий календарь при клике вне календаря + всякой красоты немеряно
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765498
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АлексейК
если не влом.
переделать datepikerv в модель "выбор даты в четыре клика"
слева на право
список годов текущий и +/- 4 в видны в списке - первый клик
список месяцев номер + назвние видны все - второй клик
дни - третий клик

четвертый клик - ок / кансел

чета в раскрывающихся списках долго искать когда часто работаешь с датами
а четвертый - по вкусу , иногда прмахиваешься кликая в день.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765621
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victoshaне шибко вчитываясь и вдумываясь, целиком и полностью
присоединяюсь к мнению Саныча, о том, что что знания Left и Top
должно быть достаточно.
Чем-то напомнило всенародное осуждение Солженицина, в 70-е:
"Я этого ... не читал, но целиком и полностью поддерживаю партиию ..."
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32765695
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Хотел бы соответствовать :)



Подтвеждаю - соответствуешь!!!

идея с таймером прокатывает как нада. эффект такой как и хотелось.
на 99% устраивает.

спасибо!!!

(у меня , не скромно конечно, мысль насчет таймера мелькала, но видимо не стока опыта, чтоб проявиться в действии)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767185
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейКвидимо совсем старенькая версия у тебя
последний называется datepikerv33.mdb

в ней есть код закрывающий календарь при клике вне календаря + всякой красоты немеряно

Дык и подсказал бы идею реализации (достаточно только про клик вне календаря, а красоты немерянные нам без надобности). А левые контролы юзать влом, да и нефиг баловать юзеров красотами природы - индо работать перестанут - медитировать начнут...
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767192
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если нужно простое решение, но без возможности
редактирования даты вручную - ставь календарь на событие клик
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767206
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейКесли нужно простое решение, но без возможности
редактирования даты вручную - ставь календарь на событие клик

Елы-палы! Ставить не проблема! Проблема скрывать (Visible = False). Пока все поля формы на событие получение фокуса у меня имеют ссылку на функцию, скрывающую календарь. Но хотелось бы без дополнительных заморочек.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767232
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор Сенин старался, делал. (кстати его что то давно не видно)
по этому поводу и сделали версию datepikerv 33 .mdb

попробуй сначала? в этой версии при клике вне области календаря
календарь закрывается сам - не надо никакого кода!
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767249
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей, блин! Я ж говорю мне не надо сторонних компонентов (фирменных/нефирменных) тем более для моей задачи. Если она не решается более простым способом, дык, мне и функции достаточно. :о)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32767250
Kelme
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я может и не до конца понял в чём трабл, но такой код вполне работает:

Private Sub Form_Timer()
If Screen.ActiveForm.Name <> Me.Name Then
DoCmd.Close acForm, Me.Name
End If
end sub

форма, типа календарь, pop-up, при клике мимо формы календарь закрывается.
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32776434
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kelmeя может и не до конца понял в чём трабл, но такой код вполне работает:

Private Sub Form_Timer()
If Screen.ActiveForm.Name <> Me.Name Then
DoCmd.Close acForm, Me.Name
End If
end sub

форма, типа календарь, pop-up, при клике мимо формы календарь закрывается.

Код будет работать (даже проще было бы сделать на Потерю фокуса календарика), если бы не Модальные формы

2АлексейК
>>кстати его что то давно не видно

Привет! Я как сурок (?) из фильма "ДМБ" - его не видно, а он есть :)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32853392
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serge Gavrilov Victoshaне шибко вчитываясь и вдумываясь, целиком и полностью
присоединяюсь к мнению Саныча, о том, что что знания Left и Top
должно быть достаточно.
Чем-то напомнило всенародное осуждение Солженицина, в 70-е:
"Я этого ... не читал, но целиком и полностью поддерживаю партиию ..."

Вышеприведенное замечание расценил как «приглашение к просмотру».
Время выбралось только сейчас – пардон за задержку


Посмотрел. Вот наблюдения.

1) Про код вычисления координат окна.
Исходный вариант FormPlacement – без стеснения хорош.
Однако, вполне приемлемо по точности вычисления позиции заменяется на
(для Акцесс XP)
Код: plaintext
Me.Move mCallingForm.WindowLeft + mCallingControl.Left + xDelta + mCallingForm.CurrentSectionLeft, mCallingForm.WindowTop + mCallingControl.Top + yDelta + mCallingControl.Height + sectionTop
Где
Код: plaintext
1.
2.
sectionTop = mCallingForm.CurrentSectionTop
 xDelta = getXDeltaFormWidth(mCallingForm)
 yDelta = getYDeltaFormWidth(mCallingForm)

две последние функции вычисляют поправку на «толщину окна» код в файле.
Детали их реализации меня не вполне удовлетворили, но в целом, для «первичной оценки» - сгодится.

Так, что – не знаю что там про «партию», а Left и Top - достаточно

2) Про хуки, мыши и модальность.
Хук на мышь возник из-за модального запуска формы.
А зачем нужен модальный запуск при использовании на форме – я не понял,
потому в прикладываемом файле модальность, и «всплываемость» с формы
сняты.
Соответственно, исчезла потребность в мышином хуке и он заменен на
запуск «закрывающего таймера».

3) Про исходную проблему автора топика.
У нее два источника - первый – модальность запуска формы,
второй - установка на «хозяина» через объект Screen, который может не иметь ни «активного контрола», ни «активной формы» в процессе загрузки «хозяйской формы».

Выложенный вариант использует модифицированный метод
Friend Sub SetParent(tForm As Form)

Думаю, что умнее было бы в обычном модуле завести переменную для хранения формы хозяина и обвесить ее функциями чтения/записи.

В прикладываемом файле есть ленточная форма на таблице, которая демонстрирует работу «календаря» по входу в поле со значением Null.

PS
архив сжат программой 7-zip, (иначе не умещается в 70 кб.)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32853394
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на всякий случай (типа архив не откроется) - вот что там было в качестве
"2х фукций"

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
  ByVal hDC As Long) As Long
Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, _
  ByVal nIndex As Long) As Long


Function getYDeltaFormWidth(frm As Form) As Long
  'возвращает приращение y-координаты на ширину границы окна + ширина заголовка окна, если есть
  Const SM_CYBORDER As Long =  6 &
  Const SM_CYCAPTION As Long =  4 &
  Const SM_CYDLGFRAME As Long =  8 &
  Const SM_CYFIXEDFRAME As Long = SM_CYDLGFRAME
  Const SM_CYFRAME As Long =  33 &
  
  Const LOGPIXELSY =  90 &

  Dim YPIXELSPERINCH
  Dim hDC As Long, retVal As Long, hRes As Long
  
  hDC = GetDC( 0 )
  YPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSY)
  retVal = ReleaseDC( 0 , hDC)
  
  hRes = GetSystemMetrics(SM_CYCAPTION)
  
  Select Case frm.BorderStyle
    Case  0  ' нет границ
      retVal = GetSystemMetrics(SM_CYBORDER)
      hRes =  0 &
    Case  1  'тонкая
      retVal = GetSystemMetrics(SM_CYFIXEDFRAME)
    Case  2  'sizable
      retVal = GetSystemMetrics(SM_CYFRAME)
      retVal = retVal
    Case  3  ' окна диалога
      retVal = GetSystemMetrics(SM_CYDLGFRAME)
  End Select
   getYDeltaFormWidth = (CDec(retVal + hRes) / YPIXELSPERINCH) * TWIPSPERINCH
  
End Function

      
Function getXDeltaFormWidth(frm As Form) As Long
  'возвращает приращение х-координаты на ширину границы окна
  
  Const SM_CXBORDER As Long =  5 &
  Const SM_CXFRAME As Long =  32 & ' должно быть шириной для изменяемой границы окна
  Const SM_CXDLGFRAME As Long =  7 & ' должно быть шириной для диалогового окна
  Const SM_CXFIXEDFRAME As Long = SM_CXDLGFRAME ' ширина для тонкого окна?
  
  Const LOGPIXELSX As Long =  88 &
  
  Dim hDC As Long, retVal As Long
  Dim XPIXELSPERINCH
  
   hDC = GetDC( 0 )
   XPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSX)
  
   retVal = ReleaseDC( 0 , hDC)
   
  ' hRes = GetSystemMetrics(SM_CYCAPTION)
         
  Select Case frm.BorderStyle
    Case  0  ' нет границ
      retVal = GetSystemMetrics(SM_CXBORDER)
    Case  1  'тонкая
      retVal = GetSystemMetrics(SM_CXFIXEDFRAME)
    Case  2  'sizable
      retVal = GetSystemMetrics(SM_CXFRAME)
      retVal = retVal +  1 &
    Case  3  ' окна диалога
      retVal = GetSystemMetrics(SM_CXDLGFRAME)
  End Select
   getXDeltaFormWidth = (CDec(retVal) / XPIXELSPERINCH) * TWIPSPERINCH
End Function

(с выражением лица)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32853906
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
большой сенкс за проделанную работу.
буду еще читать, изучать.
на данный момент использую с таймером , но не везде идет.

вопрос предложенное решение годится для поля в ленточной подчиненной формы?
(к сожалению нет времени глубоко вникать в текст кода, ремонт......)
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32854004
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадябольшой сенкс за проделанную работу.
буду еще читать, изучать.
на данный момент использую с таймером , но не везде идет.

вопрос предложенное решение годится для поля в ленточной подчиненной формы?
(к сожалению нет времени глубоко вникать в текст кода, ремонт......)
в том виде, в котором оно было выложено - не годится для вложенных ленточных . Потому, что будет врать на величину заголовка окна.
для табличной формы/подформы тоже в этом виде не годится.

Чтобы поправить на подчиненную - нужно подправить
getYDeltaFormWidth
в случае, если форма вложенная, то возвращать только ширину SM_CYBORDER

Чтобы заработало для всех вариантов (+ табличная форма/подформа)

надо подправить вычисление позиции для случая табличной формы.

выглядеть это может так

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
'новый код вычисления координат окна с использованием Top и Left Контрола

 Dim xDelta As Long, yDelta As Long
 Dim lH As Long, lW As Long
 
 
 yDelta = getYDeltaFormWidth(mCallingForm)
 xDelta = getXDeltaFormWidth(mCallingForm)
 
 
 If mCallingForm.CurrentView =  1  Then ' вид простой или ленточной формы
   lH = mCallingControl.Height
   lH = lH + mCallingControl.Top
   lW = mCallingControl.Left
   
  ElseIf mCallingForm.CurrentView =  2  Then 'табличный вид
    If mCallingForm.RowHeight <  0  Then
      lH = mCallingForm.DefaultControl(acTextBox).Height
    Else
      lH = mCallingForm.RowHeight
    End If
   'вычисляем смещение по х
    lW = getSheetXPos()
  End If
  
  lH = mCallingForm.CurrentSectionTop + mCallingForm.WindowTop + yDelta + lH
  lW = xDelta + mCallingForm.CurrentSectionLeft + mCallingForm.WindowLeft + lW
  
 'вызов для А2000
  'DoCmd.MoveSize lW, lH
  Me.Move lW, lH
 
  Me.Visible = True
  
  pDeactReason = unkReason


самое малоприятное в этом деле - getSheetXPos()
что-то умного ничего не нашлось, и в результате , в недописанном,
недопонятом но, как будто - рабочем виде, это выглядит так

Код: 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.
Private Function getSheetXPos() As Long
  Dim lastCol As Long, iNdex As Long
  Dim xValue As Long, xBorder As Long
  Dim tControl
  On Error Resume Next
  xBorder = getXBorderWidth
  lastCol = mCallingControl.ColumnOrder
  
  For Each tControl In mCallingForm.Controls
    If tControl.ColumnOrder < lastCol Then
      If tControl.ColumnWidth <>  0  Then
        Select Case tControl.ColumnWidth
        Case Is >  0 
        xValue = xValue + tControl.ColumnWidth + xBorder
        Case - 1  'ширина по умолчанию (?)
        xValue = xValue + mCallingForm.DefaultControl(acTextBox).Width
        Case - 2  ' ширина по данным (?)
        'TO DO
        End Select
      End If
    End If
  Next
  If Err.Number <>  0  Then Err.Clear
  getSheetXPos = xValue
End Function

getXBorderWidth возвращяет (должна возвращять) "толщину сетки".
сейчас выглядит так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function getXBorderWidth() As Long
Const SM_CXBORDER As Long =  5 &
Const LOGPIXELSX As Long =  88 &
  
  Dim hDC As Long, retVal As Long
  Dim XPIXELSPERINCH
  
  hDC = GetDC( 0 )
  XPIXELSPERINCH = GetDeviceCaps(hDC, LOGPIXELSX)
  retVal = ReleaseDC( 0 , hDC)
  retVal = GetSystemMetrics(SM_CXBORDER)
  getXBorderWidth = (CDec(retVal) / XPIXELSPERINCH) * TWIPSPERINCH
  
End Function
...
Рейтинг: 0 / 0
Получение фокуса и координаты поля
    #32855741
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё больший сенкс....

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


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