
Эксперт
  
Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004
Репутация: 7 Всего: 23
|
Первые 2 примера написаны Никитой Культином (препод в Петербургском универе информатики, - "хотя б мог * и / сделать" - странные мысли все это наводит, - подумал Я, "он че не знает других действий кроме + и - ??") Пример взят из книги "основы VB". 15 кнопок: 0-9 , + - = Clean | Код | ' Вариант 1. Событие Click на каждой цифровой кнопке ' обрабатывает отдельная процедура
Dim accum As Single ' аккумулятор Dim oper As Integer ' операция: 1 - "+", 2 - "-", ' 0 - "выполнить" (кнопка "=") Dim f As Integer ' f = 0 ожидание первой цифры нового числа, например, после ' выполнения операции, когда на индикаторе результат. ' f = 1 ожидание ввода остальных цифр.
' кнопка "0" Private Sub Command0_Click() If f = 0 Then ' первая цифра числа Text1.Text = "0" f = 1 ' ожидание остальных цифр Else
' Следующие условие нужно для того, чтобы на индикаторе ' не появлялось нескольких нулей в начале числа. If Text1.Text <> "0" Then Text1.Text = Text1.Text + "0" End If End If End Sub
' кнопка "1" Private Sub Command1_Click() If f = 0 Then ' первая цифра числа Text1.Text = "1" f = 1 ' ожидание остальных цифр Else ' В случае, когда после выбора операции пользователь ' нажал "0", переменной f присваивается значение 1, ' ожидается ввод остальных цифр числа. Для того, чтобы ' в поле ввода не появлялось чисел, начинающихся с нуля, ' не являющихся дробными (например "01"), необходимо ' выполнение следующего условия. If Text1.Text <> "0" Then Text1.Text = Text1.Text + "1" Else: Text1.Text = "1" End If End If End Sub
' кнопка "2" Private Sub Command2_Click() If f = 0 Then Text1.Text = "2" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "2" Else: Text1.Text = "2" End If End If End Sub
' кнопка "3" Private Sub Command3_Click() If f = 0 Then Text1.Text = "3" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "3" Else: Text1.Text = "3" End If End If End Sub
' кнопка "4" Private Sub Command4_Click() If f = 0 Then Text1.Text = "4" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "4" Else: Text1.Text = "4" End If End If End Sub
' кнопка "5" Private Sub Command5_Click() If f = 0 Then Text1.Text = "5" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "5" Else: Text1.Text = "5" End If End If End Sub
' кнопка "6" Private Sub Command6_Click() If f = 0 Then Text1.Text = "6" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "6" Else: Text1.Text = "6" End If End If End Sub
' кнопка "7" Private Sub Command7_Click() If f = 0 Then Text1.Text = "7" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "7" Else: Text1.Text = "7" End If End If End Sub
' кнопка "8" Private Sub Command8_Click() If f = 0 Then Text1.Text = "8" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "8" Else: Text1.Text = "8" End If End If End Sub
' кнопка "9" Private Sub Command9_Click() If f = 0 Then Text1.Text = "9" f = 1 Else If Text1.Text <> "0" Then Text1.Text = Text1.Text + "9" Else: Text1.Text = "9" End If End If End Sub
' кнопка "c" - очистка Private Sub CommandC_Click() Text1.Text = "0" accum = 0 oper = 0 f = 0 ' ожидание первой цифры числа End Sub
' кнопка "+" Private Sub CommandPlus_Click() ' При нажатии на кнопку "+" нужно: выполнить предыдущую ' операцию, вывести результат на индикатор, запомнить ' текущую операцию и установить режим ожидания первой ' цифры нового числа. If f = 0 Then ' пользователь щелкнул на кнопку операции, но поле ввода ' находится в ожидание ввода первой цифры числа oper = 1 ' запоминание операции Else ' на индикаторе есть число, пользователь щелкнул ' на кнопку операции DoOper ' выполнение предыдущей операции oper = 1 ' запоминание текущей операции f = 0 ' ожидание первой цифры нового числа End If End Sub
' кнопка "-" Private Sub CommandMinus_Click() ' см. комментарий к проц. обработки события Click ' на кнопке "+" If f = 0 Then oper = 2 ' запоминание операции Else DoOper ' выполнение предыдущей операции oper = 2 ' запоминание текущей операции f = 0 ' ожидание первой цифры нового числа End If End Sub
' кнопка "=" Private Sub CommandEnter_Click() ' см. комментарий к проц. обработки события Click ' на кнопке "+" If f = 0 Then oper = 0 ' запоминание операции Else DoOper ' выполнение предыдущей операции oper = 0 ' запоминание текущей операции f = 0 ' ожидание первой цифры нового числа End If End Sub
' десятичная точка "," Private Sub CommandZ_Click() If Text1.Text = "0" Then Text1.Text = "0." f = 1 End If If InStr(Text1.Text, ".") = 0 Then Text1.Text = Text1.Text + "." End If End Sub
' процедура выполнения операции Sub DoOper() Dim numb As Single ' число на индикаторе
' accum содержит результат предыдущей операции, ' oper - код операции, которую нужно выполнить, ' операнд находится на индикаторе.
numb = Val(Text1.Text)
Select Case oper Case 0: accum = numb Case 1: accum = accum + numb Case 2: accum = accum - numb End Select
Text1.Text = Format$(accum) End Sub
' инициализация формы Private Sub Form_Initialize() oper = 0 End Sub
' нажатие клавиши в поле ввода цифр Private Sub Text1_KeyPress(KeyAscii As Integer) ' запрет ввода данных с клавиатуры KeyAscii = 0 End Sub
' Вариант 2. Событие Click на всех цифровых кнопках ' обрабатывает одна процедура ' 1. Во время инициализации формы свойству Tag каждой ' цифровой кнопки надо присвоить значение равное цифре, ' которая должна появится на индикаторе калькулятора. ' 2. Процедура DigitClick обрабатывает щелчок на кнопках ' "0" - "9". В качестве входного параметра этой ' процедуры используется имя кнопки, для которой эта ' процедура должна выполниться. ' 3. Процедура OperClick обрабатывает щелчок на кнопках ' "+", "-" и "=". Dim accum As Single ' аккумулятор Dim oper As Integer ' опрерация: 1 - "+", 2 - "-", ' 0 - "выполнить" (кнопка "=") Dim f As Integer ' f = 0 ожидание первой цифры нового числа, например, после ' выполнения операции, когда на индикаторе результат. ' f = 1 ожидание ввода остальных цифр.
' процедура обработки щелчка на кнопках "0" - "9" Sub DigitClick(Command As CommandButton) Select Case Command.Tag Case 1 To 9 If f = 0 Then ' первая цифра числа Text1.Text = Format$(Command.Tag) f = 1 ' ждем остальные цифры Else ' В случае, когда после выбора операции ' пользователь нажал "0", переменной f ' присваивается значение 1, ожидается ввод ' остальных цифр числа. Для того, чтобы в поле ' ввода не появлялось чисел, начинающихся с нуля, ' не являющихся дробными (например "01"), ' необходимо выполнение следующего условия. If Text1.Text <> "0" Then Text1.Text = Text1.Text + Format$(Command.Tag) Else: Text1.Text = Format$(Command.Tag) End If End If Case 0 If f = 0 Then ' первая цифра числа Text1.Text = "0" f = 1 ' ожидание остальных цифр Else ' Следующее условие нужно для того, чтобы на ' индикаторе не появлялось нескольких нулей ' в начале числа. If Text1.Text <> "0" Then Text1.Text = Text1.Text + "0" End If End If End Select End Sub
' процедура обработки щелчка на кнопках "+", "-" и "=" Sub OperClick(det As Integer) ' При нажатии на кнопку "+", "-" или "=" нужно: выполнить ' предыдущую операцию, вывести результат на индикатор, ' запомнить текущую операцию и установить режим ожидания ' первой цифры нового числа. ' det определяет кнопку: 1 - "+", 2 - "-", 0 - "=" If f = 0 Then ' пользователь щелкнул на кнопку операции, но поле ввода ' находится в ожидании ввода первой цифры числа Select Case det ' запоминание операции Case 0: oper = 0 Case 1: oper = 1 Case 2: oper = 2 End Select Else ' на индикаторе есть число, пользователь щелкнул ' на кнопку операции DoOper ' выполнение предыдущей операции Select Case det ' запоминание текущей операции Case 0: oper = 0 Case 1: oper = 1 Case 2: oper = 2 End Select f = 0 ' ожидание первой цифры нового числа End If End Sub
' кнопка "0" Private Sub Command0_Click() Call DigitClick(Command0) End Sub
' кнопка "1" Private Sub Command1_Click() Call DigitClick(Command1) End Sub
' кнопка "2" Private Sub Command2_Click() Call DigitClick(Command2) End Sub
' кнопка "3" Private Sub Command3_Click() Call DigitClick(Command3) End Sub
' кнопка "4" Private Sub Command4_Click() Call DigitClick(Command4) End Sub
' кнопка "5" Private Sub Command5_Click() Call DigitClick(Command5) End Sub
' кнопка "6" Private Sub Command6_Click() Call DigitClick(Command6) End Sub
' кнопка "7" Private Sub Command7_Click() Call DigitClick(Command7) End Sub
' кнопка "8" Private Sub Command8_Click() Call DigitClick(Command8) End Sub
' кнопка "9" Private Sub Command9_Click() Call DigitClick(Command9) End Sub
' кнопка "c" - очистка Private Sub CommandC_Click() Text1.Text = "0" accum = 0 oper = 0 f = 0 ' ожидание первой цифры числа End Sub
' кнопка "+" Private Sub CommandPlus_Click() Call OperClick(1) End Sub
' кнопка "-" Private Sub CommandMinus_Click() Call OperClick(2) End Sub
' кнопка "=" Private Sub CommandEnter_Click() Call OperClick(0) End Sub
' десятичная точка "," Private Sub CommandZ_Click() If Text1.Text = "0" Then Text1.Text = "0." f = 1 End If If InStr(Text1.Text, ".") = 0 Then Text1.Text = Text1.Text + "." End If End Sub
' процедура выполнения операции Sub DoOper() Dim numb As Single ' число на индикаторе
' accum содержит результат предыдущей операции, ' oper - код операции, которую нужно выполнить, ' операнд находится на индикаторе.
numb = Val(Text1.Text)
Select Case oper Case 0: accum = numb Case 1: accum = accum + numb Case 2: accum = accum - numb End Select
Text1.Text = Format$(accum) End Sub
' инициализация формы Private Sub Form_Initialize() ' задание значений свойства Tag для кнопок "0" - "9" Command0.Tag = 0 Command1.Tag = 1 Command2.Tag = 2 Command3.Tag = 3 Command4.Tag = 4 Command5.Tag = 5 Command6.Tag = 6 Command7.Tag = 7 Command8.Tag = 8 Command9.Tag = 9
oper = 0 End Sub
' нажатие клавиши в поле ввода цифр Private Sub Text1_KeyPress(KeyAscii As Integer) ' запрет ввода данных с клавиатуры KeyAscii = 0 End Sub [code=vb]
Мой собственный пример:
[/code=vb] Option Explicit Dim B As Integer Dim A As Double
Private Sub Command1_Click() Text1.Text = Text1.Text + "1" End Sub
Private Sub Command10_Click() Text1.Text = Text1.Text + "6" End Sub
Private Sub Command11_Click() Text1.Text = Text1.Text + "7" End Sub
Private Sub Command12_Click() Text1.Text = Text1.Text + "8" End Sub
Private Sub Command13_Click() Text1.Text = Text1.Text + "9" End Sub
Private Sub Command14_Click() Text1.Text = Text1.Text + "0" End Sub
Private Sub Command15_Click() B = 4 A = Val(Text1.Text) 'Text1.Text = "" Print A End Sub
Private Sub Command16_Click() Text1.Text = Text1.Text + "." End Sub
Private Sub Command17_Click() 'копка "степень" Text1.Text = Text1.Text + "-" End Sub
Private Sub Command18_Click() B = 3 A = Val(Text1.Text) Text1.Text = "" Print A End Sub
Private Sub Command19_Click() B = 5 A = Val(Text1.Text) Text1.Text = "" Print A End Sub
Private Sub Command2_Click() Text1.Text = Text1.Text + "2" End Sub
Private Sub Command3_Click() Text1.Text = Text1.Text + "3" End Sub
Private Sub Command4_Click() 'кнопка сложения B = 1 A = Val(Text1.Text) Text1.Text = "" Print A End Sub
Private Sub Command5_Click() If B = 1 Then Text1.Text = Text1.Text + A 'сложение If B = 2 Then Text1.Text = A - Val(Text1.Text) 'вычитание If B = 3 Then Text1.Text = A / Val(Text1.Text) 'деление If B = 4 Then Text1.Text = Val(Text1.Text) ^ 0.5 'корень If B = 5 Then Text1.Text = A * Val(Text1.Text) 'умножение End Sub
Private Sub Command6_Click() 'кнопка вычитания A = Text1.Text Print A Text1.Text = "" B = 2 End Sub
Private Sub Command7_Click() Text1.Text = "" End Sub
Private Sub Command8_Click() Text1.Text = Text1.Text + "4" End Sub
Private Sub Command9_Click() Text1.Text = Text1.Text + "5" End Sub
|
И вообще лучше сделать калькулятор типа инженерного: выражение1...действие1... и т.п. = результат - ну, тригонометрию прибавить и т.п. З.Ы. А за флейм, cardinal, не злись, просто я тогда спросил про фильм, разве есть люди, кому он не понравился? Это сообщение отредактировал(а) Voldemar2004 - 23.5.2005, 13:46
--------------------
i_i (';') (V) 
|