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

Moderator: Little Muk

Post Reply
User avatar
Еврей
Posts: 509
Joined: 23 Sep 2011, 17:34
ник с it-ru.de: верифицирован

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

Post by Еврей »

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

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

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

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

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

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

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

Post by anonim587 »

RPN - RPN ist die Abkürzung für: Reverse Polish Notation ?
Если народ, который 20 лет назад мечтал о свободе, сегодня выбирает рабство...
https://novayagazeta.ru/articles/2013/0 ... volyutsiya
Россия как "Скотный двор"
еврей Михаил Веллер - Великий последний шанс
User avatar
Еврей
Posts: 509
Joined: 23 Sep 2011, 17:34
ник с it-ru.de: верифицирован

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

Post by Еврей »

anonim587 wrote:RPN - RPN ist die Abkürzung für: Reverse Polish Notation ?
Да, конечно. Забыл подробно написать, сорри.
anonim587
Posts: 7883
Joined: 07 Jun 2014, 19:52

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

Post by anonim587 »

Free 15C RPN Scientific Calculator

http://hp15c.com/

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

Или тебе еще и исходники нужны? Считай что кнопочки это просто картинка да будет тебе счастье.
Если народ, который 20 лет назад мечтал о свободе, сегодня выбирает рабство...
https://novayagazeta.ru/articles/2013/0 ... volyutsiya
Россия как "Скотный двор"
еврей Михаил Веллер - Великий последний шанс
User avatar
Еврей
Posts: 509
Joined: 23 Sep 2011, 17:34
ник с it-ru.de: верифицирован

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

Post by Еврей »

А почему компилятор ругается вот здесь?

Code: Select all

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. Почему он конвертировать-то не может?
User avatar
Еврей
Posts: 509
Joined: 23 Sep 2011, 17:34
ник с it-ru.de: верифицирован

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

Post by Еврей »

швейцар001 wrote:try 12.34
Ура, заработало! Спасибо. :D

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

Code: Select all

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 оператор, который позволил бы подсократить запись проверки введённой строки на кошерность? Ведь

Code: Select all

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, +, -, / и *. Больно уж длинной формулировка получилась. А у меня проблемы со словарным запасом всех языков программирования, кроме ассемблера.
vik
Posts: 174
Joined: 22 Sep 2011, 18:58

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

Post by vik »

Может так?

Code: Select all

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

End If

User avatar
швейцар001
Posts: 7951
Joined: 07 Jul 2013, 21:31

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

Post by швейцар001 »

если чего-то сложное надо, то пользуйся регексом, он в .нете ничем не отличается от версии перла (http://www.dotnetperls.com/regex-match-vbnet), если лень копаться с заумныими вещами, то я бы оставил как есть, если оно работает
User avatar
Еврей
Posts: 509
Joined: 23 Sep 2011, 17:34
ник с it-ru.de: верифицирован

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

Post by Еврей »

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