Проблем със flat SpeedButton-и
3 отговора
0 прегледа
Проблем със flat SpeedButton-и
Правя тука една програмка на D5, в която има панел с няколко SpeedButton-а и поле за чертане в PaintBox. Бутоните са flat. Hint-овете им излизат върху полето за чертане и за да ги скрие, Windows-a го пречертава, като всеки път вика PaintBox.Paint. При определени обстоятелства, пречертаването на полето започва да отнема време, което може да е 1-2 секунди, че и повече. Това обикновено не е проблем, но ако всичките бутони се обходят бързо с мишката, накрая голяма част от тях остават с рамките си, въпреки, че са flat. Някаква идея как да се справя с този проблем? Функционалността не се нарушава, но седи грозно и ме дразни.
P.S. С D2005 и включен манифест за теми е същата работа. Пробвам под XP SP2.
Mixy
P.S. С D2005 и включен манифест за теми е същата работа. Пробвам под XP SP2.
Mixy
Дървения начин не ти ли харесва?
Дървения начин не ти ли харесва?
Правиш наследник на tSpeedButon, прехващаш message CM_HINTSHOW, преценяваш дали ще показваш Hint (или не - примерно, ако скоро си бил върху друг бутон, или ако много малко си бил върху текущия - няма да е съвсем елементарно).
CMHintShow е привейт в TControl.
(Впрочем, нещо полигонско ли ползваш или ти изчисляваш, че мишката кликва върху стрелкичката? - доста добре е отработено)
Правиш наследник на tSpeedButon, прехващаш message CM_HINTSHOW, преценяваш дали ще показваш Hint (или не - примерно, ако скоро си бил върху друг бутон, или ако много малко си бил върху текущия - няма да е съвсем елементарно).
CMHintShow е привейт в TControl.
(Впрочем, нещо полигонско ли ползваш или ти изчисляваш, че мишката кликва върху стрелкичката? - доста добре е отработено)
Re: Дървеното е за дърводелци :)
Не искам да се бъркам в механизма за обработка на hint-овете, но и това може да е решение в краен случай, ако не измислим друго. Има начин да се оптимизира изчертаването да става малко по-бързо, но винаги можеш да добавш още обекти, та и това не е окончателно решение.
Иначе стрелките са полигони с по 4 точки - при всеки клик ги обхождам и проверявам дали курсора не попада в някой от тях.
Mixy
Иначе стрелките са полигони с по 4 точки - при всеки клик ги обхождам и проверявам дали курсора не попада в някой от тях.
Mixy
Re: Дървеното е за дърводелци :)
Реших проблема радикално - след всяко пречертаване на полето, обхождам бутоните и им пращам CM_MOUSELEAVE.

Mixy
Mixy