Maks150988
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Так-с-с, с трекбаром разобрался полностью. Еще вот давно хотелось найти аналог ЧекЛистбокс дельфевый только чтоб на чистом Апи был. Естественно что такой фигней никто не страдает и не перерисовывает контролы, результаты поиска конечно не увенчались успехом, поэтому пришлось подредактировать стандартный Листбокс, немного заовнердравив при этом. Вроде бы все работает как надо, только все не могу придумать как обработать одинарное нажатие правой кнопкой мыши чтоб строка в списке выделялась. Такое например есть в ЛистВью, а Листбокс вроде по умолчанию такое не поддерживает. Может у вас будут какие-нибудь идеи как это можно реализовать? Ссылка По ссылке демонстрационная программулька с некоторыми возможностями по управлению чекбоксами в списке. И вот еще что-то не получается выполнить правильную отрисовку контрола когда в нем строк нет - рисуется мусор какой-то. Я по идее поставил проверку на наличе строк и если они больше -1 то выполняется отрисовка иначе ее нет. Но рисуется и чекбокс и мусор, непонятки вобщем. Заместо этого пробывал выводить просто строчку что список пуст - ну знаете наверное что по центру в первой строке или посередине контрола выводится информация что списк пуст - ну типа этого вобщем хотел реализовать, но выводился опять чекбокс с мусором. И нашел реализацию на Си, когда нужно тыкнуть на ползунок трекбара чтоб он тут же переместился в нужную нам позицию, когда курсор находится на линии движения. Переделал на делфи. Выглядит вот так, может кому-нибудь нужно будет: Код: procedure SetPositionTrackbar(Trkb : Thandle); var ptPos : TPoint; rcTrBar : TRect; GetTrkPos : Integer; GetTrkWdt : Integer; GetTrkMax : Integer; GetTrkMin : Integer; begin GetCursorPos(ptPos); GetWindowRect(Trkb, rcTrBar); GetTrkWdt := rcTrBar.right - rcTrBar.left - 24; GetTrkPos := ptPos.x - rcTrBar.left - 12; GetTrkMax := SendMessage(Trkb, TBM_GETRANGEMAX, 0, 0); GetTrkMin := SendMessage(Trkb, TBM_GETRANGEMIN, 0, 0); SendMessage(Trkb, TBM_SETPOS, Integer(TRUE), Integer(GetTrkMin + (GetTrkMax - GetTrkMin) * GetTrkPos div GetTrkWdt)); end; |
|