Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 13:17

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 26 ноя 2012, 19:57 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
я понимаю что эту проблему не решить, но все же опишу.
все знают плавающие окошки визио (AnchorWindow), которые могут располагаться в произвольном месте рабочего окна, могут быть пристыкованы к бокам и состыкованы друг с другом.
также их можно создавать для своих целей и размещать в них свои элементы управления. я этим активно пользуюсь.
выглядит прилично и удобно.
но вот закрыть их пользователь может беспрепятственно щелчком по крестику, чего мне очень не нужно.
создается такое окно как обычное и у него есть событие QueryCancelWindowClose - как раз оно и отвечает за отмену закрытия окна.
но в данном случае это событие не возникает при закрытии окна. отслеживал все события при закрытии. этого нет :(
рыл интернеты - нету решения.
короче, что хочу сказать: если на этот форум вдруг зайдет гуру хака Win API :) то может он и подскажет, как подлезть глубже к этим окошкам (может очередь сообщений перехватить или еще какой хук) и запретить-таки их закрытие :roll:


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 26 ноя 2012, 22:23 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
поделись, какие ты элементы управления в эти окохи запихиваешь ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 26 ноя 2012, 22:50 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
списки, кнопки, дерево-список и тп
любой можно. выглядит красивше чем тупая Userform


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 26 ноя 2012, 23:00 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
отлично! я и не знал...
а как это сделать, желательно по подробнее и с картинками :)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 26 ноя 2012, 23:05 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
в новой теме могу написать кратко. хотя это есть в SDK


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 08:57 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Напиши будь другом :)

посмотрел дома в SDK Visio 2003, что-то сразу не нашел… Или там этого нет ?
Дай хоть направление, где в SDK искать !

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 09:30 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
в SDK - это надо смотреть в просмотрщике примеров Librarian Viewer или типа того (точно названия не помню, на работе нет, дома установлен). там раздел Anchor

в старом нашем форуме темки:
http://visio.artberg.ru/forum/topic.asp?TOPIC_ID=1794&SearchTerms=anchor
http://visio.artberg.ru/forum/topic.asp?TOPIC_ID=2288&SearchTerms=anchor


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 10:00 
Не в сети
Постоянный участник

Зарегистрирован: 11 май 2012, 15:05
Сообщений: 92
Очков репутации: 25

Добавить очки репутацииУменьшить очки репутации
тот же пример что выше, но с коментариями (англ.)


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 10:14 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Спасибо вам уральские мужики :)
за науку !!!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 10:41 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Лично я люблю объединять все окошки как на картинке слева.
вот теперь, к ним добавил и это окно. Т.к. окна автоматически скрываются, у юзера возникает меньше желаний прибить окно :)

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 12:02 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
а программно можешь объединить свое окошко с существующими? или ты ручками каждый раз делаешь?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 12:22 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
подгружать программно штатные окошки, я умею.
Код:
Application.ActiveWindow.Windows.ItemFromID(visWinIDCustProp).WindowState = visWSVisible + visWSAnchorAutoHide + visWSAnchorLeft
Application.ActiveWindow.Windows.ItemFromID(visWinIDSizePos).Visible = True
Application.ActiveWindow.Windows.ItemFromID(visWinIDDrawingExplorer).Visible = True


У нового окна еще не успел код подобрать :(

PS: в предпоследней строке нижеследующего кода, делаю окошко Base видимым, прилепленным слева и автоматически сворачивающимся
Код:
Public Sub ShowBase()

Dim wAddon As Visio.Window
Set wAddon = ActiveWindow.Windows.Add("Base", visWSVisible , visAnchorBarAddon, , , 300, 210)

Set m_Base = New BASE
m_Base.Caption = "Base"

Dim FormHandle As Long
FormHandle = FindWindow(vbNullString, "Base")

SetWindowLong FormHandle, GWL_STYLE, WS_CHILD Or WS_VISIBLE Or ws_NOCOPYBITS

SetParent FormHandle, wAddon.WindowHandle32

Dim pnLeft As Long, pnTop As Long, pnWidth As Long, pnHeight As Long
wAddon.GetWindowRect pnLeft, pnTop, pnWidth, pnHeight
wAddon.SetWindowRect pnLeft, pnTop, pnWidth + 1, pnHeight
For Each sh In ActivePage.Shapes
m_Base.ListBox1.AddItem sh.Name
Next
wAddon.WindowState = visWSVisible + visWSAnchorAutoHide + visWSAnchorLeft
End Sub

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 27 ноя 2012, 12:53 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
по вопросу сделать сразу окошки в режиме Docked.
перерыл инет. лазил по пиндосским форумам - 0. вопросы задают аж с 2003 года, но никто не ответил.
в итоге весь вечер убил, но сам сделал. отписал на visguy.com, там даже ответили:
http://visguy.com/vgforum/index.php?topic=174.0

P.S. а ответил мне там походу тоже русский. оле-оле)))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 12:26 
Не в сети
Постоянный участник

Зарегистрирован: 11 май 2012, 15:05
Сообщений: 92
Очков репутации: 25

Добавить очки репутацииУменьшить очки репутации
Поломал голову с перехватом кнопки закрытия. Оказалось что есть еще одно родительское окно в которое идут сообщения, ни WM_CLOSE, ни WM_Destroy не хотят перехватываться, в итоге спас WM_SYSCOMMAND.
Выкладываю пример, использовать на свой страх и риск, с WinApi шутки плохи :)


Вложения:
2.vsd [51 Кб]
Скачиваний: 219
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 13:11 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
ЧУВАК! много плюсов тебе в репу! выручил!

сам второй день бьюсь!
ясен пень - WIN API.
ставил хуки, но там перехватываемый процесс обслуживает много лишних окон.
не сканало.
юзал Spy++, все события пересмотерл, допер что надо искать родительское окно.
реализовал через GetParent.
кстати почему ты исполльзовал GetAncestor ?

решил что мне нужен сабклассинг - то что у тебя оказалось реализовано. но забивали процесс события WM_NCHITTEST!!! валом валили и вешали мне визио намертво.
как ты выловил это событие? как догадался сделать такую конструкцию:
Case WM_NCHITTEST
UnHook
DoEvents
Hook
lReturn = CallWindowProc(oldpid, hw, uMsg, wParam, lParam)

респект!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 13:13 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
Surrogate
вот у кого репутация должна быть высокая - у ss87

могучий программер!

PS Лишь немногие способны это понять ! Поэтому мало кто плюсует репутацию…


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 13:30 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
9rey
Полностью разделяю твое мнение ! Респект ss87 !!!

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 13:33 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
вопрос к ss87
на МСДНе прочел про GetAncestor и флаг, который ты используешь (1)

Цитата:
Retrieves the parent window. This does not include the owner, as it does with the GetParent function.


чем в данном случае отличаются parent (родитель) и owner (владелец)?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 13:57 
Не в сети
Постоянный участник

Зарегистрирован: 11 май 2012, 15:05
Сообщений: 92
Очков репутации: 25

Добавить очки репутацииУменьшить очки репутации
это событие WM_NCHITTEST много клеток убило пока разбирался, вызывается при клике в заголовок окна, и оно залипало, т.е. одно и тоже сообщение отправлялось. вот и пришлось перехватывать его и городить забор.
GetAncestor и GetParent дают одинаковый результат, но GetParent иногда может вернуть свое же значение(owner).


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Плавающие окна и событие QueryCancelWindowClose
СообщениеДобавлено: 29 ноя 2012, 14:23 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
ясно. еще раз спасибо за помощь!

планировал сделать еще один твик визио на манер этого, с перехватом сообщений, раз уж пошла такая пьянка...

идея такая: перехватывать нажатие средней кнопки мыши и подменять ее на комбинацию кнопок
CTRL+SHIFT+ПРАВАЯ КНОПКА МЫШИ - так сейчас в визио реализовано


если удастся - я буду almost happy!

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

ss87, дружище, не откажи в помощи ;)
как думаешь, лучше это сделать через хуки (SetWindowsHookEx) или через сабклассинг (подмена WndProc)?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB