|
|
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Лох Позорный2 Victosha Ты знаешь, вот когда я форму закрываю с помощью DoCmd.Close (снаружи, а не из самой же формы), то я ожидаю, что после отработки этой команды - форма будет закрыта. События там всякие отработают, из коллекции Forms она пропадет. Вот такое вот у меня скромное желание. А аксесу с его DoCmd на мои желания плевать. Сколько раз сталкивался, что DoCmd.Close отрабатывает, причем без ошибок, а форма еще не закрыта, обработчик события закрытия не отработал, из коллекции не пропало. Свинство. Когда оно отработает целиком и полностью - одному DoCmd известно. Вот и кажись подобное свинство. DoCmd.RunCommand acCmdEditHyperlink непонятно когда запись/форму освобождает, а без этого хрен закроешь. Так что не люблю я DoCmd именно в тех местах, где он мои СИНХРОННЫЕ ожидания не оправдывает. Твое "снаружи" - скорее всего - из "другой" формы и при этом в ответ на событие этой "другой" формы или афтерапдейт ее контрола. В обычном модуле - маловероятно и в ответ на онКлик на кнопке - маловероятно. Про синхронность и асинхронность КОМ-объектов. ВО-ВО!!!! ЭТО И ЕСТЬ ОНО - ДЕРЕВО! Когда ты подвязал СВОЮ функцию (Control_UfterUpdate) к исходящему интерфейсу ком - объекта в качестве получателя Ком-события, то управление из точки подвязки (процедуры, по списку вызывающуей адреса всех "слушающих" функций) не может быть возвращено, пока не отработают ВСЕ слушатели по списку. Теперь, в своей подвязанной функции ты пытаешься дерныть за метод того же ком-объекта, который должен вызвать собственное событие. Возникает цепочка событий. Некоторые из таких цепочек "режимно совместимы" , некоторые нет. И наступление вызываемого из твоей подвязанной функции события допустимо, когда другие события отработали. Что очевидно не выполняется при дергании за некотроые методы внутри процедуры обработки события. Применительно к ДАННОМУ случаю, похоже на то, что afterUpdate текстбокса - не его собственный, а происходящий в составе события, исходно-порожленного диалогом редактирования гиперлинка. Чо приводит вызову цепочки событий на форме фактически ВНУТРИ события по завершению работы диалога. Режимно это несовместимо с немедленным закрытием формы. И не оправдываются именно АСИНХРОННЫЕ ожидания. Если бы в этом месте DoCmd работал асинхнронно, он Сам бы "поставил в очередь" событие закрытия. Вот только видно, нет ее (очереди) и работает он СИНХРОННО, то есть в момент, когда управление достигает соответствующей строки кода. 2 Лифчик Без таймера пока не обошелся. Возможно, есть вариант не заканчивать им, а начинать - надо бы проверить. Сейчас не смогу - может быть вечером. По некторому размышлению - вариант с таймером мне нравится. Патамушта форма такая - это своего рода "акцессный актив-икс", и там он никому не мешает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:00:43 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
2 Виктоша: и Dlookup у меня обломился. Так что видно придется форму отдельную вызывать и таймером ее закрывать. Занесем эту специфику в свое серое хранилище глюков Зы вот только бы научиться еще управлять этим гиперлинковым диалогом. А то он всегда начальный путь к базе выдает. Может ChDir сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:13:13 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Лифчик2 Виктоша: и Dlookup у меня обломился. Так что видно придется форму отдельную вызывать и таймером ее закрывать. Занесем эту специфику в свое серое хранилище глюков Зы вот только бы научиться еще управлять этим гиперлинковым диалогом. А то он всегда начальный путь к базе выдает. Может ChDir сделать? Можно попробовать заменить таймер на KeySend - это тоже "чисто асинхронный вариант" - щаз может и попробую. ChDir обязан помочь... Отдельная форма в твоей подкрутке - это как раз и есть, то, что меня так восхитило - всё-таки нашел винт... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 16:22:37 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
1) KeySend - работает 2) Пришла такая мысль- Своей формой (назовем ее Ф) ты все равно будеш пользоваться как вызывателем диалога внутри другой формы. Поэтому тебе как раз не нужно (не обязательно) закрывать Ф, пока "родительская" жива, а достаточно просто скрыть ее. Если Ф будет объявлена в модуле вызывающей ее формы как Private (withevents) xForm as New Form_Ф то при закрытии формы-хозяина Ф закроется сама. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:13:38 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
2 Виктоша: я понял мысль. К таким конструкциям как описание формы на основе имеющейся для внутреннего потребления я только подхожу и пока это не прочувствовано. Но в данном случае ситуация такая - все ДблКлики по бывшим гиперлинковым полям у меня вынесены в функцию в глобальном модуле проэкта. Такое вот упрощение. Потому как могу в разных местах из разных подформ вызывать. И везде понатыканы Application.Screen.ActiveControl. Так что пусть пока формочка открывается и закрывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:35:06 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Лифчик2 Виктоша: я понял мысль. К таким конструкциям как описание формы на основе имеющейся для внутреннего потребления я только подхожу и пока это не прочувствовано. Но в данном случае ситуация такая - все ДблКлики по бывшим гиперлинковым полям у меня вынесены в функцию в глобальном модуле проэкта. Такое вот упрощение. Потому как могу в разных местах из разных подформ вызывать. И везде понатыканы Application.Screen.ActiveControl. Так что пусть пока формочка открывается и закрывается. для реализации "мысли" есть два варианта 1) (Плохой) в этом же модуле держать форму как переменную Плохость в том, что, вообще говоря, надо заботится об итоговой очистке при завершении приложения - усложнение логики. Хотя реальные потери памяти небольшие и без "заботы" должно выдержать "много запусков". Предполагается, что компьютер рано или поздно выключат... 2) ввести в своей функции входной параметр - типа твоей формы. Появится возможность рабоать с конкретным экземпляром, время жизни которого определяется формой-хозяином. потенциальный минус - возможно, придется пересмотреть подход к источнику формы, индивидуализировав источник (то есть связанная табла не об одной записи окажется) в любом случае на скорости отображения "диалога" выиграешь так заметно, что отказываться не захочется, а захочется "причесывать"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 17:55:38 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Занес в список "Надо сделать в проге". Растет быстрее, чем "Уже сделано" :) ЗЫ ChDir не помогает:( Этот гипердиалог, зараза, какими-то другими путями управляется. Как бы докопаться? Хотя это конечно уже совсем не по сабжу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:15:43 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
авторв этом же модуле держать форму как переменную Думается, что вся процедурина крутится внутри одной глобально функции, присвоенной свойствам типа он-клик (т.е. кликушникам -или даблкликлушникам). И если унутре ее что и вызывается, то вызовы отрабатывают "в одном потоке" (в вызовах этих процедур можно форму передавать как параметр). Т ч. форму надо держать не в форме,как переменную, а в функции, как переменную, по выходу из функции она (переменная) благополучно сдохнет (когда отработают последние события в ей). И явного закрытия не потребуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:36:10 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
ЛифчикЗанес в список "Надо сделать в проге". Растет быстрее, чем "Уже сделано" :) ЗЫ ChDir не помогает:( Этот гипердиалог, зараза, какими-то другими путями управляется. Как бы докопаться? Хотя это конечно уже совсем не по сабжу With WizHook .Key = 51488399 Call .AccessWizFilePath("d:\Victosha") End With 2 assa твое предложение не экономит время загрузки формы в момент вызова функции... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 18:49:54 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
2 Виктоша: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 2 Assa: Сделал, спасибо! Таймер убрал - само все закрывается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:10:19 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
2 Лифчик Действительно - проврался... (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:19:21 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Victosha2 Лифчик Действительно - проврался... (с выражением лица)Хрен с ним, в том поле, где мне нужен гиперлинковый диалог, запоминать не обязательно ибо тулз используется достаточно редко. А на остальных полях FileDialog стоит. Со временем может замена какая этому гипердиалогу подыщется. Я и так беск.благодарен и при случае волью в вас во всех пива немеряно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:25:19 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Лифчик Victosha2 Лифчик Действительно - проврался... (с выражением лица)Хрен с ним, в том поле, где мне нужен гиперлинковый диалог, запоминать не обязательно ибо тулз используется достаточно редко. А на остальных полях FileDialog стоит. Со временем может замена какая этому гипердиалогу подыщется. Я и так беск.благодарен и при случае волью в вас во всех пива немеряно :) Ну, блин, ты даешь. Ты же сам все это придумал!!!!!!!!!!!... Мне понравилось очень.... Все просто, а у меня все загогулины давно выпрямились. И я бы просто не смог такую мыслю споймать. А пиво - уже скоро... Велосипедный сезон я вчера начал заново. Скоро и пиво... По планам - 31 декабря :) Пока устравиваю периодические глотковые разминки, чтобы вкус не забыть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2004, 19:49:51 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
2 Лифчик И все-таки 1) призадумавшись, не сумел себе представить, каким таким волшебным образом «настоящие» гиперрсылки у тебя заменились черт знает на что – кажется, это уже в тему «Проектирование БД»… Ну, уж ладно… 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. Надо ли комментировать? … PS 1 2 ЛП Любопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания :)) ЗЫ 2 прикладываю "обзазец" (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 00:26:46 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
VictoshaЛюбопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания :)) А DoCmd.RunCommand acCmdEditHyperlink - синхронные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 00:54:09 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Лох Позорный VictoshaЛюбопытно, что наговоренная мною ахинея (чичас я другими словами на тему от 16:00 думаю) не меняет главного – DoCMD.Close обманывает в исходном варианте Лифчика именно асинхронные ожидания :)) А DoCmd.RunCommand acCmdEditHyperlink - синхронные :)) в моей голове эта история как-то связалась вот с этой темой http://www.sql.ru/forum/actualthread.aspx?tid=115316&hl=close и вот с этой http://www.sql.ru/forum/actualthread.aspx?tid=117681&hl=winsock В общем, с такой формулировкой ( авторА DoCmd.RunCommand acCmdEditHyperlink - синхронные) я соглашусь... А именно - DoCmd.RunCommand acCmdEditHyperlink производит на свет свой поток "событий" - назовем его вложенным, в том числе завязанных на системную очередь оконных сообщений. Некоторые (закрытие окна) из "вложенных" событий не могут быть завершены раньше, чем завершатся события "вызывающего объекта". Это сильно характерная для модальных, живущих в dll "связанных подформ" проблема. DoCmd.RunCommand acCmdEditHyperlink вызывает модальную форму, сидячую в какой-то Dll. Управление возвращается в конце концов в строку следующую за строкой вызова модального диалога. Вызывая по дороге "побочные" события типа афтерапдейт контрола. (В варианте Лифчика совсем занятная штука - после отработки афтерапдейт управление обязано вернуться в готфокус) В момент возврата закрытие формы диалога уже назначено, но, судя по всему - не завершено. Запрет на Docmd.Close для текущей формы в этом состоянии виден невооруженным глазом. Точную природу запрета я не возьмусь определять. Роль же таймера и/или SendKeys как раз заключается в предоставлении возможности свободного завершения текущих потоков событий и асинхронной инициализации событий, вызывающих переходы в новые состояния (формы) из текущего достигнутого. В любом случае пример хорош тем, что показывает 1) как НЕ НАДО рулить событиями 2) логика "асинхронного автоматного" программирования прилично отличается от логики "последовательных алгоритмов". А специфика "асинхронности" Com-объектов придает случаю особую прелесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 01:50:12 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Читал. Много думал. Ввел на вызываемой форме-имитаторе гиперлинкдиалога еще одно поле, в которое передаю фокус после апдейта первого (чтобы диалог не циклился). Полностью осознал ущербность пути, по которому рулил событиями. Но почему папаша Билл не дает мне открыть гиперлинкдиалог в модальном виде? Я был бы ему бесконечно благодарен. Прикладываю картинку и коды, а то я в посторонних с трудом разбираюсь (свое иногда не могу разобрать). Суть поведения обновленных псевдогиперлинковых полей (на картинке At1, 2 итд+AnswerRef, которого не видно) такова: по Дблклику вызывается функция, которая смотрит, что за контрол. 1.Если контрол - комбобокс и в нем есть текст, то отправляемся по ссылке Application.FollowHyperlink Path 2.Если это комбобокс и нет ссылки, то смотрим, как зовут контрол 2а - зовут НЕ "IDAnswer" - запускаем обычный FileDialog 2б - если так, то запускаем форму-имитатор PID (не буду расшифровывать, почему такое название) Поведение в поле IDAnswer отличается именно тем, что аттачменты всегда файлы, а в поле IDAnswer могут заноситься ссылки на директории с перепиской. 3. Если контрол - текстбокс, то выполняется файл-диалог с решетками, т.к. все такие текстбоксы у меня - гиперлинки (осталось немного в других таблицах) В всех случаях если выбраный файл/папка - новый, то функция DestFileID вставляет строку в таблицу-справочник. Щас ошибок найдем и раскритикуем. Велькам Код: 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. 77. 78. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 11:43:55 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
1) Лучше сделать отдельную функцию, по работе с твоей формой-диалогом. Вот вариант, встроенный в твой код – Убери код из своей формы СОВСЕМ. Оставь пустой модуль формы HasModule у формы д.б. = Истина Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 13:13:26 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Victosha‘следующие 3 строки мне осознать тяжело, особенно последнюю. ‘Осторожнее с нею – это, не то, чтобы АХТУНГ, а просто АФТЕРАПДЕЙТ. Подформа Child6 - это и есть подчиненная табличная форма, изображенная на слипе (3 записи) Forms!MailLists.Child6.Form.IDAnswer = DestFileID(str) Текст из гипердиалога передаю в функцию, которая возвращает ID файла, при необходимости добавляет новый путь в таблицу-справочник Forms!MailLists.Child6.Form.IDAnswer.Requery Рекверит комбобокс ‘без специальной надобности – лучше Value Forms!MailLists.Child6.Form.IDAnswer.Text = str Заносит в текстовый столбец комбо путь, который выбран в диалоге (соответствующий ID файла гарантированно есть в присоединенном столбце ‘Me.Refresh – это я не знаю, зачем , было Этим событие афтерапдейт вызывал ‘Me.Vspom.SetFocus – это тоже Это - ответ на Victosha(В варианте Лифчика совсем занятная штука - после отработки афтерапдейт управление обязано вернуться в готфокус) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 13:35:48 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
:)) в общем, дело к пиву продвигается... (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 13:45:45 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Victosha:)) в общем, дело к пиву продвигается... (с выражением лица)Определенно...Вот тока с письмами Биллу разберусь, которые меня в другом месте зафакали :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2004, 13:56:09 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
Не подскажете ли. а есть ли WizHook в 97 Аксесе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 10:20:48 |
|
||
|
Закрытие формы на Activate
|
|||
|---|---|---|---|
|
#18+
natalitvinenkoНе подскажете ли. а есть ли WizHook в 97 Аксесе? нет. там используют экспорт функций. кое-что есть здесь http://www.trigeminal.com/codes.asp?1033 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 10:50:20 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32692854&tid=1671480]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 318ms |

| 0 / 0 |
