Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1: 2016-10-15 11:06:55 ЛС | профиль | цитата
В программах для работы с БД (DBF, DBASE, FOX, CLIPPER, FOXPRO) была функция
IIF(условие, результат при TRUE, результат при FALSE)
Если http://forum.hiasm.com/getfile/37876 разархивировать в Elements\Delphi\code, то появится возможность использования этой функции.
Пример подключаемой функции SQLite

Add(InlineCode,14378720,287,294)
{
@Hint=#15:Функция SumProp|
WorkPoints=#11:addFunction|
DataPoints=#8:dbHandle|
Code=#15:unit HiAsmUnit;|24:// Author Tad 15.10.2016|37:// Данные ограничены значением MAXINT|0:|0:|9:interface|0:|60:uses kol,Share,Debug,Windows,SQLite3Api,hiSQLite_DB, myFunc;|0:|4:type|28: THiAsmClass = class(TDebug)|9: public|22: dbHandle:THI_Event;|52: procedure addFunction(var _Data:TData; idx:word);|5: end;|0:|14:implementation|0:|65:procedure myFunc(ctx:pointer; nArg:integer; args:ppvalue); cdecl;|16:var Res:String; |7: begin |51: Res := NumToWordBux(sqlite3_value_double(args^));|67: sqlite3_result_text(ctx,PChar(Res),Length(Res),SQLITE_TRANSIENT);|4:end;|0:|34:procedure THiAsmClass.addFunction;|13:var dt:TData;|5:begin|37: dt := ReadData(_Data,dbHandle,nil);|36: if _IsObject(dt,SQLite_GUID) then |92: sqlite3_create_function(ToObject(dt),PChar('SumProp'),1,SQLITE_ANY,nil,@myFunc,nil,nil);|4:end;|0:|4:end.|
AddHint(-114,-26,107,13,@Hint)
}
Пример IC для получения суммы прописью

Add(MainForm,2953706,112,280)
{
Width=916
Height=119
Point(onClose)
}
Add(Button,2195436,336,413)
{
Left=20
Top=20
Caption="123.20"
Data=String(999999999.99)
link(onClick,1447056:doWork,[])
}
Add(Edit,12989484,385,364)
{
Left=90
Top=20
Width=115
Text=""
}
Add(InlineCode,1447056,385,413)
{
WorkPoints=#6:doWork|
EventPoints=#5:onRes|
DataPoints=#3:Sum|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug, myFunc;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onRes, Sum :THI_Event;|49: procedure doWork(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doWork;|0:|14:var Ss:string;|5:BEGIN|56: _hi_onEvent(onRes,NumToWordBux(ReadReal(_Data, Sum)));|4:END;|4:end.|
link(onRes,16448703:doText,[])
link(Sum,12989484:Text,[])
}
Add(Edit,16448703,434,413)
{
Left=10
Top=45
Width=875
}


--- Добавлено в 2016-10-15 11:29:25

Для работы, например в Украине, замените

const  
sEd: array[0..19] of string[14] = ('', 'один ', 'два ', 'три ', 'чотири ', 'п`ять ', 'шість ', 'сім ', 'вісім ', 'дев`ять ', 'десять ', 'одинадцять ', 'дванадцять ', 'тринадцять ', 'чотирнадцять ', 'п`ятнадцять ', 'шістнадцять ', 'сімнадцять ', 'вісімнадцять ', 'дев`ятнадцять ');
sEd1: array[1..2] of string[5] = ('одна ','дві ');
sDes: array[0..9] of string[12] = ('', '','двадцять ', 'тридцять ', 'сорок ', 'п`ятдесят ', 'шістдесят ', 'сімдесят ', 'вісімдесят ', 'дев`яносто ');
sSot: array[0..9] of string[10] = ('','сто ', 'двісті ', 'триста ', 'чотириста ', 'п`ятсот ', 'шістсот ', 'сімсот ', 'вісімсот ', 'дев`ятсот ');
sRub: array[0..4,0..2] of String[11] = (('гривень ', 'гривня ', 'гривні '),('тисяч ','тисяча ','тисячі '),
('мільйонiв ', 'мільйон ', 'мільйони '),('мільярдiв ', 'мільярд ', 'мільярди '),('копiйок.', 'копiйка.', 'копiйки.'));
Хотя, наверное придётся подкорректировать и функцию, так как "гривня" женского рода.

Редактировалось 10 раз(а), последний 2016-10-15 12:49:51
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
2
Голосовали:miver, sashaoli
Ответов: 16884
Рейтинг: 1239
#2: 2016-10-15 12:43:06 ЛС | профиль | цитата
Перезалил. Неправильно склоняло слово "копейки"
http://forum.hiasm.com/getfile/37876

Редактировалось 3 раз(а), последний 2016-10-15 12:51:07
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1myFunc.rar [1.2KB] [540]
Ответов: 952
Рейтинг: 4
#3: 2016-10-19 23:09:50 ЛС | профиль | цитата
del

Редактировалось 1 раз(а), последний 2016-10-19 23:11:30
карма: 0

0
Ответов: 952
Рейтинг: 4
#4: 2017-03-01 08:34:34 ЛС | профиль | цитата
Схема работает при условии, что разделителем стоит точка.
В то же время многие используют цифровую клавиатуру, и там по умолчанию в русской раскладке запятая.
В принципе можно встроить фильтр\замену вводимых символов в Эдит, и решить эту проблему.
П.С. Я про Пример IC для получения суммы прописью

Редактировалось 1 раз(а), последний 2017-03-01 08:35:22
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#5: 2017-03-08 11:46:58 ЛС | профиль | цитата
И в чем проблема ?

Add(MainForm,12903465,385,133)
{
Width=916
Height=119
Point(onClose)
}
Add(Button,2195436,385,231)
{
Left=20
Top=20
Caption="123.20"
Data=String(999999999.99)
link(onClick,1447056:doWork,[])
}
Add(Edit,12989484,483,133)
{
Left=90
Top=20
Width=115
Text=""
}
Add(InlineCode,1447056,434,231)
{
WorkPoints=#6:doWork|
EventPoints=#5:onRes|
DataPoints=#3:Sum|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug, myFunc;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|25: onRes, Sum :THI_Event;|49: procedure doWork(var _Data:TData; Index:Word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doWork;|0:|14:var Ss:string;|5:BEGIN|56: _hi_onEvent(onRes,NumToWordBux(ReadReal(_Data, Sum)));|4:END;|4:end.|
link(onRes,16448703:doText,[])
link(Sum,7666022:GetData,[])
}
Add(Edit,16448703,483,231)
{
Left=10
Top=45
Width=875
}
Add(EventFromData,7666022,434,182)
{
link(onEvent,9301630:doReplace,[])
}
Add(Replace,9301630,483,182)
{
SubStr=","
DestStr="."
link(onReplace,7666022:doData,[(527,188)(527,176)(422,176)(422,188)])
link(Str,12989484:Text,[])
}

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)