|
Irokez
|
|
Определить вкладку под курсором15.08.2006, 21:14. Показов 7023. Ответов 22
Метки нет (Все метки)
Привет всем.
Мне нужно вывести попуп меню при правом клике на вкладке tabstrip. С этим проблем нет, но нужно показывать разные меню в зависимости от вкладки. Вопрос в том, как в событии MouseDown определить на какой именно вкладке находиться указатель мыши. Подобная ситуация была с тулбаром, но там ширина кнопок одинакова, и они, в отличии от вкладок, не сдвигаются вправо-влево. Одним словом: ХЕЛП |
|
| 15.08.2006, 21:14 | |
|
Ответы с готовыми решениями:
22
Символ под курсором в чужом окне Открыть\закрыть вкладку модемы, считать эту вкладку
|
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
| 15.08.2006, 21:39 | |
|
Irokez,
Вообще-то, стандартное (ожидаемае) попап меню должно выскакивать на активную вкладку. Как это ожидать какое-то меню от неактивного элемента? Это как-то против правил... Да, а такие меню, если я хорошо помню, пишутся для Mouse_Up VladConn
0
|
|
|
Irokez
|
|
| 15.08.2006, 21:49 | |
|
аналог такой панели есть в Опере. (в 1С и, думаю, есть еще примеры)
там открывается меню для вкладки, не зависимо от того активна она или нет. Про маусап согласен, но это дела не меняет, так как при щелчке правой кнопкой вкладка не активизируется всеравно. |
|
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
| 15.08.2006, 22:03 | |
|
Irokez,
Я могу повторить опять: это нестандартное поведение GUI. И что потом делать с меню? Вызывать его какой-то пункт? Так вкладка неактивна. Делать меню с мертвыми пунктами и одним живым - на активацию вкладки? Это странно - меню на активацию вкладки: т.е. кликни правой, потом левой. Так проще сразу левой. VladConn
0
|
|
|
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
|
|
| 15.08.2006, 22:38 | |
|
На самом деле есть смысл в словах Irokez.
К примеру, в Visual Studio 2005. Меня всегда бесило, что для того чтобы закрыть вкладку мне обязательно нужно ее выбрать. Т.е. она выбирается сама, хотя закрытие вкладки происходит по среднему клику мыши. А если на вкладке дизайн большой формы, то приходится ждать N секунд, что, мягко говоря, неудобно. Т.к. в стандартном TabStrip по клику правой кнопкой выбор вкладки не происходит, то, думаю, нет никого другого выхода, кроме как сабкласить эту вкладку и все клики правой кнопкой "переделывать" в клики левой. Правда, тем самым будет достигнут именно тот эффект, который я описал выше, но иного выхода я не знаю.
0
|
|
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
| 15.08.2006, 22:45 | |
|
Alexej Spirin,
Мы наверноe подразумеваем разное: я не знаю, как можно закрыть вкладку в тэбстрип, кликая на нее. Если на открытую вкладку кликать, то она никуда не исчезает. Кстати, именно потому, что то, что хочет Irokez, было бы нестандартное, неожидаемое поведение контроля, и нет легко доступного способа его исполнить. VladConn
0
|
|
|
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
|
|
| 15.08.2006, 22:50 | |
|
> я не знаю, как можно закрыть вкладку в тэбстрип, кликая на нее.
Я имел ввиду Visual Studio 2005. Там окна - вкладки. Ну потипа как в Опере. Полностью согласен, что у Irokez НЕстандартная задача. Но думаю, что все-таки можно ее решить так, как я написал выше.
0
|
|
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
| 15.08.2006, 23:13 | |
|
OK, давай обсуждать задачу с табстрип, а не с окнами в Опере. Вот и задается встречный вопрос: а зачем это надо? И насколько это надо? Вот посмотри: есть правила движения (как и правила постройки GUI), все едут в правой полосе, останавливаются на зеленый и т.д. Вдруг один водитель решил поправить правила: вместо огней поворота, например, махать газетой - заодно и мух отгонит. И ехать по левой стороне - так бывает иногда короче. Что произойдет? Произойдут житейские проблемы. Внезапно окажется, что трудно управлять машиной, и в целом поездка окажется более длительной или наоборот, слишком быстро закончится. В стандартных контролях, если следовать стандартам интерфейса, нет ничего такого, чтобы затрудняло их кодирование. Я не имею ввиду мультипликацию, игры, фантастику, чего-то необычного. Я имею ввиду приложение для работы в оффисе.
0
|
|
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
||||||
| 15.08.2006, 23:41 | ||||||
|
Но уж коли пошла такая пляска:
0
|
||||||
|
Irokez
|
|
| 16.08.2006, 13:22 | |
|
2VladConn
Я согласен, что для табстрип моя задача ну совсем не стандартная, но для панели окон - очень даже обычная. Я, наверное, не прав, что для панели окон решил приспособить табстрип и подозреваю, что ребята из Оперы делали что-то свое, но уж очень велик соблазн использовать именно этот контрол в виду его почти 100-процентной схожести и возможностей настройки. И он меня на все сто удовлетворяет, кроме сабжевой проблемы. Теперь по поводу твоего решения. Об этом я сказал еще в первом посте. Пока вкладок мало - никаких проблем, но как только их становится больше , чем может вместить родительская форма - появляются две кнопочки со стрелками и первая вкладка уезжает за край формы. Вот тут твой алгоритм (как и любой, основанный на определении ширины вкладок) даст неправильный результат. Так что пока я считаю вопрос открытым. |
|
|
Comanche
|
|
| 16.08.2006, 13:29 | |
|
2 Irokez:
В ответ на NM_RCLICK (ну или на бэйсиковский Mouse_Down при правой кнопке) шлёшь TCM_HITTEST и ловишь return value от SendMessage(). А вообще - советую: MSDN Home > MSDN Library > Win32 and COM Development > User Interface > Windows Shell > Windows Controls > Individual Control Information > Tab Controls (или другой интересующий тип контрола) > Tab Controls Reference > Messages (или Notifications) |
|
|
Irokez
|
|
| 16.08.2006, 16:29 | |
|
2Comanche
Спасибо. Это именно то что нужно. И за совет спасибо. Но вот возникли траблы с реализацией. Вот мой код: Public Type POINTAPI x As Long y As Long End Type Public Type TCHITTESTINFO pt As POINTAPI flags As Long End Type Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long ' какой тип должен быть у lParam? что я только не лепил - ошибка и все. Private Sub Tabs_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) Dim a As RECT, b As POINTAPI Dim lngReturn As Long, num As Long, wHWND as long Dim nn As TCHITTESTINFO If Button = vbRightButton Then nn.pt.x = x nn.pt.y = y num = SendMessage(ttt.hwnd, TCM_HITTEST, 0, nn) Call GetCursorPos(b) 'у меня хендел окна вписан с префиксом в key закладки wHWND=CLng(Mid(tabs.Tabs(num).key, 2)) lngReturn = TrackPopupMenu(GetSystemMenu(wHWND, False), TPM_LEFTBUTTON Or TPM_RIGHTBUTTON Or TPM_RETURNCMD, b.x, b.y, 0, wHWND, a) SendMessagebyLong wHWND, WM_SYSCOMMAND, lngReturn, 0 End If End Sub Если можно тоже самое сделать проще - подскажите. И, кстати, где можно найти значения констант? А то я в яндексе ищу, а это чревато ошибками. В мсдне написано, что в файле commctrl.h, но где его взять?.. Нашел пример на делфи - переделал, вроде, а что-то не то... |
|
|
Comanche
|
||||||
| 16.08.2006, 18:25 | ||||||
|
||||||
|
6 / 6 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
|
|
| 16.08.2006, 20:40 | |
|
Ладно, в таком случае можно просто брать ширину формы, когда сумма ширин вкладок ее превышает. Впрочем, Comanche как спец в API, дал очевидно более элегентный ответ.
0
|
|
|
Irokez
|
|
| 16.08.2006, 22:28 | |
|
Оч странно, но у меня пишет "Несовпадение типов" когда тип Any
что посоветуете? |
|
|
Comanche
|
|
| 19.08.2006, 18:12 | |
|
А у тебя точно VB 6.0? м.б. ты всё это под VBA или VB5 делаешь? по-моему, возможность указывать в API-декларациях "Any" в качестве типа появилась только в VB6... хотя не уверен на все сто...
|
|
|
0 / 0 / 0
Регистрация: 21.05.2009
Сообщений: 101
|
|
| 19.08.2006, 18:54 | |
|
была у меня такая же проблема, т.е. сделать панель MDI. сделал ее из контрола C1Tab от фирмы ComponentOne. там есть свойство MouseOver (определяет кнопку, над которой находится курсор), на которое я вешал всплывающую подсказку для кнопки. вот в принципе и всё. есть правда одна проблемка - контрол не бесплатный, но это легко решается
0
|
|
|
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
|
|
| 20.08.2006, 11:43 | |
|
Можно активизировать вкладку так:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cbuttons As Long, ByVal dwExtraInfo As Long) Private Const MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4 '————————————————————————— mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&
0
|
|
|
1 / 1 / 1
Регистрация: 18.06.2008
Сообщений: 329
|
|
| 20.08.2006, 11:54 | |
|
Да, еще DoEvents может потребоваться.
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& DoEvents MsgBox Tab1.Tab
0
|
|
|
Irokez
|
|
| 21.08.2006, 20:06 | |
|
2 Labuda
А вот этого мне не надо! Я хочу чтобы за мои программы платили, и поэтому не хочу воровать чужие. ))) 2 Letter_D Все дело в том, что я не хочу активизировать вкладку. Мне просто нужно ее свойство КЕУ |
|
| 21.08.2006, 20:06 | |
|
Помогаю со студенческими работами здесь
20
Определить, что находится под курсором
Как определить цвет под курсором Определить какая панель под курсором.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|