|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Создаю VB-шный CoolBar1 ну например с одним Band. Ставлю Align=vbAlignTop BandBorders=True Когда меняю размер формы, ширина CoolBar1 автоматически следует за шириной формы, ширина Band соответственно за шириной CoolBar. Такое поведение мне нужно. А теперь через API. Создаю Rebar со стилем: Ну сейчас напр. так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Чтобы я не делал, ребар не хочет автоматически подгоняться под ширину формы. Куда копать? Я всегда решал этот вопрос через Form_Resize + дополнительный код, устанавливающий ширину Rebar равной ширине формы. Сейчас это крайне неудобно, т.к. форма не моя (окно htmlhelp), пытался его сабклассить на предмет WM_WINDOWPOSCHANGING, но это очень глючный путь и бороться с крашами мне надоело. Должно быть какое-нибудь простое решение со стилями Rebar, не могу найти комбинацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2013, 20:33 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
BandBorders=True мне как таковой не нужен (для наглядности чего происходит на XP). Речь идет о тематической градиентной заливке ребара. Если ширина ребара не меняется при изменении размеров формы, то полоса заливки может получиться не на всю ширину. Можно конечно сделать ребар заведомо очень широким, но это плохой вариант, В зависимости от "темы", градиент может быть не только по вертикали, но и по горизонтали, а границами градиента являются в этом случае левая и правая граница ребар (т.е. градиент всегда вписывается в ширину ребар). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2013, 20:40 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Короче не знаю. Без сабклассинга и WM_SIZE не получается. А сабклассиг: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
В exe сразу и всегда дает сбой в msvbvm60.dll, в среде тоже глючит и сбоит, хотя и не сразу. Почему не знаю. Нет идей? Единственный вариант: тупо установить ширину ребар например равной Код: vbnet 1.
(дальше этой ширины форму не раздвинешь). В принципе с любой темой кроме "Help" (градиент справа налево) проблем не будет, да и бог с ним, итак красиво. Надоело. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 00:24 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Дмитрий77 Почему не знаю.Потому что можно сабклассить лишь окна своего процесса, а html help это hh.exe ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 09:11 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
AntonariyДмитрий77 Почему не знаю.Потому что можно сабклассить лишь окна своего процесса, а html help это hh.exe В данном конкретном случае я не уверен что ты полностью прав. F1 и HTML Help API Function запускается похоже как "свой" процесс, в терминологии не уверен. По крайней мере в "среде" сообщения отлавливаются. Крашит в exe при вызове WinProc. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 11:15 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Лучше скажи, почему я не могу добиться стилями и т.п. поведения Align=vbAlignTop (без сабклассинга). У меня честно возникло предположение что в случае CoolBar делается "внутренний" сабклассинг в контроле. Но у меня напр. не получается другая подзадача. Я попробовал добавить на панель Html Help свою кнопку через TB_ADDBUTTON (хочу вызвать свой диалог выбора стиля), картинка здесь: 14716221 Кнопку добавить получилось. Но я не могу отследить Click по этой кнопке - можно сделать только сабклассингом окна help (о чем сейчас говорим) и получается это только в "среде". А документированная HHN_TRACK (кот. ловится сабклассингом вызвавшей help формы) генерируется только при нажатии родных кнопок. В htmlhelp есть 2 custom кнопки Jump1 и Jump2, они генерируют HHN_TRACK но они 1) Заточены под навигацию на url-адрес, что мне не надо 2) Мне эта кнопка не нужна, если help запускается мышкой, а не из App. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 11:32 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Да, здесь я не прав. hh.exe используется для самостоятельного просмотра chm-файлов. На самом деле проблема с последним параметром NewHelpWindowProc. Он variant и byref. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 11:34 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Antonariy, если написать Код: vbnet 1. 2.
то crash будет не только в exe но и в среде. Еще есть идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 12:07 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
As Long ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 12:10 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Antonariy, Извини, немного попутал. Смотри ByRef lParam As Variant ByVal lParam As Variant ByRef lParam As Long сразу глючат в exe и среде ByVal lParam As Long только в exe (глючат - при отсутствии кода в ф-ции WinProc при первом же вызове) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 12:20 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Пример сделай, попробую погонять. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 13:04 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Antonariy, OK. Сейчас уезжаю, завтра-послезавтра вернусь и сделаю. Тебе самый простой сделать? Потому как у меня скоро будет аккуратный комплексный пример на тему что вот здесь: 14716221 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 13:37 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
P.S. Простой имеется в виду вызов help, его hwnd + голый сабклассинг. Если с ребар (на предмет установки его стилей) то это уже не "простой". ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 13:43 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Какой хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2013, 14:01 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Дмитрий77P.S. Простой имеется в виду вызов help, его hwnd + голый сабклассинг. Пока сделал простой пример (приложен). Для локализации проблемы сабклассинга. Help вызывается двумя способами: 1) Кнопка Help 2) F1 Сабклассинг устанавливается ф-цией ApplyHelpStyle (она в этом примере урезанная) Глючит в следующих случаях 1) В exe -сразу при вызове, при первом же сообщении в NewHelpWindowProc 2) В среде a) если очень усердно ресайзить help форму например, непонятно от чего именно. б) в ситуации когда закрываем Form1, а окно help открыто. Возможно связано с тем как снимать сабклассинг (не знаю как правильно). ApplyHelpStyle его всегда сначала "снимает", потом "ставит" - по крайней мере это работает в случае когда окно help закрыли, а потом вызвали снова (другое окно, другой hwnd). Сейчас буду допиливать свой "большой" пример (с заменой ImageList-ов и вставкой тематического Rebar). Наверно выложу как причешу. Но без решения вопроса о сабклассинге он будет немного "недопиленный", потому как ряд вещей я без сабклассинга help аккуратно сделать не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 11:54 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Падения вызывают четыре сообщения: 49366, не знаю что это (из-за него падает при открытии справки), WM_NOTIFY (при наведении мыши на тулбар), WM_COMMAND (при клике по разделу в дереве или кнопке тулбара), WM_WINDOWPOSCHANGING (при появлении окна справки из-под другого перекрываюшего окна). Если их отфильтровать, то не падает, но перестает работать соответственно переход по клику в дереве (только по двойному клику или ссылке в тексте), кнопки в тулбаре, заголовок окна справки, то есть ни свернуть, ни закрыть, ни переместить. То есть нужно обрабатывать их самостоятельно. А еще есть падение при закрытии справки по alt+f4, которую решить не удалось. Если перехватить WM_SYSCOMMAND и фильтровать все следующие сообщения, то окно перестает закрываться по alt+f4. Кстати, стиль к справке не применился. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 15:33 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
AntonariyКстати, стиль к справке не применился.Наверное из-за того, что урезанная? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 15:35 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Antonariy, Я сделал более менее аккуратный тест-проект (см. вложение) который делает то что я хочу: 1) меняет картинки и стиль TreeView 2) меняет картинки в Toolbar 3) (предполагается Vista и выше) Вставляет штатный Toolbar в мой Rebar и применяет тематические стили, напр. Communications к ребар и тулбар 4) (предполагается Vista и выше) добавляет кнопку "Interface" в штатный Toolbar Нерешенные вопросы следующие: 1) Ширина ребар не авто-следует за шириной Help-формы. 2) Глюки с высотой ребар. Если делаешь ширину Help-формы маленькой, то кнопки Toolbar выстраиваются в "несколько строк". Высота ребар должна также изменяться, иначе нижние кнопки будут закрыты ребаром. Если установить высоту банда в ребар заведомо большой Код: vbnet 1. 2. 3.
то вопрос вроде как решается, но возникают глюки. Глюки видны если 2а) двигать разделитель 2б) открыть Help, нажать "скрыть", закрыть Help Затем открыть Help по новой и нажать "Показать" ("Show"). Слишком высокий ребар может "вылазить наверх", и перекрывать верхнюю часть Treeview и верхнюю часть разделителя. 3) Не могу отследить Click по самопальной кнопке "Interface" в Toolbar. При помощи этой кнопки хочу как вариант выводить окно выбора стиля, а лучше ниспадающее меню с радио-галочками выбора стиля (Communications-Media и т.д.) - кстати как сделать такое меню пока не знаю. Вопросы 1-3 точно решаются через сабклассинг окна Help, но сабклассинг то как должно не работает. Вопрос 2 думаю тоже как-то можно решить через сабклассинг (ну напр. пытаться по WM_SIZE устанавливать высоту ребар равной высоте Toolbar или чуть больше). Хотя пока надеюсь что это можно добиться "стилями" и параметрами. Вопрос 2 кстати самый мерзкий из всех. Лучше это все глядеть на вистах, хотя я пока отключил проверку в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 15:45 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Запрети тулбару выстраивать кнопки в несколько строк, если это возможно. По-моему возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 15:54 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Antonariy Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Падения вызывают четыре сообщения: ... Я так понимаю, ты ведешь речь о крашах "в среде". Потому как со всеми "ограничениями" (а жить с ними нельзя) с твоим кодом в exe все равно сразу вылетает. AntonariyAntonariyКстати, стиль к справке не применился.Наверное из-за того, что урезанная? Ну да. Крайний пример смотрел? AntonariyЗапрети тулбару выстраивать кнопки в несколько строк, если это возможно. По-моему возможно. Да пытался уже (еще в пятницу): Код: vbnet 1.
Плевать он на меня хотел. И есть сомнения, что даже если это получится, окно хэлпа все равно будет смещать Treeview вниз. Другой способ - ограничить минимальную ширину Help формы, но для этого опять нужен сабклассинг. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 16:13 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Дмитрий77Да пытался уже (еще в пятницу): Код: vbnet 1.
Плевать он на меня хотел. А с другой стороны вот такой код: Код: vbnet 1.
выполняется на ура. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 16:21 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Дмитрий77Я так понимаю, ты ведешь речь о крашах "в среде". Потому как со всеми "ограничениями" (а жить с ними нельзя) с твоим кодом в exe все равно сразу вылетает.Нет, именно в exe. У меня вылетает лишь по alt+f4. Может ты первый If не убрал, который обращается к отсутствующим в оригинальном коде объектам? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 16:44 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Хотя вижу, убрал. Больше нет идей. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 16:45 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
А как хотя бы сделать так, чтоб мой ребар был расположен "позади остальных окон" (не перекрывал Treeview и разделитель)? Потому что сделать Toolbar в одну строчку не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2013, 18:07 |
|
Чему в API соответствует vbAlignTop? Надо чтоб ширина ребар следовала за шириной формы.
|
|||
---|---|---|---|
#18+
Дмитрий772) Глюки с высотой ребар. Если делаешь ширину Help-формы маленькой, то кнопки Toolbar выстраиваются в "несколько строк". Высота ребар должна также изменяться, иначе нижние кнопки будут закрыты ребаром. Если установить высоту банда в ребар заведомо большой Код: vbnet 1. 2. 3.
то вопрос вроде как решается, но возникают глюки. Глюки видны если 2а) двигать разделитель 2б) открыть Help, нажать "скрыть", закрыть Help Затем открыть Help по новой и нажать "Показать" ("Show"). Слишком высокий ребар может "вылазить наверх", и перекрывать верхнюю часть Treeview и верхнюю часть разделителя. Ну, этот вопрос почти решил. 2a)После вставки тулбар в ребар надо обязательно сделать: Код: vbnet 1.
Это устаканивает конструкцию, устраняет перекрытие ребаром верхней части Treview и уберегает высоту ребара от явно видимого прыганья. Единственное, если двигать разделитель, верхняя часть разделителя "подкрашивается" в тематику, но думаю можно забить - не так часто его двигают и при отпускании мыши все устаканивается. 2б) при нажатии на кнопку Show ("Показать") глюк устраняется, если пересоздать Сложность в том, что тулбару при этом надо временно переназначить Parent, чтоб не убился вместе с ребаром. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Вопрос 1 решается заведомо широким ребаром. Вопрос 3 - от кастом-кнопки придется отказаться, а настройку спрятать в "общие настройки приложения" - увы, наглядно не выходит. На XP и без темы ребар ясно дело вообще не к месту. Короче забиваю и имплементирую. Итак нормально. Конечный тест, позволяющий менять стили "на ходу" из Form1 прилагаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.08.2013, 01:03 |
|
|
start [/forum/topic.php?fid=60&msg=38370958&tid=2156737]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 284ms |
total: | 453ms |
0 / 0 |