Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Новый пример Добавлено: 07.05.04 22:55  

Автор вопроса:  @CyRax PTR | Web-сайт: basicproduction.nm.ru/ | ICQ: 204447456 

Сначал зажал.

Но по случаю праздников решил таки выложить на всеобщее обозрение.

===

Вот собственно:

---

Контролируемый тултип

http://basicproduction.nm.ru/TrackTTT.zip

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 08.05.04 00:03

Жадность - порок :) Я тоже многое отдаю, так что не будем же жадными, поможем брату

программеру не изобретать заново велосипед, а попросту воспользоваться им :)

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 08.05.04 00:04

Пример хороший, даже работает :))) Спасибо :)

Ответить

Номер ответа: 3
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #3 Добавлено: 08.05.04 00:22

А где шрифты???

Ответить

Номер ответа: 4
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #4
Добавлено: 08.05.04 00:40

2 SNE:

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

2 CRESTA:

Собственно умерли в процессе разработки ещё прошлого примера (см. на моём сайте). Думаю ты уже догадался что в основе лежит переделанный чей то контрол (и не проси вспомнить чей :)).

Если уж сильно нужно - попробуй поработать в сторону CreateFontInDirect API. Если что не получится - спросишь в форуме. Понимаю, хотелось бы полноценный. Уж не обессудь. :(

Ответить

Номер ответа: 5
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #5 Добавлено: 08.05.04 01:47

Да эт я так, в шутку. Я вроде посылал тебе исходничек проги. Там со шрифтами было, но он как ты заметил, то был полностью самодельный ToolTip . Зато глаз радует, чтоб я сдох.

И ещё: что за глюки, я что-то не заметил?

Ответить

Номер ответа: 6
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #6
Добавлено: 08.05.04 02:04

Может и посылал. Только я точно не с твоего делал. Вроде тогда даже такого логина не было - Cresta :)

Тот пример был ориентирован на балон (ну ты понял - облачко со стрелочкой) :)

Пошли мне если не в падлу тот пример.

В этот ты наверное не всматривался. Хотя база и одинаковая, но функции несколько другие.

Глюки? А ты подержи не отпуская пробел. Видишь какие тормоза? Может больше и нет. Я уже забыл про этот тултип. Сейчас бьюсь над загрузкой инклюдов. Потом буду делать алгоритм поиска в них нужной декларации, польз. типа(и ему подобных) и макросов.

Ответить

Номер ответа: 7
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #7
Добавлено: 08.05.04 02:32

Да, кстати. Я тут пока делал навигацию немного поднаторел в API-шном TreeView. Так что если у кого есть вопросы - задавайте пока я добрый. :)

Ответить

Номер ответа: 8
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #8 Добавлено: 08.05.04 02:55

Не, ты не понял.  У меня программа на PB не хотела из автозапуска работать. Ты ещё хотел посмотреть, почему. Я тебе её и выслал. В той проге были самодельные тултипы. Только они не контролы были, а форма с одной меткой. По размеру метки. Ну и все размеры подгонялись под TextWidth и TextHeight, соответственно и шрифты любые и цвета и т.д. Всё, как можно разукрасить метку.

Насчёт глюка - если про то, что мелькает, когда держишь нажатый пробел - ну перерисовывается, потому и мелькает. А какое это имеет значение? Нигде никто не имеет доступа к тому, чтобы двигать тултип пробелом. Соответственно этот эффект нигде проявляться не будет, только если вот так, в тест-проекте.

 

Да вот собственно и весь тултип: одна функция. Можно её и в DLL загнать.  На входе ItemWnd - hWnd окна, возле которого должен появиться тултип

FUNCTION ShowTip(ItemWnd AS LONG) AS LONG
   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

    tFont = PBFormsMakeFont("Verdana", 6*FontSize, 400, %False, %True, %False, 204)
    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 hWnd, R              ' положение главного окна
    GetWindowRect ItemWnd, lR          'GetWindowRect hDlg, lR  '

    IF R.nLeft >= 512 THEN             ' если главное окно в правой части экрана, тултип - влево
        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

        DIALOG SHOW MODELESS hTip, CALL HideProc TO lRslt
        FUNCTION = lRslt

END FUNCTION     
' а в HideProc - можно завести будильник по сообщению %WM_CREATE, и по звонку - убивать тултипа.

Ответить

Номер ответа: 9
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #9
Добавлено: 08.05.04 03:41

А, всё, понял. Я второй раз и не смотрел его. Неудобно знаешь ли когда по кускам проект посылают, а ты его ещё и сам собирать должен. Конечно если мне надо - я бы сделал. Но времени нет. Я тоже делал подобную хрень когда то. Ещё на VB3 для Windows'3x. Но там то это понятно. Там тултипы только в Word'6 реализованы. А в систему не встроены. А здесь то зачем? Разве что по незнанию.

Это обычный виндовый тултип из common controls (вроде Win'95+I.E.4 минимальные требования).

Отличие только в том, что помимо автоматики, заложенной во входных параметрах, ты ещё можешь показывать его не только под мышкой, а как угодно. Хоть по таймеру :) Ну и скрывать соответственно раньше срока.

Сам алгоритм реализован несколько криво. Но не API-шный с MSDN, не с форума PB у меня не сработал. Пришлось симпровизировать. Вроде получилось ;) А там - глянем что умельцы ещё к нему присобачат.

Будем надеятся что они переборят свою жадность. :)

Ответить

Номер ответа: 10
Автор ответа:
 Fallout



Вопросов: 10
Ответов: 387
 Web-сайт: mudator.by.ru
 Профиль | | #10
Добавлено: 08.05.04 08:30

и возникает сразу мысл а что если распределить создание некоторых мождулей программы между разными людьми они каждый свой модуль отладять сделает максимально производительным и все рады +)

Ответить

Номер ответа: 11
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #11
Добавлено: 08.05.04 10:32

CyRax, лады, а какие-нить окромя этого глюка есть? может на досуге потыркаю, что и выйдет...

Fallout, пробовалось... неудобно :(

Ответить

Номер ответа: 12
Автор ответа:
 @CyRax PTR



ICQ: 204447456 

Вопросов: 28
Ответов: 664
 Web-сайт: basicproduction.nm.ru/
 Профиль | | #12
Добавлено: 08.05.04 21:14

2 All
 Блин. Опять мусор за собой не убрал. Кто будет качать - убейте функции FontInfo и FontWidth. Остались после неудачного экскремента :)

2 Fallout
 Наверное ты и прав. Вот только тогда несколько увеличится объём кода.
 Ведь когда ты делаешь нужный тебе вызов API ты ведь не прописываешь все функции, присущие этому контролу. Взять к примеру контрол APIListBox уважаемого sne. Я его просто прикрутил к проекту и получил +27 кБ кода. А если бы сидел и разбирался, то наверное сжал бы раз в 10.
 В любом случае приходится чем то жертвовать. Другое дело создавать миниконтролы с возможностью добавления нужных функций самому програмеру. Т.е. инициализация (если необходимо) и функции без которых он не будет работать. А дополнительные возможности можно из MSDN самому выдрать. Правда такие контролы расчитаны в основном на продвинутых VB-программеров и профи. А так как профи (за редким исключением) VB игнорируют, а кнопкокидателям его не осилить, то и спроса нет.

2 sne
 Не реализован алгоритм подгонки размеров окна тултипа если он многострочный.
 А сам принцип такой:
 1. Убивается существующий TOOL-ресурс (TTM_DELTOOL)
 2. Создаётся новый:
    а) Подготовка к смене позиции. (TTM_TRACKPOSITION)
       Эта функция у меня просто скрывает окно тултипа.
       Хотя по идее должна менять позицию.
    б) Добавление нового TOOL-ресурса (TTM_ADDTOOL)
    в) Отображение тултипа (TTM_TRACKACTIVATE)
       Собственно она должна показывать его по координатам
       последнего параметра сообщения TTM_TRACKPOSITION.
       Там даже аналог PB-шного макроса MakLng в модуле остался.
       У меня так же показывает, но координаты и размеры по нулям.
       Иначе тултип сначала появится в произвольном месте окна, а затем уже передвинется
       на заданное MoveWindow.
 3. Изменение размеров на нужные обычным MoveWindow.

Последовательность действий должна быть такой как я написал. Иначе тултип не отобразится.
Как видишь алгоритм несколько перекручен. Если сумеешь из MSDN приенить то только лучше будет.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам