Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Внизсумма прописью Найти похожие ветки
← →
nyron © (2006-04-25 17:09) [0]добрый день. помогите пожалуйста. мне нужно чтобы сумма из edit 1 была в edit 2 пописью. нашел ссылку где описывается как это сделать, но вот не могу разобрать как правильно сделать. если кто знает подскажите пожалуйста как правильно написать
← →
nyron © (2006-04-25 17:10) [1]ссылка http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619349&n=19
← →
EvS © (2006-04-25 18:09) [2]Чего подсказать-то?
← →
Dmitrij_K (2006-04-25 18:40) [3]acedutils.narod.ru
← →
nyron © (2006-04-25 23:44) [4]как использовать код ,который указан в ссылке, чтобы у меня из edit1 числа 123 в edit2 были прописью т.е. (сто двадцать три) или какой код можно использовать для этого. в общем как правильно так сделать???
← →
konrads (2006-04-26 09:32) [5]Скопируй функцию себе в программу вызови её покакому-нибудь событию (нпример Buttun1.Click) Edit2.Text := ConvertToWord(StrToInt(Edit1.Text));
Если нужно получить болше чем трёхзначное число воспользуйся этой функцией:
function TForm1.IntToTxt(Int: String): String;
// Функция превода положительных целых чисел без дробей любой величины в прописной формат.
const EDIN : array [0..12] of String[6] =
("","один","два","три","четыре","пять","шесть","семь","восемь","девять","десять" ,"одна","две");
OKON : array [1..2, 1..3] of String[2] = (("а","и",""),("","а","ов"));
DES : array [0..19] of String[20] = ("","десять","двадцать","тридцать",
"сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят", "девяносто",
"","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",
"шестнадцать","семнадцать","восемнадцать","девятнадцать");
SOT : array [0..9] of String[10] = ("","сто","двести","триста","четыреста",
"пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
var l,l1,l2,l3 : integer;
f : boolean;
s,s1 : string;
begin
if int[1] = "0" then begin
result := "Ноль";
// result := "Ноль рублей";
exit;
end;
f := true;
s := "";
l := length(Int);
{
if Int[length(Int)-1] = "1" then s1 := "рублей" else
case Int[length(Int)] of
"1" : s1 := "рубль";
"2".."4" : s1 := "рубля";
else s1 := "рублей";
end;
}
while l > 0 do begin
l := length(int);
l3 := l mod 3;
if l3 = 0 then l3 := 3;
case l3 of
1: if Int[1] <> "0" then f := true else f := false;
2: if copy(Int,1,2) <> "00" then f := true else f := false;
3: if copy(Int,1,3) <> "000" then f := true else f := false;
end;
while l3 > 0 do begin
l := length(Int);
l1 := l mod 3;
l2 := StrToInt(Int[1]);
if (l > 3) and (l < 7) and ((l2 = 1) or (l2 = 2)) and (l1 = 1) then l2 := l2 + 10;
if (l1 = 2) and (l2 = 1) and (Int[2] <> "0") then begin
l2 := 10 + StrToInt(Int[2]);
Int := copy(Int,2,length(Int) - 1);
dec(l3);
end;
case l1 of
0: s := s + SOT[l2];
1: s := s + EDIN[l2];
2: s := s + DES[l2];
end;
if (l2 > 9) and (l1 = 2) then l2 := 5;
if l2 > 9 then l2 := l2 - 10;
case l2 of
1 : l2 := 1;
2..4: l2 := 2;
else l2 := 3;
end;
Dec(l3);
Int := Copy(Int, 2, length(Int) - 1);
s := s + " ";
end;
s := s + " ";
if f then
// В этом CASE можно добавлять всякие квинтилионы до опупения
// но думаю врядли кому даже триллионы понадобятся
case l of
4..6: s := s + "тысяч" + OKON[1, l2];
7..9: s := s + "миллион" + OKON[2, l2];
10..12: s := s + "миллиард" + OKON[2, l2];
13..15: s := s + "триллион" + OKON[2, l2];
end;
s := s + " ";
l := length(int);
end;
result := s + s1;
{
// Это чтоб было красиво
// Уберём возможные двойные тройные пробелы между словами
l1 := Length(result); l := 1;
while l <> l1 do
if (result[l] = " ") and (result[l + 1] = " ") then begin
Delete(result, l, 1);
l1 := Length(result);
end else begin
Inc(l);
end;
}
{
// Первое слово с большой
if Length(result) > 0 then result[1] := chr(ord(result[1])-32);
}
end;
← →
konrads (2006-04-26 09:34) [6]Всё закоментированное можно убрать если ненужно
← →
konrads (2006-04-28 09:33) [7]Добавил мужской, женский и средний род
function TForm1.IntToTxt(Int: String; Rod: Integer): String;
// Функция превода положительных целых чисел без дробей любой величины в прописной формат.
// Параметр "Rod" = 1 - Мужской, 2 - женский, 3 - средний.
const EDIN : array [0..13] of String[6] =
("","один","два","три","четыре","пять","шесть","семь","восемь","девять","десять" ,"одна","две","одно");
OKON : array [1..2, 1..3] of String[2] = (("а","и",""),("","а","ов"));
DES : array [0..19] of String[20] = ("","десять","двадцать","тридцать",
"сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят", "девяносто",
"","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",
"шестнадцать","семнадцать","восемнадцать","девятнадцать");
SOT : array [0..9] of String[10] = ("","сто","двести","триста","четыреста",
"пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
var l,l1,l2,l3 : integer;
f : boolean;
s,s1 : string;
begin
if int[1] = "0" then begin
result := "Ноль";
// result := "Ноль рублей";
exit;
end;
f := true;
s := "";
l := length(Int);
{
if Int[length(Int)-1] = "1" then s1 := "рублей" else
case Int[length(Int)] of
"1" : s1 := "рубль";
"2".."4" : s1 := "рубля";
else s1 := "рублей";
end;
}
while l > 0 do begin
l := length(int);
l3 := l mod 3;
if l3 = 0 then l3 := 3;
case l3 of
1: if Int[1] <> "0" then f := true else f := false;
2: if copy(Int,1,2) <> "00" then f := true else f := false;
3: if copy(Int,1,3) <> "000" then f := true else f := false;
end;
while l3 > 0 do begin
l := length(Int);
l1 := l mod 3;
l2 := StrToInt(Int[1]);
if (l > 3) and (l < 7) and ((l2 = 1) or (l2 = 2)) and (l1 = 1) then l2 := l2 + 10;
if (l1 = 2) and (l2 = 1) and (Int[2] <> "0") then begin
l2 := 10 + StrToInt(Int[2]);
Int := copy(Int,2,length(Int) - 1);
dec(l3);
end;
if (Rod = 2) and ((l2 = 1) or (l2 = 2)) and (l = 1) then l2 := l2 + 10;
if (Rod = 3) and (l2 = 1) and (l = 1) then l2 := l2 + 12;
case l1 of
0: s := s + SOT[l2];
1: s := s + EDIN[l2];
2: s := s + DES[l2];
end;
if (l2 > 9) and (l1 = 2) then l2 := 5;
if l2 > 9 then l2 := l2 - 10;
case l2 of
1 : l2 := 1;
2..4: l2 := 2;
else l2 := 3;
end;
Dec(l3);
Int := Copy(Int, 2, length(Int) - 1);
s := s + " ";
end;
s := s + " ";
if f then
// В этом CASE можно добавлять всякие квинтилионы до опупения
// но думаю врядли кому даже триллионы понадобятся
case l of
4..6: s := s + "тысяч" + OKON[1, l2];
7..9: s := s + "миллион" + OKON[2, l2];
10..12: s := s + "миллиард" + OKON[2, l2];
13..15: s := s + "триллион" + OKON[2, l2];
end;
s := s + " ";
l := length(int);
end;
result := s + s1;
// Уберём возможные двойные тройные пробелы между словами
l1 := Length(result); l := 1;
while l <> l1 do
if (result[l] = " ") and (result[l + 1] = " ") then begin
Delete(result, l, 1);
l1 := Length(result);
end else begin
Inc(l);
end;
// Первое слово с большой
if Length(result) > 0 then result[1] := chr(ord(result[1])-32);
end;
← →
Юрий Зотов © (2006-04-28 10:08) [8]Таких функций в Сети - море, неужели сложно найти?
http://www.yandex.ru/yandsearch?rpt=rad&text=Delphi+%F1%F3%EC%EC%E0+%EF%F0%EE%EF%E8%F1%FC%FE
Результат поиска: страниц - 1556, сайтов - не менее 398.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c