Страница 1 из 1

Первая (и последняя) программа для Windows

Добавлено: 03.03.2015 06:48
Еврей
Для Windows существуют миллионы программ, но нет одной, которую я ищу уже долго и которую, видимо, придётся написать самому. Программа эта - простой калькулятор с RPN. Не онлайн (!), не Ява в браузере (!) и вообще безо всякого браузера и HTML, не программа в ABAP4, а нормальный 64-битный (!) Windows PE файл.

Задумка такая. В неизменном по размеру окне нет никаких кнопок, как в обычных калькуляторах, потому что ввод осуществляется только с клавиатуры. Есть несколько строчек, отображающих содержимое соответствующего количества первых регистров сопроцессора или SSE. Верхней строчке соответствует верхний регистр. Туда же производится ввод чисел.

Допустимые клавиши и их действия:

0-9, а также максимально одна запятая - отображение набранного символа в верхней строчке со сдвигом воображаемого "курсора";
Backspace - стирание последнего символа в строке, если там вообще есть символы;
Enter - считывание набранного числа и запись его в верхний регистр с одновременным сдвигом всего стека вниз с последующим обновлением отображения списка регистров;
+-/* - считывание набранного числа и выполнение арифметической операции между двумя верхними регистрами с последующим обновлением отображения списка регистров;
Esc - принудительное обновление отображения списка регистров, набранные символы в верхней строчке, естественно, пропадают.

Это весь калькулятор. Для удобства чтения верхняя строчка выводится на белом фоне, остальные - на сером.

Вопрос: какие функции API для этого понадобятся? Список длинный, а мне почти 50 лет, учиться на программиста, чтобы написать одну-единственную программу, влом. Нужно считывать допустимые символы с клавиатуры, выводить их на экран, а также выводить на экран содержимое регистров. Больше, вроде бы, ничего.

Re: Первая (и последняя) программа для Windows

Добавлено: 03.03.2015 07:59
anonim587
RPN - RPN ist die Abkürzung für: Reverse Polish Notation ?

Re: Первая (и последняя) программа для Windows

Добавлено: 03.03.2015 08:08
Еврей
anonim587 писал(а):RPN - RPN ist die Abkürzung für: Reverse Polish Notation ?
Да, конечно. Забыл подробно написать, сорри.

Re: Первая (и последняя) программа для Windows

Добавлено: 03.03.2015 09:23
anonim587
Free 15C RPN Scientific Calculator

http://hp15c.com/

Windows zip file of executables only (no installer) (6 MB)

Или тебе еще и исходники нужны? Считай что кнопочки это просто картинка да будет тебе счастье.

Re: Первая (и последняя) программа для Windows

Добавлено: 07.03.2015 23:33
Еврей
А почему компилятор ругается вот здесь?

Код: Выделить всё

Dim Value1 As Double
Dim Value2 As Double
...
Select Case e.KeyChar
Case vbCr
Value2 = TextBox1.Text : TextBox1.Text = ""
Case "+"
Value1 = TextBox1.Text : Value1 = Value2 + Value1 : TextBox1.Text = Value1 : e.Handled = True
Говорит, "Ungültige Konvertierung von der Zeichenfolge in Typ Double." В текстовом поле задаётся обыкновенное число вроде 45 или 12,34. Почему он конвертировать-то не может?

Re: Первая (и последняя) программа для Windows

Добавлено: 09.03.2015 16:38
швейцар001
try 12.34

Re: Первая (и последняя) программа для Windows

Добавлено: 11.03.2015 16:34
Еврей
швейцар001 писал(а):try 12.34
Ура, заработало! Спасибо. :D

Теперь такой вопрос. Вот сам код калькулятора.

Код: Выделить всё

Public Class Form1
    Public Value1 As Double
    Public Value2 As Double
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not Char.IsDigit(e.KeyChar) And (e.KeyChar <> "," Or InStr(TextBox1.Text, ",") <> 0) And e.KeyChar <> vbBack And e.KeyChar <> vbCr And e.KeyChar <> "/" And e.KeyChar <> "+" And e.KeyChar <> "*" And e.KeyChar <> "-" Then e.Handled = True
        Select Case e.KeyChar
            Case vbCr
                TextBox1.Text = Val(Replace(CStr(TextBox1.Text), ",", ".")) : Value2 = TextBox1.Text : TextBox2.Text = Value2 : TextBox1.Text = ""
            Case "+"
                TextBox1.Text = Val(Replace(CStr(TextBox1.Text), ",", ".")) : Value1 = TextBox1.Text : Value1 = Value2 + Value1 : Value2 = Value1 : TextBox1.Text = "" : TextBox2.Text = Value2 : e.Handled = True
            Case "-"
                TextBox1.Text = Val(Replace(CStr(TextBox1.Text), ",", ".")) : Value1 = TextBox1.Text : Value1 = Value2 - Value1 : Value2 = Value1 : TextBox1.Text = "" : TextBox2.Text = Value2 : e.Handled = True
            Case "*"
                TextBox1.Text = Val(Replace(CStr(TextBox1.Text), ",", ".")) : Value1 = TextBox1.Text : Value1 = Value2 * Value1 : Value2 = Value1 : TextBox1.Text = "" : TextBox2.Text = Value2 : e.Handled = True
            Case "/"
                TextBox1.Text = Val(Replace(CStr(TextBox1.Text), ",", ".")) : Value1 = TextBox1.Text : Value1 = Value2 / Value1 : Value2 = Value1 : TextBox1.Text = "" : TextBox2.Text = Value2 : e.Handled = True
        End Select
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub
End Class
Есть ли в VB оператор, который позволил бы подсократить запись проверки введённой строки на кошерность? Ведь

Код: Выделить всё

If Not Char.IsDigit(e.KeyChar) And (e.KeyChar <> "," Or InStr(TextBox1.Text, ",") <> 0) And e.KeyChar <> vbBack And e.KeyChar <> vbCr And e.KeyChar <> "/" And e.KeyChar <> "+" And e.KeyChar <> "*" And e.KeyChar <> "-" Then e.Handled = True
ни что иное, как проверка на принадлежность символа к списку допустимых клавиш Backspace, +, -, / и *. Больно уж длинной формулировка получилась. А у меня проблемы со словарным запасом всех языков программирования, кроме ассемблера.

Re: Первая (и последняя) программа для Windows

Добавлено: 12.03.2015 10:04
vik
Может так?

Код: Выделить всё

Dim s() As Char = {",", "/", "*", "+", "-", vbBack, vbCr}
If s.Contains(E.KeyChar) OrElse Char.IsDigit(e.KeyChar) Then

End If


Re: Первая (и последняя) программа для Windows

Добавлено: 12.03.2015 10:27
швейцар001
если чего-то сложное надо, то пользуйся регексом, он в .нете ничем не отличается от версии перла (http://www.dotnetperls.com/regex-match-vbnet), если лень копаться с заумныими вещами, то я бы оставил как есть, если оно работает

Re: Первая (и последняя) программа для Windows

Добавлено: 12.03.2015 17:20
Еврей
"Вот оно чо, Михалыч!" :-) Огромное спасибо!
Видимо, придётся ещё какую-нибудь программу слепить, потому что .NET-компилятор вместе c IDE занял на диске полтора десятка гигабайт! Столько всякой фигни установилось, которую я и не просил. Какие то tools, SDK... Это ж в жисть никогда не удалится по собственной воле, только вместе со всей виндой. Жалко, если пропадать будет.