Помогите написать калькулятор
Участников: 3
Страница 1 из 1
Помогите написать калькулятор
никак не пойму как написать кнопочный калькулятор...
кнопки получается создавать, а чтобы делался вывод числа в нужном месте не получается, пожалуйста покажите пример такого калькулятора=) за ранее спасибо!=)
кнопки получается создавать, а чтобы делался вывод числа в нужном месте не получается, пожалуйста покажите пример такого калькулятора=) за ранее спасибо!=)
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
500rublei пишет:никак не пойму как написать кнопочный калькулятор...
кнопки получается создавать, а чтобы делался вывод числа в нужном месте не получается, пожалуйста покажите пример такого калькулятора=) за ранее спасибо!=)
На самом деле все несложно, просто разбей свою задачу на несколько маленьких:
1) Создать окно
2) Создать дочерние окна на основе классов Button и Edit
3) В обработчике события WM_COMMAND при нажатии кнопок получай из нее текст при помощи GetWindowText и вводи его в EDIT при помощи SetWindowText и\или SendMessage c сообщением EM_REPLACESEL. Так же имей хотя бы две переменные для математических действий, с ними будешь проводить операции после нажатия кнопки равно
Конечно написал суховато и образно, но для начала попробуй это реализовать.
Если же нужно готовый пример,то на http://www.freebasic.net/forum/ где-то видел даже не один пример.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Помогите написать калькулятор
хорошо, спасибо, попробую!=)
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
Блин, ничего не получается, можешь прислать хоть какой-нибудь исходничек?
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
Если не получается написать программу по умному, то можно сделать на конструкции типа "If Then".500rublei пишет:Блин, ничего не получается, можешь прислать хоть какой-нибудь исходничек?
Я бы примерно так и сделал
workman- Сообщения : 25
Дата регистрации : 2010-12-03
Re: Помогите написать калькулятор
я вот пробовал так сделать, у меня кнопочками были картинки, которые находятся в определённых координатах, и когда я подвожу мышку в эти координаты и нажимаю левую кнопку мыши, он должен выводить мне, тоже нарисованное, число и записывать в переменную ту цыфру, которую нажал... но у меня не получается вот эти выводные картинки выводить по очереди, каждый раз через 30 пикселей.... ну вот я сейчас скину код, который получился...
- Код:
screen 17,32
DIM garray(921604) AS BYTE
BLOAD "img/1.bmp", @garray(1)
PUT (0,150),garray(1)
BLOAD "img/2.bmp", @garray(0)
PUT (30,150),garray(0)
BLOAD "img/3.bmp", @garray(3)
PUT (60,150),garray(3)
BLOAD "img/4.bmp", @garray(4)
PUT (0,180),garray(4)
BLOAD "img/5.bmp", @garray(5)
PUT (30,180),garray(5)
BLOAD "img/6.bmp", @garray(6)
PUT (60,180),garray(6)
BLOAD "img/7.bmp", @garray(7)
PUT (0,210),garray(7)
BLOAD "img/8.bmp", @garray(8)
PUT (30,210),garray(8)
BLOAD "img/9.bmp", @garray(9)
PUT (60,210),garray(9)
BLOAD "img/0.bmp", @garray(0)
PUT (30,240),garray(0)
BLOAD "img/delenie.bmp", @garray(10)
PUT (90,150),garray(10)
BLOAD "img/umnog.bmp", @garray(11)
PUT (90,180),garray(11)
BLOAD "img/minus.bmp", @garray(12)
PUT (90,210),garray(12)
BLOAD "img/plus.bmp", @garray(13)
PUT (90,240),garray(13)
BLOAD "img/p.bmp", @garray(13)
PUT (0,240),garray(13)
BLOAD "img/p.bmp", @garray(13)
PUT (60,240),garray(13)
DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, a AS Integer, q AS Integer, s AS Integer
Do
GETMOUSE x, y,, buttons
If y<180 And y>150 and x>0 and x<30 And buttons=1 Then
BLOAD "img/vir/1.bmp", @garray(13)
PUT (0,0),garray(13)
a=1
Else
If x<60 And x>30 and y>150 and y<180 And buttons=1 Then
BLOAD "img/2.bmp", @garray(13)
PUT (120,0),garray(13)
a=2
Else
If x<90 And x>60 and y>150 and y<180 And buttons=1 Then
BLOAD "img/3.bmp", @garray(13)
PUT (120,0),garray(13)
a=3
Else
If x<30 And x>0 and y>180 and y<210 And buttons=1 Then
BLOAD "img/4.bmp", @garray(13)
PUT (120,0),garray(13)
a=4
Else
If x<60 And x>30 and y>180 and y<210 And buttons=1 Then
BLOAD "img/5.bmp", @garray(13)
PUT (120,0),garray(13)
a=5
Else
If x<90 And x>60 and y>180 and y<210 And buttons=1 Then
BLOAD "img/6.bmp", @garray(13)
PUT (120,0),garray(13)
a=6
Else
If x<120 And x>90 and y>180 and y<210 And buttons=1 Then
BLOAD "img/umnog.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<30 And x>0 and y>210 and y<240 And buttons=1 Then
BLOAD "img/7.bmp", @garray(13)
PUT (120,0),garray(13)
a=7
Else
If x<60 And x>30 and y>210 and y<240 And buttons=1 Then
BLOAD "img/8.bmp", @garray(13)
PUT (120,0),garray(13)
a=8
Else
If x<90 And x>60 and y>210 and y<240 And buttons=1 Then
BLOAD "img/9.bmp", @garray(13)
PUT (120,0),garray(13)
a=9
Else
If x<120 And x>90 and y>210 and y<240 And buttons=1 Then
BLOAD "img/minus.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<60 And x>30 and y>240 and y<270 And buttons=1 Then
BLOAD "img/0.bmp", @garray(13)
PUT (120,0),garray(13)
a=0
Else
If x<120 And x>90 and y>240 and y<270 And buttons=1 Then
BLOAD "img/plus.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<120 And x>90 and y>150 and y<180 And buttons=1 Then
BLOAD "img/delenie.bmp", @garray(13)
PUT (120,0),garray(13)
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End If
Loop WHILE INKEY$ = ""
End
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
500rublei пишет:я вот пробовал так сделать, у меня кнопочками были картинки, которые находятся в определённых координатах, и когда я подвожу мышку в эти координаты и нажимаю левую кнопку мыши, он должен выводить мне, тоже нарисованное, число и записывать в переменную ту цыфру, которую нажал... но у меня не получается вот эти выводные картинки выводить по очереди, каждый раз через 30 пикселей.... ну вот я сейчас скину код, который получился...
- Код:
screen 17,32
DIM garray(921604) AS BYTE
BLOAD "img/1.bmp", @garray(1)
PUT (0,150),garray(1)
BLOAD "img/2.bmp", @garray(0)
PUT (30,150),garray(0)
BLOAD "img/3.bmp", @garray(3)
PUT (60,150),garray(3)
BLOAD "img/4.bmp", @garray(4)
PUT (0,180),garray(4)
BLOAD "img/5.bmp", @garray(5)
PUT (30,180),garray(5)
BLOAD "img/6.bmp", @garray(6)
PUT (60,180),garray(6)
BLOAD "img/7.bmp", @garray(7)
PUT (0,210),garray(7)
BLOAD "img/8.bmp", @garray(8)
PUT (30,210),garray(8)
BLOAD "img/9.bmp", @garray(9)
PUT (60,210),garray(9)
BLOAD "img/0.bmp", @garray(0)
PUT (30,240),garray(0)
BLOAD "img/delenie.bmp", @garray(10)
PUT (90,150),garray(10)
BLOAD "img/umnog.bmp", @garray(11)
PUT (90,180),garray(11)
BLOAD "img/minus.bmp", @garray(12)
PUT (90,210),garray(12)
BLOAD "img/plus.bmp", @garray(13)
PUT (90,240),garray(13)
BLOAD "img/p.bmp", @garray(13)
PUT (0,240),garray(13)
BLOAD "img/p.bmp", @garray(13)
PUT (60,240),garray(13)
DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, a AS Integer, q AS Integer, s AS Integer
Do
GETMOUSE x, y,, buttons
If y<180 And y>150 and x>0 and x<30 And buttons=1 Then
BLOAD "img/vir/1.bmp", @garray(13)
PUT (0,0),garray(13)
a=1
Else
If x<60 And x>30 and y>150 and y<180 And buttons=1 Then
BLOAD "img/2.bmp", @garray(13)
PUT (120,0),garray(13)
a=2
Else
If x<90 And x>60 and y>150 and y<180 And buttons=1 Then
BLOAD "img/3.bmp", @garray(13)
PUT (120,0),garray(13)
a=3
Else
If x<30 And x>0 and y>180 and y<210 And buttons=1 Then
BLOAD "img/4.bmp", @garray(13)
PUT (120,0),garray(13)
a=4
Else
If x<60 And x>30 and y>180 and y<210 And buttons=1 Then
BLOAD "img/5.bmp", @garray(13)
PUT (120,0),garray(13)
a=5
Else
If x<90 And x>60 and y>180 and y<210 And buttons=1 Then
BLOAD "img/6.bmp", @garray(13)
PUT (120,0),garray(13)
a=6
Else
If x<120 And x>90 and y>180 and y<210 And buttons=1 Then
BLOAD "img/umnog.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<30 And x>0 and y>210 and y<240 And buttons=1 Then
BLOAD "img/7.bmp", @garray(13)
PUT (120,0),garray(13)
a=7
Else
If x<60 And x>30 and y>210 and y<240 And buttons=1 Then
BLOAD "img/8.bmp", @garray(13)
PUT (120,0),garray(13)
a=8
Else
If x<90 And x>60 and y>210 and y<240 And buttons=1 Then
BLOAD "img/9.bmp", @garray(13)
PUT (120,0),garray(13)
a=9
Else
If x<120 And x>90 and y>210 and y<240 And buttons=1 Then
BLOAD "img/minus.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<60 And x>30 and y>240 and y<270 And buttons=1 Then
BLOAD "img/0.bmp", @garray(13)
PUT (120,0),garray(13)
a=0
Else
If x<120 And x>90 and y>240 and y<270 And buttons=1 Then
BLOAD "img/plus.bmp", @garray(13)
PUT (120,0),garray(13)
Else
If x<120 And x>90 and y>150 and y<180 And buttons=1 Then
BLOAD "img/delenie.bmp", @garray(13)
PUT (120,0),garray(13)
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End if
End If
Loop WHILE INKEY$ = ""
End
Во блин, я думал тебе нужно создать Gui приложение: типа стандартного Windows калькулятора, а ты все в графике решил сделать
Тут я тебе помочь не могу,графические команды Freebasic я не разбирал.
P.S. Все таки небольшой совет: когда даешь код для рассмотрения, нужны и включаемые файлы(картинки), тем более, что у тебя их немало.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Помогите написать калькулятор
Спасибо за совет, в следующий раз буду делать всё в архиве и закидывать сюда!=)
Мне не обязательно графическим его сделать, просто так получается, а с кнопками никак не получается=(
лучше бы хотелось с кнопками, но никак =(
Мне не обязательно графическим его сделать, просто так получается, а с кнопками никак не получается=(
лучше бы хотелось с кнопками, но никак =(
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
500rublei пишет:Спасибо за совет, в следующий раз буду делать всё в архиве и закидывать сюда!=)
Мне не обязательно графическим его сделать, просто так получается, а с кнопками никак не получается=(
лучше бы хотелось с кнопками, но никак =(
Почему же никак? Не хватает пока знаний API ? Возьми мою библиотеку и делай что вздумается:
https://freebasic.forum2x2.ru/t374-topic
Справка вся на русском, да и я часто здесь околачиваюсь
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Помогите написать калькулятор
Хорошо, спасибо!=)
Сейчас посмотрю на плоды твоего труда!=)
Может и разберусь!=)
ещё раз спасибо!
Сейчас посмотрю на плоды твоего труда!=)
Может и разберусь!=)
ещё раз спасибо!
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
а в Windows разве есть такая "window9.bi" библиотека? или её скачать надо с твоего сайта?
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
500rublei пишет:а в Windows разве есть такая "window9.bi" библиотека? или её скачать надо с твоего сайта?
Конечно в windows нет такой библиотеки, а иначе что я тогда писал?
Скачиваешь по этой ссылке: http://www.mneniya.ucoz.ru/FREEBASIC/Public/LIBFB.zip закидываешь в папки \FreeBASIC\inc и \FreeBASIC\lib и пользуешься.
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Re: Помогите написать калькулятор
а не подскажешь ещё как там кнопочки с выводом сделать, а то не могу найти никак=(
ну хоть какие функции в справке смотреть...
ну хоть какие функции в справке смотреть...
500rublei- Сообщения : 8
Дата регистрации : 2011-04-09
Re: Помогите написать калькулятор
500rublei пишет:а не подскажешь ещё как там кнопочки с выводом сделать, а то не могу найти никак=(
ну хоть какие функции в справке смотреть...
Вкладка Gadget:
ButtonGadget - кнопка
TextGadget - текстовое поле
и т д
Вот тут вспомнил, что один из моих приятелей в прошлом на начальном этапе программирования писал калькулятор. По быстрому адаптировал под свою библиотеку одну из его ранних версий. Версия с ошибками в расчетах и не только... Поздние его версии конечно работают правильно, но там коду слишком много, лень переписывать. Но тебе для примера подойдет и эта, а дальше совершенствуй.
- Код:
#Include "window9.bi"
Enum
String_
Backs
CE
C
But_7
But_8
But_9
But_4
But_5
But_6
But_1
But_2
But_3
But_0
znak
drob
delen
umnoj
minus
plus
sqrt
pros
fff
rezul
MC
MR
MS
M_plus
End Enum
Dim Shared As double rez3
Sub Pros0() ';процедура убирает лишние нули
Var sdf= Str(rez3)
For n As Integer=1 To Len(Str(rez3))
Var df = Left(sdf, n)
Var fff= Right(df, 1)
If fff <> "0" Then
SetGadgetText(String_, df)
EndIf
Next
End Sub
';{------------------Окно--------------------------------
Var hwnd=OpenWindow ("Калькулятор", 0, 0, 275, 280)
WindowColor(hwnd,&hffffff): CenterWindow(hwnd)
StringGadget(String_, 10, 15, 245, 25, "")
ButtonGadget(Backs, 55, 50, 70, 30, "Backspace")
ButtonGadget(CE, 130, 50, 60, 30, "CE")
ButtonGadget(C, 195, 50, 60, 30, "C")
ButtonGadget(But_7, 55, 90, 35, 30, "7")
ButtonGadget(But_8, 95, 90, 35, 30, "8")
ButtonGadget(But_9, 135, 90, 35, 30, "9")
ButtonGadget(But_4, 55, 125, 35, 30, "4")
ButtonGadget(But_5, 95, 125, 35, 30, "5")
ButtonGadget(But_6, 135, 125, 35, 30, "6")
ButtonGadget(But_1, 55, 160, 35, 30, "1")
ButtonGadget(But_2, 95, 160, 35, 30, "2")
ButtonGadget(But_3, 135, 160, 35, 30, "3")
ButtonGadget(But_0, 55, 195, 35, 30, "0")
ButtonGadget(znak, 95, 195, 35, 30, "+/-")
ButtonGadget(drob, 135, 195, 35, 30, ".")
ButtonGadget(delen, 180, 90, 35, 30, "/")
ButtonGadget(umnoj, 180, 125, 35, 30, "*")
ButtonGadget(minus, 180, 160, 35, 30, "-")
ButtonGadget(plus, 180, 195, 35, 30, "+")
ButtonGadget(sqrt, 220, 90, 35, 30, "sqrt")
ButtonGadget(pros, 220, 125, 35, 30, "%")
ButtonGadget(fff, 220, 160, 35, 30, "1/x")
ButtonGadget(rezul,220, 195, 35, 30, "=")
ButtonGadget(MC, 10, 90, 35, 30, "MC")
ButtonGadget(MR, 10, 125, 35, 30, "MR")
ButtonGadget(MS, 10, 160, 35, 30, "MS")
ButtonGadget(M_plus,10, 195, 35, 30, "M+")
';}------------------------------------------------------
Dim As Double rez1
Dim As String rez0,znak = "0"
';{----------------- Главный цикл -------------------------
Do
Var Event = WaitEvent()
Select Case Event
Case EventGadget
Select Case EventNumber
Case But_0,But_1,But_2,But_3,But_4,But_5,But_6,But_7,But_8,But_9,drob
If znak = "+" Or znak = "-" Or znak = "*" Or znak = "/" Or znak = "0" Then
rez0 = GetGadgetText(String_)
SetGadgetText(String_, rez0+GetGadgetText(EventNumber))
ElseIf znak = "=" Then
SetGadgetText(String_, "")
rez0= GetGadgetText(String_)
SetGadgetText(String_, rez0+GetGadgetText(EventNumber))
znak = "0"
EndIf
Case C
SetGadgetText(String_, "")
rez1 =0
Case plus, minus, umnoj, delen
rez1= Val(GetGadgetText(String_))
SetGadgetText(String_, GetGadgetText(EventNumber))
znak = GetGadgetText(EventNumber)
Case rezul
If znak = "+" Or znak = "-" Then
rez3 = rez1 + Val(GetGadgetText(String_))
Pros0()
';SetGadgetText(String_, StrD(rez3))
ElseIf znak = "*" Then
rez3 = rez1* Val(Mid(GetGadgetText(String_),2))
Pros0()
';SetGadgetText(String_, StrD(rez3))
ElseIf znak = "/" then
rez3 = rez1/ Val(Mid(GetGadgetText(String_),2))
Pros0()
';SetGadgetText(String_, StrD(rez4))
EndIf
znak = "="
End Select
End Select
If Event = EventClose Then End
Loop
trew- Сообщения : 331
Дата регистрации : 2010-10-14
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|