purebasic.info

PureBasic forum
Текущее время: Пн ноя 19, 2018 12:50 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Калькулятор
СообщениеДобавлено: Пн янв 14, 2008 1:56 pm 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
ГЫ :lol:

Сидел, и мысля пришла сделать простейший в мире калькулятор, который делает такие действия + - * /
Эм, пока не работает с дробными частями(

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
Enumeration
  #Window
 
  #B0
  #BT
  #B1
  #B2
  #B3
  #B4
  #B5
  #B6
  #B7
  #B8
  #B9
  #Ravno
  #Plus
  #Minus
  #Umnogt
  #Delenie
  #Editor
  #Back
  #Strings
  #BC
EndEnumeration
 
 
OpenWindow(#Window, 309, 222, 330, 200, "Калькулятор",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
CreateGadgetList(WindowID(#Window))
ButtonGadget(#BC, 100, 100, 30, 30, "C")
ButtonGadget(#B0, 10, 160, 60, 30, "0")
ButtonGadget(#BT, 70, 160, 30, 30, ".")
ButtonGadget(#B1, 10, 130, 30, 30, "1")
ButtonGadget(#B2, 40, 130, 30, 30, "2")
ButtonGadget(#B3, 70, 130, 30, 30, "3")
ButtonGadget(#B4, 10, 100, 30, 30, "4")
ButtonGadget(#B5, 40, 100, 30, 30, "5")
ButtonGadget(#B6, 70, 100, 30, 30, "6")
ButtonGadget(#B7, 10, 70, 30, 30, "7")
ButtonGadget(#B8, 40, 70, 30, 30, "8")
ButtonGadget(#B9, 70, 70, 30, 30, "9")
ButtonGadget(#Ravno, 100, 130, 30, 60, "=")
ButtonGadget(#Plus, 100, 70, 30, 30, "+")
ButtonGadget(#Minus, 100, 40, 30, 30, "-")
ButtonGadget(#Umnogt, 70, 40, 30, 30, "*")
ButtonGadget(#Delenie, 40, 40, 30, 30, "/")
EditorGadget(#Editor, 140, 40, 180, 150)
ButtonGadget(#Back, 10, 40, 30, 30, "<--")
StringGadget(#Strings, 10, 10, 310, 20, "")
 
 
Global value_1.s,value_2.s,result.f,k.l,dist.s
 
 
 
 
Repeat
event=WaitWindowEvent(100)
 
 
If event=#PB_Event_Gadget
Select EventGadget()
 
Case #bt
value_1.s+"."
Case #b0
value_1.s+"0"
Case #b1
value_1.s+"1"
Case #b2
value_1.s+"2"
Case #b3
value_1.s+"3"
Case #b4
value_1.s+"4"
Case #b5
value_1.s+"5"
Case #b6
value_1.s+"6"
Case #b7
value_1.s+"7"
Case #b8
value_1.s+"8"
Case #b9
value_1.s+"9"
 
Case #plus
If value_2=""
dist="+"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"+")
Else
dist="+"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=ValF(Value_1)+ValF(Value_2)
k+1
AddGadgetItem(#editor,k,Str(result))
Value_2=""
EndIf
Value_1=""
 
Case #minus
If value_2=""
dist="-"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"-")
Else
dist="-"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=Val(Value_2)-Val(Value_1)
k+1
AddGadgetItem(#editor,k,Str(result))
Value_2=""
EndIf
Value_1=""
 
Case #DELenie
If value_2=""
dist="/"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"/")
Else
dist="/"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=Val(Value_2)/Val(Value_1)
k+1
AddGadgetItem(#editor,k,Str(result))
Value_2=""
EndIf
Value_1=""
 
Case #Umnogt
If value_2=""
dist="*"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"*")
Else
dist="*"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=Val(Value_2)*|!REG3XP3!>Val(Value_1)
k+1
AddGadgetItem(#editor,k,Str(result))
Value_2=""
EndIf
Value_1=""
 
Case #ravno
If Value_2="" And Value_1=""
ClearGadgetItemList(#editor)
EndIf
If dist="+"
result=Val(Value_1)+Val(Value_2)
EndIf
If dist="-"
result=Val(Value_2)-Val(Value_1)
EndIf
If dist="/"
result=Val(Value_2)/Val(Value_1)
EndIf
If dist="*"
result=Val(Value_2)*|!REG3XP3!>Val(Value_1)
EndIf
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"----------------")
k+1
AddGadgetItem(#editor,k,StrF(result))
Value_2=""
Value_1=""
 
Case #BC
Value_2=""
Value_1=""
ClearGadgetItemList(#editor)
 
EndSelect
EndIf
 
 
 
 
SetGadgetText(#Strings,value_1.s)
 
If event=#PB_Event_CloseWindow
q=1
EndIf
 
Until q=1
End


_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 14, 2008 2:58 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Цитата:
Эм, пока не работает с дробными частями

Всё правильно ведь
Цитата:
Global value_1.s,value_2.s,result.f,k.l,dist.s

Цитата:
Val Str

а надо было result.d ValD StrD

Вот немноого переделал (по быстому, может чего и пропусил)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
Enumeration 
  #Window
 
  #B0
  #BT
  #B1
  #B2
  #B3
  #B4
  #B5
  #B6
  #B7
  #B8
  #B9
  #Ravno
  #Plus
  #Minus
  #Umnogt
  #Delenie
  #Editor
  #Back
  #Strings
  #BC
EndEnumeration
 
 
OpenWindow(#Window, 309, 222, 330, 200, "Калькулятор",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
CreateGadgetList(WindowID(#Window))
ButtonGadget(#BC, 100, 100, 30, 30, "C")
ButtonGadget(#B0, 10, 160, 60, 30, "0")
ButtonGadget(#BT, 70, 160, 30, 30, ".")
ButtonGadget(#B1, 10, 130, 30, 30, "1")
ButtonGadget(#B2, 40, 130, 30, 30, "2")
ButtonGadget(#B3, 70, 130, 30, 30, "3")
ButtonGadget(#B4, 10, 100, 30, 30, "4")
ButtonGadget(#B5, 40, 100, 30, 30, "5")
ButtonGadget(#B6, 70, 100, 30, 30, "6")
ButtonGadget(#B7, 10, 70, 30, 30, "7")
ButtonGadget(#B8, 40, 70, 30, 30, "8")
ButtonGadget(#B9, 70, 70, 30, 30, "9")
ButtonGadget(#Ravno, 100, 130, 30, 60, "=")
ButtonGadget(#Plus, 100, 70, 30, 30, "+")
ButtonGadget(#Minus, 100, 40, 30, 30, "-")
ButtonGadget(#Umnogt, 70, 40, 30, 30, "*")
ButtonGadget(#Delenie, 40, 40, 30, 30, "/")
EditorGadget(#Editor, 140, 40, 180, 150)
ButtonGadget(#Back, 10, 40, 30, 30, "<--")
StringGadget(#Strings, 10, 10, 310, 20, "")
 
 
Global value_1.s,value_2.s,result.d,k.l,dist.s
 
 
 
 
Repeat
event=WaitWindowEvent(100)
 
 
If event=#PB_Event_Gadget
Select EventGadget()
 
Case #bt
value_1.s+"."
Case #b0
value_1.s+"0"
Case #b1
value_1.s+"1"
Case #b2
value_1.s+"2"
Case #b3
value_1.s+"3"
Case #b4
value_1.s+"4"
Case #b5
value_1.s+"5"
Case #b6
value_1.s+"6"
Case #b7
value_1.s+"7"
Case #b8
value_1.s+"8"
Case #b9
value_1.s+"9"
 
Case #plus
If value_2=""
dist="+"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"+")
Else
dist="+"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=ValF(Value_1)+ValF(Value_2)
k+1
AddGadgetItem(#editor,k,StrD(result))
Value_2=""
EndIf
Value_1=""
 
Case #minus
If value_2=""
dist="-"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"-")
Else
dist="-"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=ValD(Value_2)-ValD(Value_1)
k+1
AddGadgetItem(#editor,k,Str(result))
Value_2=""
EndIf
Value_1=""
 
Case #DELenie
If value_2=""
dist="/"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"/")
Else
dist="/"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=ValD(Value_2)/ValD(Value_1)
k+1
AddGadgetItem(#editor,k,StrD(result))
Value_2=""
EndIf
Value_1=""
 
Case #Umnogt
If value_2=""
dist="*"
value_2=value_1
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"*")
Else
dist="*"
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"---------------")
result=ValD(Value_2)*|!REG3XP3!>ValD(Value_1)
k+1
AddGadgetItem(#editor,k,StrD(result))
Value_2=""
EndIf
Value_1=""
 
Case #ravno
If Value_2="" And Value_1=""
ClearGadgetItemList(#editor)
EndIf
If dist="+"
result=ValD(Value_1)+ValD(Value_2)
EndIf
If dist="-"
result=ValD(Value_2)-ValD(Value_1)
EndIf
If dist="/"
result=ValD(Value_2)/ValD(Value_1)
EndIf
If dist="*"
result=ValD(Value_2)*|!REG3XP3!>ValD(Value_1)
EndIf
k+1
AddGadgetItem(#editor,k,"  "+Value_1)
k+1
AddGadgetItem(#editor,k,"----------------")
k+1
AddGadgetItem(#editor,k,StrD(result))
Value_2=""
Value_1=""
 
Case #BC
Value_2=""
Value_1=""
ClearGadgetItemList(#editor)
 
EndSelect
EndIf
 
 
 
 
SetGadgetText(#Strings,value_1.s)
 
If event=#PB_Event_CloseWindow
q=1
EndIf
 
Until q=1
End


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 14, 2008 3:08 pm 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Гы, вроде всё правильно)

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 14, 2008 8:16 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6398
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
По моему WaitWindowEvent(100) - это лишнее. Да и процессор грузит. Лучше WaitWindowEvent(), и задержку в цикле Delay(10), хотя это тоже лишнее...Ну и ввод цифр с клавиатуры реализовать, а то как то однобоко получилось.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 14, 2008 8:31 pm 
Не в сети
BackupUser
Аватар пользователя

Зарегистрирован: Ср ноя 29, 2006 9:29 pm
Сообщений: 1492
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Что-то у меня валялось на тему калькулятора.
Пусть не в тему, но, всё-таки...
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
; *****************************************************************************
; Добавление кнопки "Pi" (число Пи) в стандартный калькулятор.  ***
; Со склада кода Fdisk-а, утянуто с англоГоворящего форума               ***
; *****************************************************************************
 
Global oldproc, quit=0, cebutton, clearbutton, one, two, three
Global four, five, six, seven, eight, nine, zero, point
 
Procedure ButtonProc(hwnd, msg, wParam, lParam)
Select msg
Case #WM_NCDESTROY
End
Case #WM_LBUTTONUP
SendMessage_(cebutton, #BM_CLICK, 0,0)
SendMessage_(three, #BM_CLICK, 0,0)
SendMessage_(point, #BM_CLICK, 0,0)
SendMessage_(one, #BM_CLICK, 0,0)
SendMessage_(four, #BM_CLICK, 0,0)
SendMessage_(one, #BM_CLICK, 0,0)
SendMessage_(five, #BM_CLICK, 0,0)
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)
EndProcedure
 
Procedure GetClearButtons(hwnd, param)
wt.s = Space(10)
GetWindowText_(hwnd, @wt, 10)
If wt = "C"
clearbutton = hwnd
ElseIf wt = "CE"
cebutton = hwnd
EndIf
ProcedureReturn 1
EndProcedure
 
Procedure GetNumbers(hwnd, param)
wt.s = Space(10)
GetWindowText_(hwnd, @wt, 10)
Select wt
Case "1" : one = hwnd
Case "2" : two = hwnd
Case "3" : three = hwnd
Case "4" : four = hwnd
Case "5" : five = hwnd
Case "6" : six = hwnd
Case "7" : seven = hwnd
Case "8" : eight = hwnd
Case "9" : nine = hwnd
Case "0" : zero = hwnd
Case "." : point = hwnd
EndSelect
ProcedureReturn 1
EndProcedure
 
RunProgram("calc.exe")
start = ElapsedMilliseconds()
Repeat
c = FindWindow_(0, "Калькулятор")
Delay(1)
Until c Or ElapsedMilliseconds()-start > 500
 
If c
EnumChildWindows_(c, @GetClearButtons(), 0)
EnumChildWindows_(c, @GetNumbers(), 0)
SetWindowPos_(clearbutton, 0,0,0,28,29,#SWP_NOZORDER|#SWP_NOMOVE|#SWP_FRAMECHANGED)
InitCommonControls_()
GetWindowRect_(c, @cr.RECT)
w = cr\right-cr\left
If w > 270 ; Scientific
button = CreateWindowEx_(0,"Button", "PI", #WS_CHILD|#WS_VISIBLE,432,62,28,29,c,0,GetModuleHandle_(0),0)
Else ; Standard
button = CreateWindowEx_(0,"Button", "PI", #WS_CHILD|#WS_VISIBLE,216,37,28,29,c,0,GetModuleHandle_(0),0)
EndIf
Else
MessageRequester("OOPS!", "Can't find the Calculator!", #MB_ICONINFORMATION)
End
EndIf
 
oldproc = SetWindowLong_(button, #GWL_WNDPROC, @ButtonProc())
 
While GetMessage_(@msg.MSG, #Null, #Null, #Null)
TranslateMessage_(msg)
DispatchMessage_(msg)
Delay(1)
Wend
 



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 2:57 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн ноя 27, 2006 2:43 pm
Сообщений: 933
Откуда: Санкт-Петербург
Благодарил (а): 1 раз.
Поблагодарили: 12 раз.
Пункты репутации: 15
У меня появилась идея сделать на форуме раздел OpenSource
а то программок много и некоторые могут "потеряться"
при "доведении до ума" программки из раздела форума перекочуют в соответствующий раздел сайта :idea:

как вам это?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 6:15 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6398
Благодарил (а): 21 раз.
Поблагодарили: 200 раз.
Пункты репутации: 52
Нормально будет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 8:14 am 
Не в сети
GameC@Soft
Аватар пользователя

Зарегистрирован: Сб сен 22, 2007 12:45 pm
Сообщений: 1084
Откуда: Я из лесу вышел, и сразу зашел, в босоножках дырявых и взлядом ночным.
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Хорошая идея) Нужный раздел)

_________________
"Самый большой глюк в PureBasic - это твоя голова...." (с) Артем
Мой сайт: http://feelzone.org.ua/


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 5:47 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11325
Благодарил (а): 4 раз.
Поблагодарили: 440 раз.
Цитата:
при "доведении до ума" программки из раздела форума перекочуют в соответствующий раздел сайта
Да, что то давно его не обновляли. Уже собралось приличное количество прог, которые можно там разместить.
За других ничего говорить не буду, а вот несколько моих прог которые можно там разместить:

Конвертер систем исчисления

Mail (проверка почтовиков на наличие новых писем)

NOD_Gen (копирует вирусные базы из NOD32)

Приоритет ("изменялка" приоритета у прграмм, которая по совместительству является "прибивалкой" процесов и "запускалкой" программ)

Индикатор заргузки процессора (показывает текущую загрузку в трее и на светодиодном индикаторе, подключаемом к COM порту)

PicAsmEditor (редактор ассемблерных файлов для PIC контроллеров)


И ещё много чего. :D

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB