' СОРС ЗА ФОРМАТА

'При въвеждане на формата

Private Sub Form_Load()

    Form1.Caption = MomentnaKlaviatura ' Надписът на формата изписва моментаната клавиатура

End Sub

 

'При кликане на бутона за опция Windows - XP

Private Sub Option1_Click()

    FlagXP = 1 'Сменяме флага, за да използва друга константа за клавиатурата

End Sub

 

'При кликане на бутона за опция Windows - 7, 8, 10

Private Sub Option2_Click()

    FlagXP = 0 ' Възстановяваме флага на О

End Sub

 

'При натискане на бутона - Английска

Private Sub Command1_Click()

    KeyBordEn ' Задействаме процедурата от модула за смяна на английска клавиатура

    Form1.Caption = MomentnaKlaviatura ' Сменяме надписа на формата

    'Сменяме цвета на формата на бутоните

    Command1.BackColor = vbRed: Command2.BackColor = vbWhite: Command3.BackColor = vbWhite

End Sub

 

'При натискане на бутона  Българска - Фонетична

Private Sub Command2_Click()

    KeyBordBUL ' Задействаме процедурата от модула за смяна на фонетична клавиатура

    Form1.Caption = MomentnaKlaviatura ' Сменяме надписа на формата

    'Сменяме цвета на формата на бутоните

    Command1.BackColor = vbWhite: Command2.BackColor = vbGreen: Command3.BackColor = vbWhite

End Sub

 

'При натискане на бутона  Българска - БДС

Private Sub Command3_Click()

    KeyBordBUL2 ' Задействаме процедурата от модула за смяна на БДС клавиатура

    Form1.Caption = MomentnaKlaviatura ' Сменяме надписа на формата

    'Сменяме цвета на формата на бутоните

    Command1.BackColor = vbWhite: Command2.BackColor = vbWhite: Command3.BackColor = vbYellow

End Sub

 

'Следва сорса за автоматичната смяна на клавиатурата

 

'При взимане на фокуса от Text1

Private Sub Text1_GotFocus()

    Command1_Click ' Натискаме бутона command1, което сменя на английска клавиатура

End Sub

 

'Автоматична смяна на клавиатурата при промяна на последния написан знак

Private Sub Text1_Change()

    On Error Resume Next ' Манипулатор на грешка

    PosledenZnak = Mid(Text1.Text, Text1.SelStart, 1) 'Приxващаме последния написан знак

    If PosledenZnak = Chr(10) Then Command1_Click ' Ако той е нов ред сработваме бутон1

    If PosledenZnak = "-" Then Command2_Click ' Ако е тире сработваме бутон-2

End Sub

 

 

'СОРС ЗА МОДУЛА AutoChangeKeyboard

'Декларация на АПИ функции за манипулиране на клавиатурата

'За разпознаване на включената в момента клавиатура

Public Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" ( _

    ByVal pwszKLID As String) As Long

'За въвеждане на нова клавиатура

Public Declare Function LoadKeyboardLayout Lib "user32" Alias "LoadKeyboardLayoutA" ( _

    ByVal pwszKLID As String, ByVal Flags As Long) As Long

'За активиране на налична вече клавиатура

Public Declare Function ActivateKeyboardLayout Lib "user32" ( _

    ByVal HKL As Long, ByVal Flags As Long) As Long

 

'Константи съответстващи на различните клавиатури

Public Const KbdBul = "00010402"  'Bulagarian Phonetic Tradition

Public Const KbdBulXP = "A0000402"  'Bulagarian Phonetic Tradition

Public Const KbdBul2 = "00000402"  'Bulagarian BDS

Public Const KbdEn = "00000409"  'English(US)   по подразбиране

'Константа в която ще се записва моментаната клавиатура

Public Konstanta As String

Public FlagXP

 

'Публична функция връщаща името на включената клавиатура

Public Function MomentnaKlaviatura()

    'създаваме буфер, в който да се запише константата  на включената клавиатура

    Konstanta = "00000000"

    'Получаваме константата съответстваща на включената в момента клавиатура

    GetKeyboardLayoutName (Konstanta)

    If Konstanta = KbdBul Then MomentnaKlaviatura = "Bulagarian Phonetic Tradition"

    If Konstanta = KbdBulXP Then MomentnaKlaviatura = "Bulagarian Phonetic XP"

    If Konstanta = KbdBul2 Then MomentnaKlaviatura = "Bulagarian BDS"

    If Konstanta = KbdEn Then MomentnaKlaviatura = "English(US) "

End Function

 

'Публична процедура за преключване на българска фонетична клавиатура

Public Sub KeyBordBUL()

    If FlagXP = 0 Then

        Klaviatura = LoadKeyboardLayout(KbdBul, 0)

    Else

        Klaviatura = LoadKeyboardLayout(KbdBulXP, 0)

    End If

    ActivateKeyboardLayout Klaviatura, 0

End Sub

 

'Публична процедура за преключване на българска клавиатура - БДС

Public Sub KeyBordBUL2()

  Klaviatura = LoadKeyboardLayout(KbdBul2, 0)

  ActivateKeyboardLayout Klaviatura, 0

End Sub

 

'Публична процедура за преключване на английска клавиатура US

Public Sub KeyBordEn()

  Klaviatura = LoadKeyboardLayout(KbdEn, 0)

  ActivateKeyboardLayout Klaviatura, 0

End Sub