Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки по программированию. Visual C++, MFC, VB, ActiveX


Служба Рассылок Subscribe.Ru

Visual Basic. Примеры.

Уроки по программированию с сайта http://progs.biz

Рассылка №27

VB. Примеры. Расширенный PasswordEx. Урок 1. Постановка задачи.
VB. Примеры. Расширенный PasswordEx. Урок 2. Начальные действия.
VB. Примеры. Расширенный PasswordEx. Урок 3. Добавление свойств и событий.
VB. Примеры. Расширенный PasswordEx. Урок 4. Добавляем Property Bag.
VB. Примеры. Расширенный PasswordEx. Урок 5. Обработчики для таймера и нажатия Enter.
VB. Примеры. Расширенный PasswordEx. Урок 6. Испытываем PasswordEx.

Полные версии уроков (с картинками) можно найти по адресам
Урок 1. Постановка задачи.
Урок 2. Начальные действия.
Урок 3. Добавление свойств и событий.
Урок 4. Добавляем Property Bag.
Урок 5. Обработчики для таймера и нажатия Enter.
Урок 6. Испытываем PasswordEx.

Расширенный PasswordEx (ActiveX на VB). Урок 1. Постановка задачи

В этой серии уроков мы с вами создадим ActiveX-элемент PasswordEx. Внешне он будет напоминать из себя простой TextBox.

Этот элемент служит специально для ввода пароля. Работать он будет следующим образом: пользователь вводит в этот элемент пароль. Если введённый пароль неправильный, то наш элемент заблокируется в первый раз на одну секунду. При вторичном вводе неправильного пароля элемент заблокируется уже на две секунды и т. д. - наш элемент будет блокироваться при последующих неправильных паролях на на всё большее и большее время. Это все будет продолжаться до тех пор, пока пользователь не исчерпает отведённого ему числа попыток. После этого наш элемент заблокируется навсегда, при этом сгенерируется событие NoAttempts.

Если же пользователь введет правильный пароль, то элемент тоже заблокируется, и при этом сгенерируется событие RightPassword.

Свойств элемента у нас будет два. Это MaxAttempt - максимальное число попыток на ввод пароля и Password типа String - сам пароль.

Наверх

Расширенный PasswordEx (ActiveX на VB). Урок 2. Начальные действия

Создайте новый проект типа ActiveX Control. Сразу свойство Name для UserControl устанвите в PasswordBoxEx. Далее меняем свойства проекта (меню Project, далее Project1 Properties): Project name измените на PasswordEx, в Project Descriptions - на "Password (Auto)" (именно это описание появится в алфавитном списке всех ActiveX'ов при добавлении нашего элемента в другой проект).

Далее добавьте на наш UserControl таймер (назовите его tmrMain) и TextBox (назовите его txtPassword).

Для TextBox'а установите свойство text в "", и Top и Left в 0.

Добавьте еще один проект типа Standard EXE и сделаете его основным (если забыли как, то смотрите Урок 4).

Наверх

Расширенный PasswordEx (ActiveX на VB). Урок 3. Добавление свойств и событий

На этом уроке мы с вами добавим в наш ActiveX-'свойства и события. Для этого перейдите в окно кода и введите следующий текст (обратите внимание, что все надо писать в окне кода для ActiveX-элемента, а не в окне кода для тестового проекта. Это же справедливо и для последующих уроков):

Option Explicit
Dim strPassword As String 'Правильный пароль
Dim intMaxAttempt As Integer 'Максимальное число попыток
Dim intUsedAttempt As Integer 'Использованное число попыток
Dim blnRight As Boolean 'флаг правильного пароля
Event NoAttempts() 'возникает при исчерпании числа попыток
Event RightPassword() 'возникает при введении правильного пароля
Public Property Get Password() As String
  Password = strPassword
End Property
Public Property Let Password(strNewPassword As String)
  strPassword = strNewPassword
End Property
Public Property Get MaxAttempt() As Integer
  MaxAttempt = intMaxAttempt
End Property
Public Property Let MaxAttempt(intNewMaxAttempt As Integer)
  intMaxAttempt = intNewMaxAttempt
End Property

Обратите внимание, что мы не добавляем Property Get/Let для intUsedAttempt. Это будет закрытое свойство. Его невозможно будет задать в окне свойств.

Теперь займемся заданием начальных значений для наших переменных и свойств.

Во-первых, нам хотелось бы, чтобы наш ActiveX выглядел как обычный TextBox. Для этого введите следующий код:

Private Sub UserControl_InitProperties()
  UserControl.Width = 1215 'Ширину и высоту делаем
  UserControl.Height = 495 'равными ширине и высоте обычного TextBox'а
  txtPassword.Top = 0 'Устанавливаем левый
  txtPassword.Left = 0 'верхний угол
End Sub

При изменении размера ActiveX поле для ввода пароля должно занимать весь его размер. Это делаем следующий код:

Private Sub UserControl_Resize()
  txtPassword.Width = UserControl.Width
  txtPassword.Height = UserControl.Height
End Sub
Наверх

Расширенный PasswordEx (ActiveX на VB). Урок 4. Добавляем Property Bag

Нам хотелось бы, чтобы наш ActiveX сохранял свои свойства при запуске программы. За это отвечает объект PropertyBag (подробности см. в 10-м уроке). Для сохранения свойств нашего ActiveX'а введите следующий код:

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  strPassword = PropBag.ReadProperty("Password", "") 'Читаем пароль
  intMaxAttempt = PropBag.ReadProperty("MaxAttempt", 1) 'Читаем макс. число попыток.
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "Password", strPassword, "" 'Записываем пароль (пустой по умолчанию).
  PropBag.WriteProperty "MaxAttempt", intMaxAttempt, 1 'Записываем макс. число попыток (1 по умолчанию).
End Sub
Наверх

Расширенный PasswordEx (ActiveX на VB). Урок 5. Обработчики для таймера и нажатия Enter

Осталось ввести только код для нажатия клавиши Enter (при этом должен проверится пароль и вызваться то или иное событие) и для таймера. Вот необходимый код:

Private Sub tmrMain_Timer()
  txtPassword.BackColor = vbWindowBackground
  UserControl.Enabled = True 'вновь включаем наш ActiveX
  txtPassword.SetFocus 'возвращаем фокус для ввода очередного пароля
  tmrMain.Enabled = False ' отключаем таймер
End Sub

Private Sub txtPassword_KeyUp(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyReturn Then ' если нажата клавиша Enter, то...
    If txtPassword.Text <> strPassword Then 'если не угадали пароль, то...
      intUsedAttempt = intUsedAttempt + 1 'увеличиваем счетчик попыток
      txtPassword.Text = ""
      If intUsedAttempt < intMaxAttempt Then 'если ещё есть попытки
        UserControl.Enabled = False
        txtPassword.BackColor = Ambient.BackColor
        tmrMain.Interval = tmrMain.Interval + 1000 ' увеличиваем интервал у таймера
        tmrMain.Enabled = True ' включаем таймер
      Else  'если уже попыток нет
        UserControl.Enabled = False
        txtPassword.Enabled = False
        txtPassword.BackColor = Ambient.BackColor 'устанавливаем цвет как у формы
        RaiseEvent NoAttempts 'вызов события на исчерпание количества попыток
      End If
    Else 'если пароль угадан
      txtPassword.Text = ""
      txtPassword.Enabled = False
      txtPassword.BackColor = Ambient.BackColor
      RaiseEvent RightPassword 'вызов события на ввод правильного пароля
    End If
  End If
End Sub

С кодом все. В следующем уроке мы испытаем созданный нами ActiveX.

Наверх

Расширенный PasswordEx (ActiveX на VB). Урок 6. Испытываем PasswordEx

Осталось только убедиться, что наш ActiveX работает так, как мы задумывали. Закройте UserControl, перейдите в тестовый проект, разметите на его форме наш ActiveX-элемент PasswordEx.

Задайте количество попыток 3 (это свойство MaxAttempt) и пароль, скажем, "Игорь".

В окно кода введите следующие строки:

Option Explicit

Private Sub PasswordBoxEx1_NoAttempts()
  MsgBox "Попыток больше нет!"
  End
End Sub

Private Sub PasswordBoxEx1_RightPassword()
  MsgBox "Пароль правильный!"
End Sub

Запустите программу (F5). Набирайте неправильные пароли. Каждый раз наш элемент будет блокироваться, причем на все большее время. Если мы исчерпаем количество попыток, то появится один MessageBox с надписью "Попыток больше нет", если введем правильный пароль, то с надписью "Пароль правильный!"

Наверх

Copyright Алексеев Игорь, 2002

Copyright cайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное