Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Позиционирование у контрола формы / 25 сообщений из 44, страница 1 из 2
27.11.2014, 19:29
    #38818767
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Для позиционирования автономной формы около контролов уже открытой табличной формы, используется апи-функция GetFocus (Private Declare Function GetFocus Lib "User32" () As Long). По задаче координаты контрола должны вычисляться на события получения фокуса контролом. Но не вычисляются, вернее неверно вычисляются и все контролы формы (текстбоксы , комбо) имеют один и тот же hwnd. Подскажите, как найти hwnd контролов формы при получении ими фокуса?
Что интересно, если поставить GetFocus на событие Change и вручную, именно вручную внести данные в поле, то hwnd вычисляется правильно.
Как обойти этот затык? Где-то прочитал, что в каком-то календарике эта задача решена. Но не могу найти топик с решением.
...
Рейтинг: 0 / 0
27.11.2014, 20:46
    #38818828
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1,
возможно вы имели ввиду это ? :)
http://am.rusimport.ru/msaccess/topic.aspx?ID=356&find=??????
...
Рейтинг: 0 / 0
27.11.2014, 23:21
    #38818902
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Спасибо, guest_rusimport. Этот календарь я видел. Тот же гетфокус. Те же сны (с)

Ну, вот посмотрите. Сделал примерчик с табл.Сотрудники из борея. Если ходить по полям, то HWND не меняется. Если в любом поле поменять хоть что-то, то немедленно иной hwnd.

Может у меня глаза застило, может вы увидите где я ошибаюсь.
...
Рейтинг: 0 / 0
27.11.2014, 23:25
    #38818905
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Не прикрепляется файлик. Попробую еще раз
...
Рейтинг: 0 / 0
28.11.2014, 00:56
    #38818933
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1... Но не вычисляются, вернее неверно вычисляются ...
Я пользую алгоритм из календарика.
Все вычисляется/позиционируется правильно.

У Вас точно неверно вычисляется?
Или может неверно позиционируется форма?
...
Рейтинг: 0 / 0
28.11.2014, 02:01
    #38818940
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Покажу на примере. Та же форма, что и прежде. Но на полях Фамилия и Имя в событиях SetFocus и Change вызывается форма, которая должна встать чуть ниже активного контрола. На Change все встает правильно. А на SetFocus форма совсем в другом месте. В отладке выяснил, что это из-за неверного вычисления HWND функцией GetFocus. Вот и прошу совета как заставить GetFocus показывать правильное значение. Или пойти другим путем, но каким?
...
Рейтинг: 0 / 0
28.11.2014, 05:14
    #38818964
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1,
ну, если вам надо отслеживать событие получение фокуса, то можно так :)
...
Рейтинг: 0 / 0
28.11.2014, 11:34
    #38819249
Позиционирование у контрола формы
getfocus1,

откуда взялись предположения, что элементы управления на акцессовской форме оконные, что окон много, HWND неизменны и т. д.? Возьмите Spy++ или аналог (WinSight32 и т. п.) для начала и посмотрите, из чего состоит форма.

Насчёт других путей: возьмите Inspect , и если информация, им выдаваемая, (п)окажется полезной, подключите к проекту библиотеку Microsoft Office xx.x Object Library и используйте скрытый в ней интерфейс IAccessible для получения доступа к этой информации.
...
Рейтинг: 0 / 0
28.11.2014, 11:59
    #38819300
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Спасибо, guest_rusimport! Хотелось бы обойтись без таймера, но видимо не получится.
Но есть один неприятный момент. Если щелкнуть на пересечении записей (курсор при этом превращается в светлый крестик), то ситуация опять прежняя. Смотрите рисунок. Есть ли выход?
...
Рейтинг: 0 / 0
28.11.2014, 12:02
    #38819305
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
13-й квартал, желательно обойтись встроенными средствами Access. Из дополнительных только апи.
...
Рейтинг: 0 / 0
28.11.2014, 12:44
    #38819384
Позиционирование у контрола формы
getfocus1,

утилиты полезны для понимания ситуации вами, как разработчиком. Их не нужно распространять на клиентские машины.

Библиотека типов ставится с Офисом, и является "встроенным средством Access". Или вы CommandBar тоже не будете использовать на основании того, что он описан в Офисной библиотеке?
...
Рейтинг: 0 / 0
28.11.2014, 12:46
    #38819389
Позиционирование у контрола формы
getfocus1Для позиционирования автономной формы около контролов уже открытой табличной формы ИМХО, событие GotFocus возникает ПЕРЕД получением фокуса полем.
У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы?
Кстати, календарик обычно открывается при нажатии на кнопочку или двойным щелком по полю. В этот момент элемент, по которому щелкаете, точно имеет фокус.
...
Рейтинг: 0 / 0
28.11.2014, 12:53
    #38819401
Позиционирование у контрола формы
getfocus1,

кстати, Microsoft Active Accessibility - часть ОС, и доступ к ней как раз через API, просто библиотека типов сильно упрощает обращение к объектно-ориентированной части этого API.
...
Рейтинг: 0 / 0
28.11.2014, 13:22
    #38819457
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
13-й кварталИли вы CommandBar тоже не будете использовать на основании того, что он описан в Офисной библиотеке?
Использование меню и контекстных меню не предполагается. Но спасибо за направление в отладке


Анатолий ( Киев )ИМХО, событие GotFocus возникает ПЕРЕД получением фокуса полем. Понял. Но тогда странно, что DoEvents, записанный после получения фокуса не исправляет ситуацию. Или я неправильно понимаю действие DoEvents?

Анатолий ( Киев )У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы?Это пожелание заказчика иметь интерфейс для связанных списков в табличной форме. Единственный контрол в ней это комбо, роусоурс которого меняется в зависимости от значений других полей в записи.
...
Рейтинг: 0 / 0
28.11.2014, 13:51
    #38819545
П-Л
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1Анатолий ( Киев )У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы?Это пожелание заказчика иметь интерфейс для связанных списков в табличной форме. Единственный контрол в ней это комбо, роусоурс которого меняется в зависимости от значений других полей в записи.
Из табличной формы одним кликом попадаем в форму-карточку, в которой связанные списки программируются без проблем. Потом, тоже одним кликом - обратно. Или остаемся в карточке и в ней переходим на следующую запись, пока не захочется вернуться в табличную. Т.е. не соблюдая букву пожелания, вы соблюдаете его дух, не ухудшаете эргономику, делаете реализацию в разы быстрее штатными фичами. Вменяемому заказчику это легко обосновывается.
...
Рейтинг: 0 / 0
28.11.2014, 14:10
    #38819586
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Может попробовать посчитать с помощью SetCursorPos?
...
Рейтинг: 0 / 0
28.11.2014, 14:43
    #38819635
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено.
...
Рейтинг: 0 / 0
28.11.2014, 14:47
    #38819642
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
П-ЛИз табличной формы одним кликом попадаем в форму-карточку, в которой связанные списки программируются без проблем. Потом, тоже одним кликом - обратно. Или остаемся в карточке и в ней переходим на следующую запись, пока не захочется вернуться в табличную. Т.е. не соблюдая букву пожелания, вы соблюдаете его дух, не ухудшаете эргономику, делаете реализацию в разы быстрее штатными фичами. Вменяемому заказчику это легко обосновывается.Этот вариант рассматривался. Но было признано, что при большом объеме ввода нежелательно лишний раз прибегать к мышке (или клавиатурному сочетанию для перехода) и перемещать внимание оператора на другую часть формы. Разве не так?
В принципе и показ доп.формы на получении фокуса не столь обязателен, поскольку оператор начинает набирать текст и срабатывает Change, правильно фиксирующий доп.форму. Но как бы для порядка надо. :)
...
Рейтинг: 0 / 0
28.11.2014, 14:52
    #38819655
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
nord-woolfМожет попробовать посчитать с помощью SetCursorPos?То, что я находил, тоже не слишком надежно срабатывало. Или я неверно применял. :)
Может быть у вас есть хорошая ссылка? Был бы благодарен.
...
Рейтинг: 0 / 0
28.11.2014, 14:54
    #38819660
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
\\\\getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено.А что там по ссылке есть? Только простые и ленточная форма. Табличной нет. А с простой и ленточной формами проблем нет.
...
Рейтинг: 0 / 0
28.11.2014, 14:56
    #38819662
nord-woolf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
Не, я не пробовал.
Подозреваю, при вызове на GotFocus возможен аналогичный эффект,
но так, на всякий случай...
...
Рейтинг: 0 / 0
28.11.2014, 15:17
    #38819696
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1\\\\getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено.А что там по ссылке есть? Только простые и ленточная форма. Табличной нет. А с простой и ленточной формами проблем нет.Так ты читать не умеешь!?
qwerty112примерчик
смотреть форму Q в режиме ленточной или таб .формы
...
Рейтинг: 0 / 0
28.11.2014, 16:26
    #38819807
guest_rusimport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
getfocus1Спасибо, guest_rusimport! Хотелось бы обойтись без таймера, но видимо не получится.
Но есть один неприятный момент. Если щелкнуть на пересечении записей (курсор при этом превращается в светлый крестик), то ситуация опять прежняя. Смотрите рисунок. Есть ли выход?
извиняй - работа ... выход всегда должен быть :)
...
Рейтинг: 0 / 0
28.11.2014, 22:02
    #38820047
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
guest_rusimport, очередное спасибо!
Но не осознал, что изменилось и где. Ткните носом, пожалуйста.
...
Рейтинг: 0 / 0
28.11.2014, 22:04
    #38820048
getfocus1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиционирование у контрола формы
\\\\, это я увидел в ленточной и не понравилось. Не подойдет. Но спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Позиционирование у контрола формы / 25 сообщений из 44, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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