Ось це номер. Зробив нарешті. ТАК ТАК ТАК. Малувато емоцій панове. Локоть вниз, коліно вгору - ессссс, шипіти пивом і безцільно водити мишкою по екрану.
Елементарне питання, змусив поламати мізки не один день.
Така проста задачка по візуалізації призначеного для користувача інтерфейсу самопісний програми на VBA в Excel.
Довелося по роботі написати програму для спрощення роботи складу.
Відпрацював алгоритм, налаштував форми документів. Спростив введення даних до мінімуму.
Почалося найцікавіше - призначений для користувача інтерфейс.
Все елементарно. Великі кнопки, щоб не метиться в них в снайперський режимі.
Прості зрозумілі написи. Начебто все на місці.
Потім хочеться краси і наочності. Щоб як в кращих будинках.
Ідея проста і давно застосовується: кнопка, на яку наведений курсор миші, повинна виділятися кольором, розміром шрифту і якось там ще, як завгодно, щоб в очі впадало.
От якось так:
Пауза в відображенні на 12-13 секундах - це лаг віддаленого робочого столу.
Програміст я ще той, сказати не можу, тільки скопіювати звідкись із Хелп або у кого-то з інтернету підглянути ідею, плюс шкільний курс бейсика.
Але ось цей ефект, на кнопках, змусив поламати не один яндекс і нічого, і ніде, не знайшов, окрім як слів, що засобами VBA це не зробити так просто. Може я не так шукав, але не знайшов.
Та й плюнути і забути, складно і громіздко? Треба підключати бібліотеки вінди, а це відразу мінус в сумісності. Але ж ні - все просто як сам VBA.
Треба було думати, а не вирішувати звичними, для мене, способами. Обчислення координат курсору миші, визначення діапазонів для кнопок - все це нісенітниця. Через особливості VBA відстеження координат миші ведеться нерівномірно і сильно залежить від швидкості її переміщення. Тому це не працює нормально. Залишаються артефакти в вигляді не перемальовані кнопок або в вигляді не намальованих як треба. Незграбно і кострубато.
І тут я вирішив спробувати метод setfocus для commandbutton. Це коли така сіра рамочка з'являється на активній кнопці. Як виявилося, це працює. Можна як завгодно переміщати мишу. Швидко, повільно, плавно, ривками, взагалі без миші - з клавіатури стрілками. Але найголовніше, що setfocus завжди спрацьовує на тому об'єкті у якого він прописаний в подію mousemove. Природно, що до об'єкта в принципі можна застосувати setfocus.
До commandbutton та іншим об'єктам userform setfocus відмінно застосуємо. При наведенні покажчика миші на кнопці з'являється заповітна рамочка, значить кнопка зараз обрана і активна.
Та й все. Це все говорить про те, що тепер у об'єкта кнопка спрацюють події exit і enter. Використовуючи три події об'єкта кнопка: mousemove, exit і enter, можна налаштувати візуальне оформлення так, як душа забажає.
Робимо setfocus на commandbutton в mousemove. Потім на вході (enter) робимо яскравіше, а на виході (exit) світліше.
Зміна кольору commandbutton на userform при наведенні миші в Excel? Це просто.