|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Т.е. задача: 1) Есть form 2) Слева Treeview 3) Справа Listview 4) Между ними перемычка Надо, чтоб если тянешь за перемычку вправо-влево то Treeview-width увеличивается, Listview-width соотв. уменьшается (толщина перемычки соотв. постоянна, т.е двигаем типа границу между ними). В общем, не суть это могут быть 2 текстбокса. При этом надо понимать что ширина Treeview не может быть меньше какого-то MIN разумного значения. То же про Listview. В принципе, есть у меня готовый vb-based код. 1) mouse_down проверяет не на перемычке ли Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Код: plaintext 1. 2. 3.
Не суть. Суть в том что приведенные методы имеют недостатки: 1) относит. тяжело попасть по перемычке 2) возникают эффекты "мультипликации" при применении минимальных ширин. По сути возврат назад по факту проскока предельного значения. Т.е. нужен мне какой то достойный пример. Подозреваю что это будет Subclassing. Поискать попробовал, но по словам Listview/Treeview сложновато искать. Для формы кстати аналогичный вопрос себе поставил, но там вроде все решаемо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
А с взаимным положением что-то нет идей. Я еще обратил внимание, что многие проги при mouse_down рисуют эдакую штрих/планку, кот. двигать и непрерывной перерисовки не производится. Нужно что-то сделать, чтоб было "культурно"... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2010, 03:24 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Измини, за сабклассинг тебе ничего не скажу, но не очень понял с классическими недостатками. Дмитрий77 1) относит. тяжело попасть по перемычке А почему? Чем это сложнее, чем попасть в любой другой объект? Кроме того, надо просто разместить там какой-нить подходящий объект без границ и сделать ему MouseIcon в виде стрелочек, здорово облегчит юзеру жизнь. Да и перехватывать MouseDown можно не у формы будет , а у этого объекта и не париться с координатами. Дмитрий772) возникают эффекты "мультипликации" при применении минимальных ширин. По сути возврат назад по факту проскока предельного значения. Тоже не очень понял. По идее просто запрещаешь двигать перемычку дальше определенных значений и она встает как вкопанная, я как-то делал что-то подобное, но никаких артефактов не наблюдал... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2010, 09:30 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2010, 12:43 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Antonariy, спасибо, выглядит достойно, думаю то что хотел, надо изучить. Вот кстати моя сборная солянка чем пользуюсь(сделал тест на скорую руку из чужого примера с Form_resize через API): Скачать Солянка глючит напр. при резком сдвиге перемычки влево-вправо за пределы формы, в большом приложении я как-то с этим борюсь(надо копать собственные коды чтоб это понять), но все равно это извращенство и не дело. И попасть по вашей перемычке сильно проще чем по моей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.05.2010, 14:12 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Antonariy, код ваш очень неплохой, сейчас тестирую его. Но есть глюк на Висте (именно на Висте при применениии Виста-темы). Картинка разделителя когда двигаем ее сильно мигает (мерцает, дрожит), нельзя это чем-нибудь отрегулировать? Я попытался, но пока не понял в чем дело. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2010, 03:26 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Покопавшись в интернете, я понял что проблема в том, что Виста не так отрисовывает через GDI. Именно поэтому для ListView и Treeview категорическое требование: применять DoubleBuffer. Применительно к данному примеру имеем отрисовку Splitter с задержкой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Виновата конкретно функция Код: plaintext
Решения два: 1) (не хотелось бы, не солидно)Назначить на Висте непрерывную перерисовку, т.е. линия вообще не применяется Код: plaintext
2) Рисовать линию другими методами, т.е. не использовать PatBlt Вопрос: Как по-другому рисовать Splitter? Желательно PATINVERT(шахматно-штрихованная линия) а не DSTINVERT (черная линия). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2010, 16:41 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий771) (не хотелось бы, не солидно)Назначить на Висте непрерывную перерисовку, т.е. линия вообще не применяется Код: plaintext
Это в данном случае не вариант. Проще забить на мерцалку, чем бороться с веером перерисовок (веер поверх Treeview на Висте самоустранится лишь через 1-2 сек, и это при влюченном dowblebuffer для treeview) , да и других негативов при непрер. перерисовке много. Линию бы по-другому нарисовать. Понятно, что драйвер видеокарты, но не хотелось бы таких hardware-зависимостей... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.05.2010, 07:27 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, 1) Чисто из любопытства - примерчики из приложенного архива под Вистой те же проблемы испытывают? 2) IMHO, разделитель должен себя вести в соответствии с общесистемными установками. Если уж пользователь поставил галку "Show window contents while dragging", пусть сам и смотрит на слайд-шоу. 3) По-другому рисовать? Просто идея - а если взять в качестве разделителя полупрозрачное окно, скажем? Или накладывать сверху на главное окно полупрозрачное окно, на котором будет отображаться примерный новый внешний вид главного окна? 4) Вроде в семёрке ускорение двумерной графики снова поддерживается (с какими-то оговорками). Может, не стоит тратить силы на Висту? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2010, 19:20 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, в том примере что вы дали , получается в коде ничего менять не надо , просто надо расположить свои объекты на picSplitMain и все ,а он сам поймет что с ними делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2010, 20:29 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
БенедиктДмитрий77, 1) Чисто из любопытства - примерчики из приложенного архива под Вистой те же проблемы испытывают? ... 4) Вроде в семёрке ускорение двумерной графики снова поддерживается (с какими-то оговорками). Может, не стоит тратить силы на Висту? Гы-... А Ваши примеры на Висте хорошо работают,однако. Палка не глючит, не мерцает. aduka05admДмитрий77, в том примере что вы дали , получается в коде ничего менять не надо , просто надо расположить свои объекты на picSplitMain и все ,а он сам поймет что с ними делать? Который Antonariy дал, Вы хотели сказать. Это вопрос? Если вопрос то да, так и есть, он сам все понимает. Бенедикт, честно хотелось бы модифицировать этот пример (Antonariy), чтоб палка рисовалась как у Вас. Зря чтоль силы потратил на осознавание-внедрение.... Что сделать то надо? А то у Вас в архиве только exe-шники. А по поводу Win7, это пускай дочка моя пока осваивает, Папочка пока до таких к-крутых систем еще не дорос. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2010, 22:08 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2010, 22:34 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, При беглом сравнении, отличие в отрисовке между кодом, приведённым Antonariy-ем ( EasySplitter ) и примером ViewEx в том, что MFC-шная реализация (класс CSplitterWnd, см. WINSPLIT.CPP, если есть исходники MFC) 1) рисует на DC окна, а не экрана, 2) на время таскания перемычки снимает стиль окна WS_CLIPCHILDREN, чтобы рисовать поверх всех дочерних окон. Хм, вроде бы немного (а может, я чего упустил), а сказывается. Что делать? Мне - дойти до работы и выслать VB-шные исходники от второго примера, Вам - разобраться в них, и слить с cSplitter, чтобы получился нормальный класс в итоге. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2010, 23:59 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
БенедиктДмитрий77, 2) на время таскания перемычки снимает стиль окна WS_CLIPCHILDREN, чтобы рисовать поверх всех дочерних окон.... Что делать? Мне - дойти до работы и выслать VB-шные исходники от второго примера, Вам - разобраться в них, и слить с cSplitter, чтобы получился нормальный класс в итоге. Спасибо, буду ждать пока дойдете до работы... P.S. Мо быть мне кто объяснит все же: здесь все очень лихо прикладывают zip-ы, rar-ы а я туплю и не знаю как это сделать и вынужден класть файлы на, скажем так, не совсем свой ftp, да еще и в корень сайта их кладу ибо лениво folder создать а потом еще путь каждый раз выписывать. Насчет "снимает стиль окна" чуть заранее испугали. У меня там Treeview/ListView разделяются, и на Висте они в "крутом" стиле "explorer", не хотелось бы это дело показывать в стиле "аля-классик" даже временно, если мы конечно о том же. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 03:13 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Бенедикт2) IMHO, разделитель должен себя вести в соответствии с общесистемными установками. Если уж пользователь поставил галку "Show window contents while dragging", пусть сам и смотрит на слайд-шоу. Ну здесь я не соглашусь. Эта галка в свойства=> оформление=>эффекты находится, так? Когда меняешь размер формы, то да, это автоматически применяется/не применяется. А когда таскаешь разделитель, то это на вкус написателя программы. И сам майкрософт здесь никаких правил не соблюдает. Классические примеры (два моих любимых): 1) Outlook Express - всегда мультфильм 2) Microsoft Fax (Консоль факсов) -всегда ездит палка/разделитель ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 05:40 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77P.S. Мо быть мне кто объяснит все же: здесь все очень лихо прикладывают zip-ы, rar-ы а я туплю и не знаю как это сделать и вынужден класть файлы на, скажем так, не совсем свой ftp, да еще и в корень сайта их кладу ибо лениво folder создать а потом еще путь каждый раз выписывать.Просто здесь то, что приложено к сообщению, уже не прикладывается, если нажать кнопку "Предварительный просмотр". Т.е. написали сообщение, нажали "Предварительный просмотр", {отредактировали, опять нажали,} нажали "Browse...", добавили файл, нажали "Опубликовать". Я тоже не с первого раза понял. Дмитрий77Насчет "снимает стиль окна" чуть заранее испугали. У меня там Treeview/ListView разделяются, и на Висте они в "крутом" стиле "explorer", не хотелось бы это дело показывать в стиле "аля-классик" даже временно, если мы конечно о том же.Нет, не о том же. Window Styles Дмитрий77Ну здесь я не соглашусь. Эта галка в свойства=> оформление=>эффекты находится, так? Когда меняешь размер формы, то да, это автоматически применяется/не применяется. А когда таскаешь разделитель, то это на вкус написателя программы.Да, эта галка. И считаю, что изменение размера формы, как и изменение размера панели является изменением размера окна. Я смотрю на Explorer, кстати, в качестве примера. Но согласен с тем, что это дело вкуса, по большому счёту. Исходники в приложении. Замечания: 1) надо из формы функциональность выносить в класс; 2) сабклассинг реализован не совсем обоснованно сложно (overkill) для VB, но мне так было проще-быстрее, так как это готовые модули; 3) не уверен, что надо обрабатывать очистку фона, попробуйте в SubclsMe_EraseBackground возвращать и True, и False, если разницы нет, выкиньте; 4) сабклассинг выкинуть не получится, так как надо обрабатывать потерю захвата мыши (capture). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 11:21 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Бенедикт, спасибо. Так с ходу ничего не понял, но "Будем разбираться" на выходных или на след. неделе. Ничего пока кроме спасибо не говорю и не спрашиваю, тем более дали комментарии. Знаю что Бенедикт плохого не предложит. М.б. наглею конечно, не часто вы здесь появляетесь....а по графике вы здесь первый Вот с этой задачей даже близко не справился: Градиенты в Vista стиле, и в частности подложка под Toolbar Т.е. хочется под тулбар подложить explorer-vista-style, мутно-зелено-синий градиент. Решение для классич.стиля тулбара есть, но нужно именно под Windows-стилями включенными сделать. Собственно это если вдруг знаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2010, 14:04 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дык, целый выходной угробил. Попробуем приложить чего получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2010, 00:08 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Эге, приложить получилось наконец, слава те... Теперь не жалко потратить чуть времени на описание: Бенедиктотличие в отрисовке между кодом, приведённым Antonariy-ем ( EasySplitter ) и примером ViewEx в том, что MFC-шная реализация (класс CSplitterWnd, см. WINSPLIT.CPP, если есть исходники MFC) 1) рисует на DC окна, а не экрана. Ну вот, родил, рисуем на DC контейнера, естественно координаты пришлось пересчитывать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
3) не уверен, что надо обрабатывать очистку фона, попробуйте в SubclsMe_EraseBackground возвращать и True, и False, если разницы нет, выкиньте; Смысл SetBkColor здесь не очень понимаю, но оставил, раз вставил... Бенедикт2) на время таскания перемычки снимает стиль окна WS_CLIPCHILDREN, чтобы рисовать поверх всех дочерних окон. Да, добавил, иначе оно под низ рисует, все сработало. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Исправил мелкий баг: при нажатии мышкой на разделителе после нажатия но до начала движения курсор разделителя не отображается Код: plaintext 1. 2. 3. 4. 5.
4) сабклассинг выкинуть не получится, так как надо обрабатывать потерю захвата мыши (capture). Здесь не понял об чем речь, фактически я его выкинул. Ну, скажем так, конкретно в примере от Antonariy мне не нравится, что движение мыши стопорится границами формы. У меня в конкретном приложении этого тьфу-тьфу автоматически не происходит, видимо потому что сабклассинг формы таки используется на предмет ограничения ее размеров, причем минимальные высота/ширина формы находятся в динамической зависимости от текущей ширины элементов, разделяемых сплиттером, пытаться вдумываться в это уже неохота. Собственно все приложено целиком выше. ================================== Но, в своем конкретном примере столкнулся с гораздо более сложным подвохом. Все сделал как описано, а на TreeView иногда глючит. Голову ломал долго. Дело в том что я использую для Treeview стиль Or TVS_EX_FADEINOUTEXPANDOS У меня разделяются Treeview и назовем так ТО_ЧТО_СПРАВА Картинка (которая Splitter) берет на себя фокус когда делаешь на ней Mouse_down (tabstop=false естественно роли не играет) При этом если фокус стоял на TreeView, то Treeview теряет фокус, механизьм фейдера срабатывает и если шустрый юзер резво двигает палку в сторону TreeView, то он будет наблюдать спецэффекты с разделителем в самом лучшем и непотребном виде, ибо в теч. 2сек работы фейдера перерисовка Treeview идет непрерывно и плевать ему на отмену стилей нашей картинки-разделителя. Одним из способов решения конечно был отмена фейдера, но стиль этот мне пришелся по душе (к хорошему быстро привыкаешь). Пытался отменять этот стиль временно по аналогии со стилем разделителя (т.е. по событию mouse_down до наступления mouse_up). Не помогло, ибо механизм запускается еще до mouse_down и отмены уже запущенного механизма не происходит. Все же нашел способ извратиться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
На самом деле при большом желании ситуацию воспроизвести все же возможно. Например, (надо делать быстро) из TreeView переходим в другой контрол и не мешкая задвигаем разделитель в TreeView. Но это малореальные ситуации, и потом никак не приводит к вылету программы и прочим серьезным последствиям, поэтому думаю считать вопрос решенным и от фейдера не отказываться. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2010, 01:10 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, по splitter-у пока прочёл по диагонали, но есть замечания: 1) SetBkColor необходим, иначе XOR будет происходить с выбранным сейчас в контексте цветом фона, что есть величина случайная. Если сейчас выбран чёрный, разделителя просто не будет видно. 2) Сабклассинг нужен для отлова потери захвата (capture) мыши. Иногда он теряется (пример - пользователь нажал Ctrl+Esc), причём в программу не приходит при этом стандартных мышиных сообщений. Хорошо себя ведущий элемент управления обязан отлавливать потерю захвата. (Можно поллинг GetCapture() делать, но это некрасиво.) 3) Фокус - в MFC явно прописаны, дуплетом, SetCapture(); SetFocus(); при начале таскания. То есть фокус с текущего элемента управления уходит. Можно на это ориентироваться, можно нет, но такова вот стандартная реализация. 4) У меня мусор в виде ClipControls = False оставался, уберите, если ещё не убрали. Остальное пока не смотрел. По теме тулбара. Опять не вчитывался (увы-увы), но как-то показалось, что начали с градиентной заливки, кончили почему-то прозрачностью. 1) Висты у меня нет, поэтому вопрос - с помощью Theme Explorer или функции GradientFill() можно получить желаемую картинку? 2) "Прозрачность". Когда-то, кажется, была в VBPJ статья. На C пример описан здесь , куда-то пропавший из статьи код прикладываю, смысл: ReBar, в нём band(-ы) с битмапной подложкой, в band-е toolbar со стилем TBSTYLE_FLAT. Если я правильно понял, что требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2010, 17:12 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
БенедиктДмитрий77, 2) Сабклассинг нужен для отлова потери захвата (capture) мыши. Иногда он теряется (пример - пользователь нажал Ctrl+Esc), причём в программу не приходит при этом стандартных мышиных сообщений. Хорошо себя ведущий элемент управления обязан отлавливать потерю захвата. (Можно поллинг GetCapture() делать, но это некрасиво.) пример - пользователь нажал Ctrl+Esc да, действительно глючит причем если это сделать то дальнейшие мелкие глюки с перерисовками будут продолжаться. С одной стороны ерунда: я бы никогда не додумался на это нажимать при таскании, пользователь еще может например рубильник компьютера из розетки вынуть и много чего еще. Но с другой стороны: ну да. Но как вы сами отметили сабклассинг у вас заумный. Если я правильно понял, то нужно что-то типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
1) Я так и не понял что есть НЕЧТО: форма, PictureSplitter... 2) Он скорее всего должен запускаться не по Form_Load и жить до конца работы проги. А видимо стартовать по Mouse_down и принудительно выполнять Mouse_Up, т.е. возвращать стиль в норму и стирать сплиттер-картинку. Ну т.е. потеря захвата эквивалентна коду Mouse_up В общем не дано мне с ходу понять чего делать, ваш вариант в силу накрученности понятно брать не хочу не буду (и не сумею, круто оч-чень). А у меня там всего лишь Setup-форма, user ее один раз может подрегулирует... Есть правда еще одно Aplication где я бы все это применил, но там уже все эти взаимные перемещения ListView/Treeview уже давно прописаны на VB по-детски, не рискнул бы с ходу взять все и перекраивать, все размеры, все координаты,вся идеология при таких заменах сразу едет... Бенедикт3) Фокус - в MFC явно прописаны, дуплетом, SetCapture(); SetFocus(); при начале таскания. То есть фокус с текущего элемента управления уходит. Можно на это ориентироваться, можно нет, но такова вот стандартная реализация. Просто "снимает стиль окна WS_CLIPCHILDREN, чтобы рисовать поверх всех дочерних окон" хорошо тогда, когда дочернее окно "не рыпается",любой рефреш дочернего окна смажет этот сплиттер кот. поверх а фейдер, это когда Treeview в стиле Explorer и при уходе фокуса треугольнички(кот. вместо плюсиков) медленно исчезают, соотв. TreeView автоперерисовывается. Но кстати если смотреть на висте в стандартный проводник, то фокус не уходит, хотя... там всегда непрерывная перерисовка и галка (обсуждали недавно) роли не играет. БенедиктПо теме тулбара. 1) Висты у меня нет, поэтому вопрос - с помощью Theme Explorer или функции GradientFill() можно получить желаемую картинку?. Так Win 7 в плане "красивостей" вроде то же самое. Увы, увы... с Theme Explorer удалось нашаманить только вот это Код: plaintext 1.
Если есть какие-то наметки, можно пошаманить, но нет уверенности что этот тулбар это именно "стиль". Дело в том, что он используется только в окнах Explorer. И еще в двух "родных" приложениях: Windows Mail и Fax and Scan. Причем в этих двух цвет темно синий а не мутно -зеленый. Конечно, если это "стиль", то правильнее научиться говорить "сим-сим откройся", чем писать новую книгу по HDC-магии и т.п. Но чтобы подбирать волшебное слово надо хотя бы точно знать что оно есть в словаре в принципе. Реально рабочее красивое решение http://www.vbforums.com/showthread.php?t=381167 при включенных стилях не работает (а именно ради стилей и стараемся, без стилей такого "не положено"). Бенедикткончили почему-то прозрачностью Потому что если тулбар прозрачный, то под него хоть статическую картинку можно подложить (наверное). Я вертел долго этот ControlSpyV6, смотрел на эти планеты на черном фоне, но воспроизвести этот TB_TRANSPARENT у меня нормально не получилось даже через API-тулбар, а речь идет-таки о доработке VB-toolbar. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2010, 21:15 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > С одной стороны ерунда: я бы никогда не додумался на это нажимать при таскании, пользователь еще может например > рубильник компьютера из розетки вынуть и много чего еще. Я этим частенько пользуюсь, потому что по другому не получается "выйти" из режима таскания. :) Вернее это самый быстрый способ выйти из режима таскания :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 10:15 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, да нет, правы конечно не обязательно ctrl+esc можно alt+tab, или напр. какое-нибудь окно всплыло внезапно, ну скажем реклама антивируса авира на бесплатной версии. пока просто не понимаю как это по-простому сделать, чего и как сабклассить (я выше сформулировал свои сомнения, кот. по делу вопроса) >1) Я так и не понял что есть НЕЧТО: форма, PictureSplitter... >2) Он скорее всего должен запускаться не по Form_Load и <не должен>жить до конца работы проги. А видимо стартовать по Mouse_down и принудительно выполнять Mouse_Up, т.е. возвращать стиль в норму и стирать сплиттер-картинку. Ну т.е. потеря захвата эквивалентна коду Mouse_up т.е. пример есть, но оч. крутой, если как-то по-простому разжуете, то думаю осилю ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 11:45 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > т.е. пример есть, но оч. крутой, если как-то по-простому разжуете, то думаю осилю К сожаленю, я глубоко не вникаю в код(не хватает времени ) И о каком из примеров идет речь? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 12:07 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Критикуется Бенедиктом "моя" продукция (то что сделал из примера Antonariy с учетом примера Бенедикта) EasySplitter_Code_Vista.zip Сабклассинг я благополучно проигнорировал (речь о том что не надо игнорировать) Пример нужного сабклассинга (думаю ключ в слове WM_CAPTURECHANGED) в примере Бенедикта, но как отмечает сам автор сабклассинг там навороченно излишне сложен Project2.rar На время таскания перемычки с контейнера (который сплиттер) "снимается стиль окна WS_CLIPCHILDREN, чтобы рисовать поверх всех дочерних окон" основная беда, когда сплиттер потерял захват мыши (случайно) даже не в том, что остатки разделителя-картинки виднеются на экране какое-то время, пока не "подергали туда-сюда", а в том, что WS_CLIPCHILDREN не возвращается назад, в норм. условиях он возвращается назад по событию mouse_up. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Сабклассинг думаю должен востолнять это восстановление стиля по WM_CAPTURECHANGED Т.е. задача придумать простой сабклассинг и вставить в первый пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 12:39 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
держи :) Я добавил модуль для сабклассинга. сюда добавил перехват сообщений: Код: plaintext 1. 2. 3. 4.
Посмотри и допиляй как тебе нужно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 14:16 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Дмитрий77, Вот такой тулбар правильно отображается с выбранной темой? (Семёрки у меня тоже нет) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 20:09 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Бенедикт, Похоже ты ошибся темой ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2010, 23:25 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбоносдержи :) Я добавил модуль для сабклассинга. сюда добавил перехват сообщений: Игорь, спасибо, посмотрю на днях, сейчас как бы чуть другие дела отвлекли.Спасибо. Игорь ГорбоносБенедикт, Похоже ты ошибся темой Нет, он не ошибся, это я "виноват", просто тема не была раскрыта в свое время, а Бенедикт в этих вещах разбирается лучше всех, поэтому я рискнул озвучить здесь этот вопрос. Дмитрий77Бенедикт, ... не часто вы здесь появляетесь....а по графике вы здесь первый Вот с этой задачей даже близко не справился: Градиенты в Vista стиле, и в частности подложка под Toolbar... ============================================= БенедиктДмитрий77, Вот такой тулбар правильно отображается с выбранной темой? (Семёрки у меня тоже нет) Это проще нарисовать чем описать словами: Я так понимаю "правильным" является черный фон тулбара, что с 3-мя кнопками. Тогда даже при XP-стиле неправильно. (т.е. поведение вашего примера сходно с поведением того примера что я уже нашел, я давал ссылку выше) Однако на Висте виден некий таки ново-положительный эффект: белая полоса и голубой фон, характерный обычно для полоски меню, а не для Toolbar. Догадки: за счет прозрачности Тулбар (и CoolBar?), в том что получается обычно (мой тест,обведен красным) этого не происходит. Я так понимаю, вы Toolbar-v.5 вставили в Coolbar-v.6(comct332.ocx регистрировать пришлось) Но, скажем так, еще сложность, я в реальной проге дополнительно наворачиваю: вставляю один ToolBar в другой, потому что высота 420 для плоского стиля(а меньше для 16х16 не дает) это много и ее можно уменьшить за счет вставки один в другой, манипулируя условными размерами картинок в привязанных ImageList-ах. Т.е. внешний ToolBar имеет меньшую высоту за счет того что в нем условно не 16х16, а скажем 12х12, надо смотреть чего я там делаю. Но задачу хотя б для одного Тулбар решить... А чего бы хотелось, это верхние 3 Вистовсие картинки (о спецефичности надписей рядом с картинками и т.п. речи пока не идет, только о подложке.) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2010, 04:53 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь ГорбоносЯ добавил модуль для сабклассинга. сюда добавил перехват сообщений: Код: plaintext 1. 2. 3. 4.
Я вот над чем голову ломаю в этом тестовом примере. Для вертикального сплиттера все работает. Мне в принципе только один вертикальный и нужен. Но все же... Если сделать тоже самое для горизонтального Код: plaintext 1. 2. 3.
Сабклассинг запускается, WM_CAPTURECHANGED отлавливается, m_splitter.MouseUp 0, 0, 0, 0 выполняется, но основной код не выполняется. т.е. изменение стиля не снимается.m_bInDrag почему-то false вроде как получается ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 14:35 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > т.е. изменение стиля не снимается.m_bInDrag почему-то false вроде как получается Не правильно, ты дядя Дима, бутерброд ешь (С) Кот Матроскин Я в модуле сабкласса для кого переменную объявлял? Код: plaintext
Код: plaintext
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
или в сторону событий или в сторону прямого вызова функии снимающей выделение. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 14:58 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Код: plaintext
а я то думал..что это за такой m_splitter волшебный с потолка взявшийся. Ну тода Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Мне только теперь заново надо будет отрабатывать фейдер Потому что у меня уже этот splitMain непрерывно сабклассился по условию IsVista Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Два сабклассинга одного и того же элемента наверно не прокатит, боюсь что ваш Hook включается слишком поздно. Но наверно можно точно также отследить потерю фокуса из TreeView в сторону сплиттера... Надо покопаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 15:47 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
В принципе может и прокатить, какая ему разница какую функцию вызывать :) Ну а нет, тогда в свой сабкласс добавь обработку события изменения фокуса Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 15:57 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь ГорбоносВ принципе может и прокатить, какая ему разница Да, прокатило, т.е. я запускаю 2 сабклассинга для picSplitMain: 1) свой непрерывный, запрещает перевод фокуса с Treeview на на picSplitMain. На системах отличных от Vista не запускается. (win7 не дорабатывал, скорее всего доработаю потом одной фразой типа IsWinVista==IsWin7 в модуле определения OS для всей программы и посмотрю чего будет, скорее всего ничего плохого не будет) 2) Ваш Hook, кот. живет от момента picSplitMain_MouseDown до момента WM_CAPTURECHANGED(кот. в свою очередь происходит по Mouse_Up или по случайной потере захвата, т.е. снимается по любому) Запускать в непрерывном режиме я б этот Hook не рискнул... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2010, 17:32 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
а то хочу еще добавить объект по типу m_cSplitLeft2 и у меня они друг на друга лезут ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 18:05 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 18:16 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, спасибо , а то по разному пробовал но не понял))вот это особо интересно было Код: plaintext 1.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 18:48 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, гляньте если не сложно , я че то не пойму так че несколько использовать нельзя ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:03 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Игорь Горбонос, ерунду отправил прошлый раз у меня перемычка на picSplitLeft и picSplitLeft2 как то странно себя ведут ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:19 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05adm, Сейчас тоже ерунду отправил Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:25 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Копипаст чреват Поправил на cSplitLeft2 - все очень красиво ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:29 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, ну да точно)) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:31 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, нет нет , че то я рано да сказал)) а где поменяли? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:34 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05admShocker.Pro, нет нет , че то я рано да сказал)) а где поменяли? Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:37 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, вот блин , надо было так не заметить))) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:39 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, а задать ширину picturebox-y который слева? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:49 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05admShocker.Pro, вот блин , надо было так не заметить))) ну вообще очевидно было, когда двигаешь один сплиттер, а вместо него двигается другой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 19:49 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, а на эту гляньте (криво получается) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:26 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05adm, не нашел ничего кривого ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:30 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:33 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05adm, Тянется ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:36 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, ))))и становится нормальный вид, а почему сразу такой вид не бывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:45 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
aduka05adm, Путается в твоих вложениях. Растягивает Command2, потом не знает, куда пристроить Command1 Надо поиграться, последовательность инициализации поменять ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 20:53 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2010, 21:01 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Antonariy http://www.sql.ru/forum/actualfile.aspx?id=8805455] Приложенный файл (EasySplitter_Code.zip - 17Kb) Наткнулся на косяк в коде сплиттера. В процедуре pValidatePosition вместо Код: vbnet 1.
следует читать Код: vbnet 1.
иначе валидация не только бесполезна, но и, в некоторых случаях выдает косяки ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 16:25 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
ты зачем в него полез спустя столько времени? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 16:36 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Проект на VB все еще жив. Добавил очередную форму со сплиттером и напоролся ) Блин, поторопился, кажется, не тут косяк ( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 16:38 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Я в него кстати фичу добавлял, может пригодится кому: Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 16:45 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Antonariy, Сорри, поторопился я, я тоже фичи к нему добавлял и это оказался косяк в моем коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 16:50 |
|
Взаимное положение ListView/Treeview
|
|||
---|---|---|---|
#18+
Shocker.Pro, Я эту штуку под каждый проект помнится кастомизировал, сильно навороченная. Где пиксели, где не пиксели. Где сплошная палка нужна, где клетчатая. и т.п. Чтоб универсальный класс, что-то не получалось. В .Net с этим проще, есть отдельный контрол, даже 2. Хотя не без глюков. Splitter -потеря фокуса сплиттером Глючность отрисовки палки в SplitContainer Хотя я уже понял. На том форуме лучше с такими вопросами не лезть, а тихо подправлять на базе имеющихся знаний. Спросишь чего нибудь, переведут все на другую тему, обосрут, а на вопрос в подавляющем большинстве случаев так и не ответят. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 20:09 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2156057]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 160ms |
0 / 0 |