Вверх ↑
Этот топик читают: Гость
Ответов: 2
Рейтинг: 0
#1: 2010-04-07 12:36:34 ЛС | профиль | цитата
Надо собрать калькулятор: несколько вкладок из TabControl а в каждой вкладке ComboBoxы со своими значениями. Еще не разобрался с компонентами (недавно установил программу) пока все работает, но не могу в одном ComboBoxе сделать обработку ошибок от неправильного выбора значений (больше 10 лет и 0 мес) т. к. некоторые значения пересекаются (6.4
6.5;6.6;6.7;6.8). Максимальное значение должно быть 6.85. Как это можно организовать? Вчера целый вечер пробовал - не получается. И не могу найти как округлить число в большую сторону, например: 6.3545783 в 6.36
code_17724.txt
карма: 0

0
файлы: 1code_17724.txt [6.3KB] [117]
Ответов: 4641
Рейтинг: 334
#2: 2010-04-07 13:00:55 ЛС | профиль | цитата
то что в мультиэлементе, заменяется на один StrList


pofigist писал(а):
округлить число

по округлению... используй round в Math или MathParse ну и примеры смотрим.
Если округление именно в пользу продавца.... то думаю nesco подскажет мат выражение (если захочет конечно)

pofigist писал(а):
больше 10 лет и 0 мес

при выборе цифры 10 т.е индекса 10 делай doEnable=False (т.е подать на точку, значение 0) на ComboBoxе с месецами.

Add(ComboBox,2124578,182,91)
{
Left=112
Top=21
Width=70
Height=21
Strings=#1:0|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|
ReadOnly=0
Point(Index)
link(onClick,14980487:doCase,[])
}
Add(ComboBox,9986576,322,56)
{
Left=112
Top=52
Width=70
Height=21
Strings=#1:0|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|2:11|
ReadOnly=0
Point(Index)
Point(doEnabled)
}
Add(Case,14980487,238,98)
{
Value=Integer(10)
DataOnTrue=Integer(0)
link(onNextCase,16105780:doWork2,[])
link(onTrue,16105780:doWork3,[(295,111)])
}
Add(HubEx,16105780,291,98)
{
link(onEvent,9986576:doEnabled,[])
}



и читаем справку. смотрим примеры. итд итп. пр.


карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2
Рейтинг: 0
#3: 2010-04-07 17:01:37 ЛС | профиль | цитата
Спасибо за совет, наверное так правильно?
code_17729.txt

Но с MathParse round все равно не разберусь с сотыми от числа
карма: 0

0
файлы: 1code_17729.txt [2KB] [118]
Ответов: 4641
Рейтинг: 334
#4: 2010-04-07 17:18:48 ЛС | профиль | цитата

Add(MainForm,2953706,49,119)
{
}
Add(Button,12216149,49,231)
{
Left=110
Top=95
link(onClick,15156402:doEvent1,[])
}
Add(ComboBox,2124578,175,91)
{
Left=112
Top=21
Width=70
Height=21
Strings=#1:0|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|
ReadOnly=0
Point(Index)
Point(onSetFocus)
Point(doSelect)
link(onClick,12817672:doCase,[])
}
Add(ComboBox,9986576,322,63)
{
Left=112
Top=52
Width=70
Height=21
Strings=#1:0|1:1|1:2|1:3|1:4|1:5|1:6|1:7|1:8|1:9|2:10|2:11|
ReadOnly=0
Point(Index)
Point(doEnabled)
Point(doSelect)
}
Add(Label,16035595,175,21)
{
Left=80
Top=20
Width=21
Height=17
Caption="год"
}
Add(Label,12344359,322,21)
{
Left=65
Top=50
Width=36
Height=17
Caption="месяц"
}
Add(Label,2640356,308,308)
{
Left=190
Top=95
}
Add(StrList,13277119,175,168)
{
Strings=#1:0|1:1|3:1.9|3:2.7|3:3.4|1:4|3:4.6|3:5.1|3:5.5|3:5.9|3:6.2|
Point(IdxToSelect)
Point(onGetIndex)
Point(doGetString)
Point(doGetIndex)
Point(Index)
Point(String)
Point(onGetString)
link(IdxToSelect,2124578:Index,[])
}
Add(StrList,9830868,322,168)
{
Strings=#1:0|3:0.2|3:0.3|3:0.4|3:0.5|3:0.6|3:0.7|4:0.75|3:0.8|4:0.85|3:0.9|4:0.95|
Point(IdxToSelect)
Point(doGetString)
Point(doGetIndex)
Point(Index)
Point(String)
link(IdxToSelect,9986576:Index,[])
}
Add(Case,12817672,217,98)
{
Value=Integer(10)
DataOnTrue=Integer(0)
link(onNextCase,14927399:doData,[])
link(onTrue,13366035:doWork2,[])
}
Add(Hub,15156402,112,231)
{
OutCount=3
link(onEvent1,13277119:doGetString,[(152,237)(152,216)])
link(onEvent2,9830868:doGetString,[(296,244)(296,216)])
link(onEvent3,3719357:doOperation,[(164,251)(164,314)])
}
Add(HubEx,13366035,307,105)
{
link(onEvent,9986576:doEnabled,[])
}
Add(Math,3719357,203,308)
{
link(onResult,8790019:doOperation,[])
link(Op1,13277119:String,[])
link(Op2,9830868:String,[(216,268)(356,268)])
}
Add(Math,8790019,252,308)
{
OpType=35
Op2=0.01
link(onResult,2640356:doText,[])
}
Add(DoData,14927399,259,98)
{
Data=Integer(1)
link(onEventData,13366035:doWork1,[(311,104)])
}


------------ Дoбавленo в 17.18:
строку по индексу, можно еще искать подавая на doGetString индекс строки в потоки.
про в потоки читаем Основы
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3851
Рейтинг: 159
#5: 2010-04-07 19:18:46 ЛС | профиль | цитата

[flood]
Ravilr писал(а):
Если округление именно в пользу продавца.... то думаю nesco подскажет мат выражение (если захочет конечно)

Если округление именно в пользу продавца, то тут любой подскажет мат выражение (скорее всего захочет) [/flood]
карма: 0
начавший
0
Ответов: 6
Рейтинг: 1
#6: 2010-04-16 19:36:46 ЛС | профиль | цитата
Доброе время суток начал изучение программы.
Созрел вопрос: как релизуются сложные математические формулы? например первое что в голову пришло : ((3+(edit1*3))^2)/edit2^2
я правильно понимаю что это выражение следует писать в ручную в исходнике?
карма: 0

0
Ответов: 3851
Рейтинг: 159
#7: 2010-04-16 19:43:14 ЛС | профиль | цитата

dej, посмотри MathParse в разделе логика ..
карма: 0
начавший
1
Голосовали:dej
Ответов: 6
Рейтинг: 1
#8: 2010-04-16 20:29:33 ЛС | профиль | цитата
Andrey, спасибо
карма: 0

1
Голосовали:Drelariel
Ответов: 3
Рейтинг: 5
#9: 2010-04-18 21:11:34 ЛС | профиль | цитата
Огромное спасибо !
карма: 0

0
Ответов: 6
Рейтинг: 1
#10: 2010-04-18 22:01:18 ЛС | профиль | цитата
не получается решить вот такую задачу:
существ. 3 поля edit, MathParse и кнопка.
edit1 и edit2 -ввод численных данных.(начальное значение =0 )
edit3 -вывод результата
MathParse - содержит в себе простенькую формулу: 2 + %1 + %2

проблема в том что при нажитии кнопки выводится результат 2 что не есть хорошо, как мне сделать проверку если в edit1 и edit2 имеет значение 0 чтоб и результат был 0

карма: 0

0
Разработчик
Ответов: 26358
Рейтинг: 2151
#11: 2010-04-18 22:21:17 ЛС | профиль | цитата
Напиши вот такую формулу -- (2 + %1 + %2) * abs(sign(%1 + %2))

карма: 23

2
Голосовали:dej, Drelariel
Ответов: 6
Рейтинг: 1
#12: 2010-04-18 22:25:33 ЛС | профиль | цитата
помогло, вот бы только расшифровку получить))ведь формула может быть посложнее,хочется понять
карма: 0

0
Ответов: 970
Рейтинг: 270
#13: 2010-04-18 22:32:11 ЛС | профиль | цитата
Выдели mathparse и нажми F1
карма: 0

1
Голосовали:dej
Разработчик
Ответов: 26358
Рейтинг: 2151
#14: 2010-04-18 22:32:59 ЛС | профиль | цитата
А че там понимать, все функции описаны в справке по F1 соответствующего компонента

abs(x) -- абсолютная величина числа
sign(x) -- знак числа, принимает соответственно значения -1,0,+1. Те, при отрицаетльном значении -- -1 (для чего и нужен abs), при 0 -- 0, а при положительном -- +1. Соответственно, формула дает +1 при всех значениях отличных от 0
карма: 23

1
Голосовали:dej
Ответов: 6
Рейтинг: 1
#15: 2010-04-18 22:40:51 ЛС | профиль | цитата
методом ТЫКА)) получилось еще интересней (2 + %1 + %2) * abs(sign(%1 * %2)) при умножении проверяются сразу оба поля, надеюсь ошибок из за этого не появится))
спасибо за помощь!!
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)