Страница: 1 |
Сначал зажал. Но по случаю праздников решил таки выложить на всеобщее обозрение. === Вот собственно: --- Контролируемый тултип http://basicproduction.nm.ru/TrackTTT.zip
Жадность - порок Я тоже многое отдаю, так что не будем же жадными, поможем брату программеру не изобретать заново велосипед, а попросту воспользоваться им Пример хороший, даже работает )) Спасибо А где шрифты??? 2 SNE: Там есть несколько глюков. Если исправишь - дай знать. Я этот контрол буду в IDE использовать. Просто очень много работы над другими элементами программы и времени на генеральное вылизывание просто нет. 2 CRESTA: Собственно умерли в процессе разработки ещё прошлого примера (см. на моём сайте). Думаю ты уже догадался что в основе лежит переделанный чей то контрол (и не проси вспомнить чей ). Если уж сильно нужно - попробуй поработать в сторону CreateFontInDirect API. Если что не получится - спросишь в форуме. Понимаю, хотелось бы полноценный. Уж не обессудь. Да эт я так, в шутку. Я вроде посылал тебе исходничек проги. Там со шрифтами было, но он как ты заметил, то был полностью самодельный ToolTip . Зато глаз радует, чтоб я сдох. И ещё: что за глюки, я что-то не заметил? Может и посылал. Только я точно не с твоего делал. Вроде тогда даже такого логина не было - Cresta Тот пример был ориентирован на балон (ну ты понял - облачко со стрелочкой) Пошли мне если не в падлу тот пример. В этот ты наверное не всматривался. Хотя база и одинаковая, но функции несколько другие. Глюки? А ты подержи не отпуская пробел. Видишь какие тормоза? Может больше и нет. Я уже забыл про этот тултип. Сейчас бьюсь над загрузкой инклюдов. Потом буду делать алгоритм поиска в них нужной декларации, польз. типа(и ему подобных) и макросов. Да, кстати. Я тут пока делал навигацию немного поднаторел в API-шном TreeView. Так что если у кого есть вопросы - задавайте пока я добрый. Не, ты не понял. У меня программа на PB не хотела из автозапуска работать. Ты ещё хотел посмотреть, почему. Я тебе её и выслал. В той проге были самодельные тултипы. Только они не контролы были, а форма с одной меткой. По размеру метки. Ну и все размеры подгонялись под TextWidth и TextHeight, соответственно и шрифты любые и цвета и т.д. Всё, как можно разукрасить метку. Насчёт глюка - если про то, что мелькает, когда держишь нажатый пробел - ну перерисовывается, потому и мелькает. А какое это имеет значение? Нигде никто не имеет доступа к тому, чтобы двигать тултип пробелом. Соответственно этот эффект нигде проявляться не будет, только если вот так, в тест-проекте. Да вот собственно и весь тултип: одна функция. Можно её и в DLL загнать. На входе ItemWnd - hWnd окна, возле которого должен появиться тултип FUNCTION ShowTip(ItemWnd AS LONG) AS LONG tFont = PBFormsMakeFont("Verdana", 6*FontSize, 400, %False, %True, %False, 204) GetWindowRect hWnd, R ' положение главного окна IF R.nLeft >= 512 THEN ' если главное окно в правой части экрана, тултип - влево DIALOG SHOW MODELESS hTip, CALL HideProc TO lRslt END FUNCTION А, всё, понял. Я второй раз и не смотрел его. Неудобно знаешь ли когда по кускам проект посылают, а ты его ещё и сам собирать должен. Конечно если мне надо - я бы сделал. Но времени нет. Я тоже делал подобную хрень когда то. Ещё на VB3 для Windows'3x. Но там то это понятно. Там тултипы только в Word'6 реализованы. А в систему не встроены. А здесь то зачем? Разве что по незнанию. Это обычный виндовый тултип из common controls (вроде Win'95+I.E.4 минимальные требования). Отличие только в том, что помимо автоматики, заложенной во входных параметрах, ты ещё можешь показывать его не только под мышкой, а как угодно. Хоть по таймеру Ну и скрывать соответственно раньше срока. Сам алгоритм реализован несколько криво. Но не API-шный с MSDN, не с форума PB у меня не сработал. Пришлось симпровизировать. Вроде получилось А там - глянем что умельцы ещё к нему присобачат. Будем надеятся что они переборят свою жадность. и возникает сразу мысл а что если распределить создание некоторых мождулей программы между разными людьми они каждый свой модуль отладять сделает максимально производительным и все рады +) CyRax, лады, а какие-нить окромя этого глюка есть? может на досуге потыркаю, что и выйдет... Fallout, пробовалось... неудобно 2 All 2 Fallout 2 sne Последовательность действий должна быть такой как я написал. Иначе тултип не отобразится. Страница: 1 |
Вопрос: Новый пример
Добавлено: 07.05.04 22:55
Автор вопроса: @CyRax PTR | Web-сайт:
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 08.05.04 00:03
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 08.05.04 00:04
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 08.05.04 00:22
Номер ответа: 4
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #4
Добавлено: 08.05.04 00:40
Номер ответа: 5
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #5
Добавлено: 08.05.04 01:47
Номер ответа: 6
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #6
Добавлено: 08.05.04 02:04
Номер ответа: 7
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #7
Добавлено: 08.05.04 02:32
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 08.05.04 02:55
LOCAL ret AS LONG, hDC AS LONG, lR AS RECT, s AS STRING
LOCAL lRslt AS LONG, i AS LONG
LOCAL mwnd AS LONG, tFont AS LONG
'---------------------------------------------------------------------------------------
' здесь текст тултипа, он в массиве, но можно его передавать в ф-цию
' как входной параметр
s = TRIM$(FC((Item-%imSYSTEM)*10+SubItem))
i = INSTR(-1, s, ANY "\")
s = LEFT$(s, i)
s = " Location: " + s
'---------------------------------------------------------------------------------------
' здесь делается окно - контейнер тултипа
DIALOG NEW hDlg, "" , , , 10, 10, %WS_POPUP _
OR %WS_CLIPCHILDREN OR %WS_VISIBLE OR %DS_SETFONT OR %WS_EX_CONTROLPARENT _
OR %WS_EX_WINDOWEDGE OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR _
TO hTip
DIALOG SEND hTip, %WM_SETFONT, tFont, 0
'---------------------------------------------------------------------------------------
' здесь собственно сам тултип - т.е. метка, её цвета и шрифт.
CONTROL ADD LABEL, hTip, %LBLTip, s, 0, 0, 4, 4, %WS_BORDER
CONTROL SET COLOR hTip, %LBLTip, -1, (RGB(220,255,255))
CONTROL SEND hTip, %LBLTip, %WM_SETFONT, tFont, 0
'---------------------------------------------------------------------------------------
' определение ширины текста, для подстройки под него размера метки и самой формы
i = GetWindowDC(hTip)
GetTextExtentPoint32 i, BYCOPY s, LEN(s), Pt
'---------------------------------------------------------------------------------------
' ну и ресайз с позиционированием
CONTROL HANDLE hTip, %LBLTip TO mwnd
MoveWindow mwnd, 0, 0, Pt.x/1.3, Pt.y, 1
GetWindowRect ItemWnd, lR 'GetWindowRect hDlg, lR '
MoveWindow hTip, lR.nRight-Pt.x/1.3, lR.nTop - Pt.y -2, Pt.x/1.3, Pt.y, 1
ELSE
MoveWindow hTip, lR.nLeft, lR.nTop - Pt.y -2, Pt.x/1.3, Pt.y, 1
END IF
FUNCTION = lRslt
' а в HideProc - можно завести будильник по сообщению %WM_CREATE, и по звонку - убивать тултипа.
Номер ответа: 9
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #9
Добавлено: 08.05.04 03:41
Номер ответа: 10
Автор ответа:
Fallout
Вопросов: 10
Ответов: 387
Web-сайт:
Профиль | | #10
Добавлено: 08.05.04 08:30
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 08.05.04 10:32
Номер ответа: 12
Автор ответа:
@CyRax PTR
ICQ: 204447456
Вопросов: 28
Ответов: 664
Web-сайт:
Профиль | | #12
Добавлено: 08.05.04 21:14
Блин. Опять мусор за собой не убрал. Кто будет качать - убейте функции FontInfo и FontWidth. Остались после неудачного экскремента
Наверное ты и прав. Вот только тогда несколько увеличится объём кода.
Ведь когда ты делаешь нужный тебе вызов API ты ведь не прописываешь все функции, присущие этому контролу. Взять к примеру контрол APIListBox уважаемого sne. Я его просто прикрутил к проекту и получил +27 кБ кода. А если бы сидел и разбирался, то наверное сжал бы раз в 10.
В любом случае приходится чем то жертвовать. Другое дело создавать миниконтролы с возможностью добавления нужных функций самому програмеру. Т.е. инициализация (если необходимо) и функции без которых он не будет работать. А дополнительные возможности можно из MSDN самому выдрать. Правда такие контролы расчитаны в основном на продвинутых VB-программеров и профи. А так как профи (за редким исключением) VB игнорируют, а кнопкокидателям его не осилить, то и спроса нет.
Не реализован алгоритм подгонки размеров окна тултипа если он многострочный.
А сам принцип такой:
1. Убивается существующий TOOL-ресурс (TTM_DELTOOL)
2. Создаётся новый:
а) Подготовка к смене позиции. (TTM_TRACKPOSITION)
Эта функция у меня просто скрывает окно тултипа.
Хотя по идее должна менять позицию.
б) Добавление нового TOOL-ресурса (TTM_ADDTOOL)
в) Отображение тултипа (TTM_TRACKACTIVATE)
Собственно она должна показывать его по координатам
последнего параметра сообщения TTM_TRACKPOSITION.
Там даже аналог PB-шного макроса MakLng в модуле остался.
У меня так же показывает, но координаты и размеры по нулям.
Иначе тултип сначала появится в произвольном месте окна, а затем уже передвинется
на заданное MoveWindow.
3. Изменение размеров на нужные обычным MoveWindow.
Как видишь алгоритм несколько перекручен. Если сумеешь из MSDN приенить то только лучше будет.