Toolbars

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Toolbars

Сообщение Eugenio » 04.01.2005 (Вт) 12:18

Сколько времени пользуюсь Toolbar'ом в обычном виде, но не знаю, а как сделать его перемещаемым (dockable)?
Это полность вручную делается ? Типа, например, форма, у которой BorderStyle = "Fixed / Sizable Toolwindow", с Toolbar'ом на ней. Я так попробовал сделать, но:
1. не могу избавиться от какого-то левого эффекта: между тулбаром на этой форме (тулбар выровнен по верхнему краю) и строкой заголовка - появляется темная полоса какая-то, что за черт :( ?
2. Как обрабатывать щелчок в неклиентской части - в строке заголовка?
такая панель, по идее, при дабл-клике на строке заг., должна прижиматься к краю MDI-окна. События такого (клика на заголовке) - нет. Значит, только хуком?

А может, есть какой-то другой контрол или я про формы и про стандартный toolbar чего-то не знаю/не понимаю, а?
Последний раз редактировалось Eugenio 07.01.2005 (Пт) 12:03, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 04.01.2005 (Вт) 12:28

Хе. В MFC для этого есть отдельный класс - CDockWindow. На басике... знаешь, проще застрелиться, чем такое сделать, ибо работы там - просто море. Я как-то смотрел, как само VB IDE это делает - нет, не нужен мне такой геморрой...

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 12:40

А что за геморрой там светит? Чего там "сам VB" делает?
В том-то ведь и штука, что сам VB таких toolbar'ов не делает (то есть делать не позволяет), нет? :)
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 13:14

Кажется понял, как все сделать.
подскажите только, как получить высоту строки заголовка окна?
Есть ли у меня вопрос? У меня всегда есть вопрос

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 04.01.2005 (Вт) 13:43

Eugenio писал(а):Кажется понял, как все сделать.
подскажите только, как получить высоту строки заголовка окна?

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

[Что-то не получается закачать пример. :( ]

Положил на свою страничку.
Прямая ссылка: http://www.r-demidow.front.ru/progs/Dock.zip
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.01.2005 (Вт) 13:46

Видать, поюзать systemparametersinfo с параметром SPI_GETNONCLIENTMETRICS :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 14:45

GSerg писал(а):Видать, поюзать systemparametersinfo с параметром SPI_GETNONCLIENTMETRICS :)

Ага...
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 04.01.2005 (Вт) 14:48

Для ленивых, опять же, что-то вроде registry :wink:
http://www.vbstreets.ru/VB/Sources/65777.aspx
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 14:57

Ruslan Demidow писал(а):Посмотри вот этот пример...

не совсем то. Dockable toolbar этот самый должен уметь отображаться и в отдельном окошке. Хоть где - посередине MDI-формы, например (если его там при перетаскивании бросили). Опять же, таскание только правой кнопкой.
У него должна быть кнопка close, как у обычного окошка. Tools Window - ближе к тому, что нужно.
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 14:59

GSerg писал(а):Для ленивых, опять же, что-то вроде registry :wink:
http://www.vbstreets.ru/VB/Sources/65777.aspx

пойду копаться :)
Есть ли у меня вопрос? У меня всегда есть вопрос

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 04.01.2005 (Вт) 15:01

Eugenio писал(а):
Ruslan Demidow писал(а):Посмотри вот этот пример...

не совсем то. Dockable toolbar этот самый должен уметь отображаться и в отдельном окошке. Хоть где - посередине MDI-формы, например (если его там при перетаскивании бросили). Опять же, таскание только правой кнопкой.
У него должна быть кнопка close, как у обычного окошка. Tools Window - ближе к тому, что нужно.

Так он и остаётся там где его бросили. Другое дело что в моём методе нет заголовка окна с управляющими кнопками. Но это ведь не проблема: или нарисовать свой, или использовать как ты сказал форму, на ней тулбар. И форму подгонять по размеру тулбара. Просто ещё одна процедура. Отображать форму можно по .Show, vbModeless, Me . Тогда форма с тулбаром будет всегда поверх MDI формы.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 15:27

2 Ruslan Demidov
С этим Tools Window, просто, проблемы есть (я выше про них писал), потому я и начал опять вопрошать народ - может есть попроще способы.
наверное, вот так вот лучше:
Tools Window, на нем тулбар.
Когда кликаешь по заголовку окна (Tools Window), оно пропадает нафиг, а вместо него появляется тулбар в MDI-окне, выровненный по тому краю, ближе к которому онкно оказалось. Вот. У обоих тулбаров функции одинаковые. Когда дабл-кликаешь по тулбару в MDI-окне, он, опять же, пропадает нафиг, вместо него появляется Tools window, и так далее, и так далее.
Придется, чтобы все получилось, еще
а) "хукнуть" Tools Window, чтобы отслеживать щелчек на заголовке и
б) выяснить высоту заголовка окна Tools Window, чтобы подогнать размеры окна под тулбар, а не наоборот (Height= ButtonHeight+<высота заголовка>, Width= ButtonWidth * Buttons.count+2)

Вот тогда наверное счастье и наступит.
Есть ли у меня вопрос? У меня всегда есть вопрос

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 04.01.2005 (Вт) 15:55

Когда счастье наступит, выложишь примерное решение? А то мне тоже такое нужно 8)
Моду создают модоки, а распространяют модозвоны.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 04.01.2005 (Вт) 16:10

To Eugenio
по поводу б)
Код: Выделить всё
Public Const SM_CYCAPTION = 4 'Height of windows caption

Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

Function GetFormCaptionHeight() As Long
     GetFormCaptionHeight=GetSystemMetrics (SM_CYCAPTION)
End Function
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 16:12

O! Thanks.
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 04.01.2005 (Вт) 16:14

hCORe писал(а):Когда счастье наступит, выложишь примерное решение? А то мне тоже такое нужно 8)

Конечно. Если не буду слишком долго возиться (dockable toolbar - это у меня на будущее)
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 05.01.2005 (Ср) 17:40

Ну что, я решил сегодня за это дело сесть - и предварительный вариант сделал. Для демонстрации идеи достаточно. Но там больше вопросов, чем решений :) . Надо, например, еще разместить окно, в котором отражается тулбар, поверх всех (немодальных) окон приложения. Надо сделать так, чтобы окно, например текстового редактора, легко и просто управляло доступностью кнопок на тулбаре, к-рый в отдельном окне (в примере оно управляет меню MDI-формы). А идея такая:
1. при двойном клике на тулбаре главного окна, создается и загружается специальное окно с тулбаром, который полностью копирует кликнутый тулбар в MDI. Любой. Теперь тулбар можно таскать (то есть, таскать окно, где находится его копия).
2. при перетаскивании этого окна, если оно выходит за край MDI-формы, оно выгружается, а вместо него появляется прежний тулбар, который прикрепляется к тому краю, куда подтащили
3. При двойном щелчке на заголовке этого окна, окно также выгружается, также появляется "родительский" тулбар и крепится к тому краю, до к-рого расстояние меньше

Хотите сами посмотреть проект, скажите мне, как его сюда засунуть
(через "Добавить приложение" - не выходит, а своей странички у меня нет)


Вот, значит, вопросы
1. расположить НЕМОДАЛЬНОЕ окно поверх всех окон
2. нужно бы связать окошко-тулбар с "родительским" ("исходным") тулбаром так, чтобы в "рабочем" окне (в моем примере - типа текстового редактора) легко было управлять окошком-тулбаром, когда исходный тулбар не показывается[/u]
Последний раз редактировалось Eugenio 05.01.2005 (Ср) 17:44, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.01.2005 (Ср) 17:43

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 05.01.2005 (Ср) 17:52

Ну, с первым вопросом- всё! Руслан мне и раньше это предлагал, кстати, :) но я не понял описания в MSDN. нет, чтоб попробовать. :?

Не, насчет "с первым вопросом всё" беру слова обратно - это такие тормоза, а отладка вообще практически невозможна. фиговым оказался эффект
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 05.01.2005 (Ср) 19:14

Ну, вроде более-менее. Счастье почти наступило.
Прелесть в том, что окно для отображение тулбаров -универсальное, нужно только добавлять в MDI-окно свои тулбары и обработчики двойного клика по ним.
Вобщем, кому интересен этот изврат - пусть скажут, как его выложить.
Есть ли у меня вопрос? У меня всегда есть вопрос

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 13:19

И че, никому не интересно, что вышло из попытки сделать в проге настоящий dockable toolbar на VB? :)
Есть ли у меня вопрос? У меня всегда есть вопрос

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 13:21

Мне интересно :) Выложи на народе где-нибудь :)

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 13:25

Есть ли у меня вопрос? У меня всегда есть вопрос

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 13:31

Прикольно, только обратно его "отодрать" можно? :roll:

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 13:33

A.A.Z. писал(а):Прикольно, только обратно его "отодрать" можно? :roll:

В смысле, после того, как "приклеился"? Дабл-кликни по тулбару
Там все тулбары и открепляются и прикрепляются
Последний раз редактировалось Eugenio 07.01.2005 (Пт) 13:40, всего редактировалось 1 раз.
Есть ли у меня вопрос? У меня всегда есть вопрос

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 07.01.2005 (Пт) 13:34

А! :) Понял :)

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 07.01.2005 (Пт) 15:48

А код где? :lol:
Моду создают модоки, а распространяют модозвоны.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 16:53

hCORe писал(а):А код где? :lol:

А ты на эффект посмотрел?
Если посмотрел и тебе оно надо - закатаю и выложу. Только надо по нормальному каналу выйти в инет
Есть ли у меня вопрос? У меня всегда есть вопрос

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 07.01.2005 (Пт) 17:01

Подробно не смотрел, но хочется увидеть код :lol:
Моду создают модоки, а распространяют модозвоны.

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 07.01.2005 (Пт) 17:33

Есть ли у меня вопрос? У меня всегда есть вопрос


Вернуться в Visual Basic 1–6

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

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

    TopList