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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.11.2008, 15:27   #1
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
Вопрос 2 вопроса по UserForm

Доброго дня, 2 вопроса:
есть открытая UserForm
1) при нажатии на Enter или еще на что-то (например shift,ctrl... знаки преп.), когда фокус находится в TextBox (а лучше где угодно) хочу активировать функцию, как это можно реализовать.
2) можно ли на формах в VBA программно рисовать линии? и если да то как...
tolikman вне форума
Старый 25.11.2008, 17:10   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вопрос 2.

Да, можно. Разными способами.

Например, с использованием WinAPI (позволяет рисовать линии, эллипсы и т.д. и т.п.)

В Интернете много примеров. Например, здесь.

А в этой теме есть прикреплённый файл с примером рисования.

Далее Вы просто используете одну из функций
Код:
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpPoint As Long) As Long
Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Private Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
каждая из которых что-то рисует.



Проблему с рисованием также можно решить и при помощи создания стандартных элементов управления под вид линии.

Здесь обсуждалась подобная тема.
EducatedFool вне форума
Старый 25.11.2008, 17:26   #3
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

EducatedFool большое спасибо!
а как на счет 1 вопроса?
tolikman вне форума
Старый 25.11.2008, 17:29   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вопрос 1.

Создайте пустую форму, в модуль формы впишите такой код:

Код:
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Application.StatusBar = "KeyCode= " & KeyCode & "            " & "Shift= " & Shift
    If KeyCode = 13 Then MsgBox "Вы нажали клавишу Enter"
End Sub
Теперь, запустив форму, смотрите на строку состояния Excel, и нажимайте разные клавиши ( в том числе удерживая одну или несколько клавиш типа Alt, Ctrl и Shift)

Чтобы при нажатии Enter запускались Ваши макросы, используйте примерно такую конструкцию внутри обработчика события:

Код:
    Select Case KeyCode
        Case vbKeyCapital: Макрос1 ' нажата клавиша CapsLock
        Case vbKeyControl: Макрос2 ' нажата клавиша Ctrl
    End Select
Цитата:
когда фокус находится в TextBox (а лучше где угодно) хочу активировать функцию
Для каждого элемента управления придётся создать подобный обработчик. То есть, если у Вас на форме несколько контролов, для каждого из них (ну и про саму форму не забывая) в обработчик впишите подобный код.

Проще сделать функцию, которая принимает в качестве параметра значение KeyCode, и уже, анализируя его, что-то выполняет. После чего вызывать эту функцию из каждого обработчика событий.
EducatedFool вне форума
Старый 25.11.2008, 22:50   #5
tolikman
Форумчанин
 
Регистрация: 25.08.2008
Сообщений: 159
По умолчанию

большое спасибо!
tolikman вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с UserForm. То работает, то НЕ работает Maxx Microsoft Office Excel 6 19.11.2008 14:51
Помогите с UserForm Maxx Microsoft Office Excel 4 12.11.2008 11:37
2 маленьких вопроса Ксеноцид БД в Delphi 7 07.05.2008 13:43
2 вопроса по Delphi N!ckeL Помощь студентам 5 30.04.2008 17:12