Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2009, 01:17   #1
Mishel825
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 15
По умолчанию Подсветка автофигуры Excel с помощью WinAPI

Всем доброе время суток !

Для подсветки елемента управления "кнопка" в Excel используется такой, например, код:

Код:
 Private Sub CommandButton1_MouseMove(ByVal Button As Integer, _
               ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
               With CommandButton1
                   .BackColor = Abs(X * 100)
                   .ForeColor = Abs(Y * 100)
                   .Caption = "X= " & X & vbLf & "Y=" & Y
               End With
               End Sub
Вопрос: есть ли код средствами WinAPI для подсветки рисованной кнопки Excel (автофигуры), так чтобы при наведении указателя мыши на автофигуру менялся бы цвет автофигуры, а после отвода указателя мыши за пределы автофигуры восстанавливалась бы преждняя заливка ?
Mishel825 вне форума Ответить с цитированием
Старый 01.12.2009, 14:37   #2
Mishel825
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 15
По умолчанию Подсветка автофигуры Excel с помощью WinAPI

Запасной вопрос :

подсветку автофигуры в Excel можно осуществить только с помощью Win API, или есть и другие средства для подсветки автофигуры в Excel ?
Mishel825 вне форума Ответить с цитированием
Старый 01.12.2009, 15:56   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
подсветку автофигуры в Excel можно осуществить только с помощью Win API, или есть и другие средства для подсветки автофигуры в Excel ?
Встроенных средств, как уже говорилось, нет.

Но, если очень хочется, то можно извратиться, и реализовать это без использования WinAPI (используя прозрачный Label):

Код:
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Label1.Caption = "X= " & X & vbLf & "Y=" & Y
    Call ОкраскаКнопок(X, Y)
End Sub

Sub test()
    MsgBox "макрос запущен", vbInformation
End Sub

Sub ОкраскаКнопок(ByVal X As Single, ByVal Y As Single)
    d = 5: Dim sha As Shape
    For Each sha In Me.Shapes
        With sha
            If .Name Like "MyButton*" Then
                НадКнопкой_поX = ((Abs(.Left - X) < d) Or (Abs(X - .Left - .Width) < d) Or (X - .Left - .Width) * (.Left - X) > 0)
                НадКнопкой_поY = ((Abs(.Top - Y) < d) Or (Abs(Y - .Top - .Height) < d) Or (Y - .Top - .Height) * (.Top - Y) > 0)
                КурсорРядом = НадКнопкой_поX And НадКнопкой_поY
                НоваяПрозрачность = IIf(КурсорРядом, 0.7, 0.1)
                If НоваяПрозрачность <> .Fill.Transparency Then
                    .Fill.Transparency = НоваяПрозрачность
                    '.TextFrame.Characters.Font.Bold = КурсорРядом
                End If
            End If
        End With
    Next
End Sub
См. пример файла:

EducatedFool вне форума Ответить с цитированием
Старый 02.12.2009, 03:28   #4
Mishel825
Пользователь
 
Регистрация: 17.10.2009
Сообщений: 15
По умолчанию

EducatedFool, большое спасибо !

В принципе это решение. Если автофигура тёмная, то при наведении указателя мыши превращается в светлую. Здесь контраст достаточный.
Однако если автофигура светлая, то при наведении указателя мыши превращается в ещё светлее. Здесь контраст слабый. Необходимы переходы - тёмный в светлый, светлый в тёмный.
Кнопка выбрана светлая.
Главный недостаток - при выделении ячейки рядом с кнопкой появляется очень заметный диапазон (5*6). Также лучше без надписей в левом верхнем углу.
Mishel825 вне форума Ответить с цитированием
Старый 02.12.2009, 07:14   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Здесь контраст слабый. Необходимы переходы - тёмный в светлый, светлый в тёмный.
Ну так а что мешает Вам красить фигуру в другие цвета?
Я для примера привёл вариант и изменением прозрачности кнопок.

Главное тут - отловить события приближения\удаления курсора от кнопок, а как именно выделить кнопки - это уже мелочи.

Цитата:
Главный недостаток - при выделении ячейки рядом с кнопкой появляется очень заметный диапазон (5*6).
При желании можно от этого избавиться.
А лишь продемонстрировал Вам возможность решить задачу без использования WinAPI.

Цитата:
Также лучше без надписей в левом верхнем углу.
Ну а что, Вы не можете самостоятельно стереть в коде одну строку?
Label1.Caption = "X= " & X & vbLf & "Y=" & Y
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление Excel через WinApi - не используя СОМ, ОЛЕ и прочие блага цивилизации x8i Общие вопросы C/C++ 1 20.08.2009 10:59
Помогите решить задачки с помощью MS Excel AlexandrAd Microsoft Office Excel 2 06.01.2009 01:17
Автофигуры shmelvs Microsoft Office Word 6 16.07.2008 17:18
Рассчет рейтинга с помощью Excel 2007 Python Microsoft Office Excel 11 19.06.2008 19:26
Автофигуры boks Microsoft Office Excel 1 04.06.2008 10:10