|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Для позиционирования автономной формы около контролов уже открытой табличной формы, используется апи-функция GetFocus (Private Declare Function GetFocus Lib "User32" () As Long). По задаче координаты контрола должны вычисляться на события получения фокуса контролом. Но не вычисляются, вернее неверно вычисляются и все контролы формы (текстбоксы , комбо) имеют один и тот же hwnd. Подскажите, как найти hwnd контролов формы при получении ими фокуса? Что интересно, если поставить GetFocus на событие Change и вручную, именно вручную внести данные в поле, то hwnd вычисляется правильно. Как обойти этот затык? Где-то прочитал, что в каком-то календарике эта задача решена. Но не могу найти топик с решением. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 19:29 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, возможно вы имели ввиду это ? :) http://am.rusimport.ru/msaccess/topic.aspx?ID=356&find=?????? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 20:46 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Спасибо, guest_rusimport. Этот календарь я видел. Тот же гетфокус. Те же сны (с) Ну, вот посмотрите. Сделал примерчик с табл.Сотрудники из борея. Если ходить по полям, то HWND не меняется. Если в любом поле поменять хоть что-то, то немедленно иной hwnd. Может у меня глаза застило, может вы увидите где я ошибаюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 23:21 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Не прикрепляется файлик. Попробую еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2014, 23:25 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1... Но не вычисляются, вернее неверно вычисляются ... Я пользую алгоритм из календарика. Все вычисляется/позиционируется правильно. У Вас точно неверно вычисляется? Или может неверно позиционируется форма? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 00:56 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Покажу на примере. Та же форма, что и прежде. Но на полях Фамилия и Имя в событиях SetFocus и Change вызывается форма, которая должна встать чуть ниже активного контрола. На Change все встает правильно. А на SetFocus форма совсем в другом месте. В отладке выяснил, что это из-за неверного вычисления HWND функцией GetFocus. Вот и прошу совета как заставить GetFocus показывать правильное значение. Или пойти другим путем, но каким? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 02:01 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, ну, если вам надо отслеживать событие получение фокуса, то можно так :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 05:14 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, откуда взялись предположения, что элементы управления на акцессовской форме оконные, что окон много, HWND неизменны и т. д.? Возьмите Spy++ или аналог (WinSight32 и т. п.) для начала и посмотрите, из чего состоит форма. Насчёт других путей: возьмите Inspect , и если информация, им выдаваемая, (п)окажется полезной, подключите к проекту библиотеку Microsoft Office xx.x Object Library и используйте скрытый в ней интерфейс IAccessible для получения доступа к этой информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 11:34 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Спасибо, guest_rusimport! Хотелось бы обойтись без таймера, но видимо не получится. Но есть один неприятный момент. Если щелкнуть на пересечении записей (курсор при этом превращается в светлый крестик), то ситуация опять прежняя. Смотрите рисунок. Есть ли выход? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 11:59 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
13-й квартал, желательно обойтись встроенными средствами Access. Из дополнительных только апи. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 12:02 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, утилиты полезны для понимания ситуации вами, как разработчиком. Их не нужно распространять на клиентские машины. Библиотека типов ставится с Офисом, и является "встроенным средством Access". Или вы CommandBar тоже не будете использовать на основании того, что он описан в Офисной библиотеке? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 12:44 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1Для позиционирования автономной формы около контролов уже открытой табличной формы ИМХО, событие GotFocus возникает ПЕРЕД получением фокуса полем. У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы? Кстати, календарик обычно открывается при нажатии на кнопочку или двойным щелком по полю. В этот момент элемент, по которому щелкаете, точно имеет фокус. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 12:46 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, кстати, Microsoft Active Accessibility - часть ОС, и доступ к ней как раз через API, просто библиотека типов сильно упрощает обращение к объектно-ориентированной части этого API. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 12:53 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
13-й кварталИли вы CommandBar тоже не будете использовать на основании того, что он описан в Офисной библиотеке? Использование меню и контекстных меню не предполагается. Но спасибо за направление в отладке Анатолий ( Киев )ИМХО, событие GotFocus возникает ПЕРЕД получением фокуса полем. Понял. Но тогда странно, что DoEvents, записанный после получения фокуса не исправляет ситуацию. Или я неправильно понимаю действие DoEvents? Анатолий ( Киев )У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы?Это пожелание заказчика иметь интерфейс для связанных списков в табличной форме. Единственный контрол в ней это комбо, роусоурс которого меняется в зависимости от значений других полей в записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 13:22 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1Анатолий ( Киев )У вас что, автономная форма все время открыта и бегает по экрану следом за фокусом? Объясните вашу стратегию. Назначение формы?Это пожелание заказчика иметь интерфейс для связанных списков в табличной форме. Единственный контрол в ней это комбо, роусоурс которого меняется в зависимости от значений других полей в записи. Из табличной формы одним кликом попадаем в форму-карточку, в которой связанные списки программируются без проблем. Потом, тоже одним кликом - обратно. Или остаемся в карточке и в ней переходим на следующую запись, пока не захочется вернуться в табличную. Т.е. не соблюдая букву пожелания, вы соблюдаете его дух, не ухудшаете эргономику, делаете реализацию в разы быстрее штатными фичами. Вменяемому заказчику это легко обосновывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 13:51 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Может попробовать посчитать с помощью SetCursorPos? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:10 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:43 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
П-ЛИз табличной формы одним кликом попадаем в форму-карточку, в которой связанные списки программируются без проблем. Потом, тоже одним кликом - обратно. Или остаемся в карточке и в ней переходим на следующую запись, пока не захочется вернуться в табличную. Т.е. не соблюдая букву пожелания, вы соблюдаете его дух, не ухудшаете эргономику, делаете реализацию в разы быстрее штатными фичами. Вменяемому заказчику это легко обосновывается.Этот вариант рассматривался. Но было признано, что при большом объеме ввода нежелательно лишний раз прибегать к мышке (или клавиатурному сочетанию для перехода) и перемещать внимание оператора на другую часть формы. Разве не так? В принципе и показ доп.формы на получении фокуса не столь обязателен, поскольку оператор начинает набирать текст и срабатывает Change, правильно фиксирующий доп.форму. Но как бы для порядка надо. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:47 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
nord-woolfМожет попробовать посчитать с помощью SetCursorPos?То, что я находил, тоже не слишком надежно срабатывало. Или я неверно применял. :) Может быть у вас есть хорошая ссылка? Был бы благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:52 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
\\\\getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено.А что там по ссылке есть? Только простые и ленточная форма. Табличной нет. А с простой и ленточной формами проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:54 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Не, я не пробовал. Подозреваю, при вызове на GotFocus возможен аналогичный эффект, но так, на всякий случай... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 14:56 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1\\\\getfocus1, на вот 15165216 , у qwerty112 срисуй. Там, по моему, это между делом решено.А что там по ссылке есть? Только простые и ленточная форма. Табличной нет. А с простой и ленточной формами проблем нет.Так ты читать не умеешь!? qwerty112примерчик смотреть форму Q в режиме ленточной или таб .формы ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 15:17 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1Спасибо, guest_rusimport! Хотелось бы обойтись без таймера, но видимо не получится. Но есть один неприятный момент. Если щелкнуть на пересечении записей (курсор при этом превращается в светлый крестик), то ситуация опять прежняя. Смотрите рисунок. Есть ли выход? извиняй - работа ... выход всегда должен быть :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 16:26 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
guest_rusimport, очередное спасибо! Но не осознал, что изменилось и где. Ткните носом, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 22:02 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
\\\\, это я увидел в ленточной и не понравилось. Не подойдет. Но спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2014, 22:04 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1guest_rusimport, очередное спасибо! Но не осознал, что изменилось и где. Ткните носом, пожалуйста. Что? Что-то не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 12:08 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
guest_rusimportgetfocus1guest_rusimport, очередное спасибо! Но не осознал, что изменилось и где. Ткните носом, пожалуйста. Что? Что-то не работает? Нет. Все замечательно работает. Но я не вижу где и что Вы изменили (по сравнению с предыдущим вариантом), чтобы добиться правильного результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 14:06 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
getfocus1guest_rusimportпропущено... Что? Что-то не работает? Нет. Все замечательно работает. Но я не вижу где и что Вы изменили (по сравнению с предыдущим вариантом), чтобы добиться правильного результата. ну, дык форма frmPos :) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 16:38 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Есть, усвоил. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2014, 20:40 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Поднимаю топик... Переделываю пример под себя и обнаружил, что при открытии формы (которая у поля открывается) в поле списка нет фокуса. Т.е. без мышки ввести/изменить значение поля не получится, а надо. Привык я писать так, что бы можно было работать без мышки. Вопрос: как поставить фокус в поле со списком? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 12:50 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
и в догонку, если форму открывать не модально, то окно открывается ниже нужного места. При этом в функцию SetWindowPos координаты передаются одинаковые, что при модальном открытии, что без. Как бы это пофиксить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 13:55 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVT... как поставить фокус в поле со списком?... Если правильно понял, то делаю так. Me.[ИмяЭлементаУправления].SetFocus или DoCmd.GoToControl "ИмяЭлементаУправления" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 14:27 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Лапух, ну такие то простые вещи испробованы. Не пашет, к сожалению... Вы сами попробуйте... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 14:50 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVTпростые вещи испробованы. Не пашет, к сожалению Сорри, не разбирался с предыдущими постами, но если SetFocus не работает, то это означает практически наверняка, что после этого фокус меняется чем-то другим. Проследите по событиям с помощью Debug.Print, где это происходит. Иногда можно увидеть очень интересные пути прохождения событий ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 15:00 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
MrShin, фокус стоит в поле из которого вызывалось (к которому подвязывалась форма), а вот как его переставить... Это вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 15:04 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
MrShin...Сорри, не разбирался с предыдущими постами,... А я так и ва-а-аще их не смотрел. Ляпнул, что первое в голову пришло. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 15:18 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Решил! Что бы фокус стоял в поле надо вызывать SetWindowPos с другими параметрами, а именно. SetWindowPos Me.hwnd, True, frmRect.left, frmRect.top, frmDimensions.Width, frmDimensions.Height, SWP_NOZORDER Or SWP_SHOWWINDOW Or SWP_NOSIZE где: Private Const SWP_NOSIZE = &H1 ' Don't alter the size Private Const SWP_NOZORDER = &H4 ' Don't change the Z-order Private Const SWP_SHOWWINDOW = &H40 ' Display the window ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 15:27 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVT, тут в примере 16920668 изначально "накладка" произошла константа SWP_SHOWWINDOW была объявлена как - Const SWP_SHOWWINDOW = &H4 а на самом деле надо было как - Const SWP_SHOWWINDOW = &H40 тогда бы и с курсором и фокусом было бы всё в порядке :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2016, 20:50 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVT, всё гораздо проще. Подсказали как в этом сообщении . Точнее надо воспользоваться недокументированным методом accLocation . С помощью него можно получить координаты контрола/формы в пикселях (в табличной форме есть свои нюансы) NVT Код: vbnet 1.
Второй аргумент данной функции API не такой! Там тоже используются константы. Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 04:09 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
Upd. в функции SetWindowPos если используется SWP_NOSIZE размеры можно не передавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 04:12 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
guest_rusimport, спасибо за ответ. Есть еще вопрос. А как быть с тем, что форма открывается в другом месте (сдвинута вниз) если её открывать не как acDialog? В чем может быть трабл? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 10:06 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVTguest_rusimport, спасибо за ответ. Есть еще вопрос. А как быть с тем, что форма открывается в другом месте (сдвинута вниз) если её открывать не как acDialog? В чем может быть трабл? я лучше на скрине покажу , что надо учитывать , если форма открывается не как acDialog ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 10:38 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
guest_rusimport, это понятно )) А как это учесть? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 11:07 |
|
Позиционирование у контрола формы
|
|||
---|---|---|---|
#18+
NVTguest_rusimport, это понятно )) А как это учесть? можно учесть , используя WinAPI функции (какие ? - см. ссылку) http://netcode.ru/cpp/?click=r-2481.php.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 12:14 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1612866]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 184ms |
0 / 0 |