Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 374

/ вопрос открыт /

Приветствую, уважаемые эксперты!Делаю программу, для перевода цисел цифрами в сумму прописью и вывести результат в ячейку документа Excel.xls. На форме есть Кнопка TButton1, поле для ввода суммы(цифрами), и клиент для связи по протоколу DDE. Ошибка кода в функции Str,то ли функцию другую или параметры не правильно задавал, а в ячейку выходит число цифрой(((. Я только начал изучать программирование, до меня не жоходит каким принципом функция . Товарищи программисты, требуется квалифицированная помощь.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, DdeMan;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. DdeClientConv1: TDdeClientConv;
  12. Edit1: TEdit;
  13. Button1: TButton;
  14. procedure Button1Click(Sender: TObject);
  15. Function Propis(Value : int64) : string;
  16. Procedure Fst(S : string; var s1 : string; var s2 : string; var s3 : string);
  17. Function Ruble(Value : int64; Skl : string) : string;
  18. Function Kopeika(Value : integer; skp : string) : string;
  19. private
  20. { Private declarations }
  21.  
  22. public
  23. { Public declarations }
  24. end;
  25.  
  26. var
  27. Form1: TForm1;
  28.  
  29. implementation
  30.  
  31. {$R *.dfm}
  32.  
  33.  
  34. function TForm1.Propis(Value : int64) : string;
  35. var
  36. Rend: boolean;
  37. ValueTemp: int64;
  38.  
  39.  
  40.  
  41. procedure Num(Value: byte);
  42. begin
  43. case Value of
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. end
  64. end;
  65.  
  66.  
  67.  
  68. procedure Num10(Value: byte);
  69. begin
  70. case Value of
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79. end;
  80. end;
  81.  
  82.  
  83.  
  84. procedure Num100(Value: byte);
  85. begin
  86. case Value of
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. end
  97. end;
  98.  
  99.  
  100.  
  101. procedure Num00;
  102. begin
  103.  
  104. Num100(ValueTemp div 100);
  105.  
  106. ValueTemp := ValueTemp mod 100;
  107.  
  108. if ValueTemp < 20
  109. then Num(ValueTemp)
  110. else begin
  111.  
  112. Num10(ValueTemp div 10);
  113.  
  114. ValueTemp := ValueTemp mod 10;
  115.  
  116. Num(ValueTemp);
  117. end;
  118. end;
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125. procedure NumMult(Mult: int64; s1, s2, s3: string);
  126. var ValueRes: int64;
  127. begin
  128.  
  129. if Value >= Mult then
  130. begin
  131.  
  132. ValueTemp := Value div Mult;
  133. ValueRes := ValueTemp;
  134.  
  135. Num00;
  136.  
  137. if ValueTemp = 1 then Result := Result + s1
  138. else if (ValueTemp > 1) and (ValueTemp < 5) then Result := Result + s2
  139. else Result := Result + s3;
  140.  
  141. Value := Value - Mult * ValueRes;
  142. end;
  143. end;
  144.  
  145. begin
  146.  
  147. if (Value = 0)
  148.  
  149. else begin
  150. Result := '';
  151.  
  152. Rend := true;
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161. Rend := false;
  162.  
  163.  
  164.  
  165. Rend := true;
  166. ValueTemp := Value;
  167. Num00;
  168. end;
  169. end;
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176. Procedure TForm1.Fst(S : string; var s1 : string; var s2 : string; var s3 : string);
  177. var
  178. pos: integer;
  179. begin
  180. S1 := ''; S2 := ''; S3 := ''; pos := 1;
  181.  
  182. while ((pos <= Length(S)) and (S[pos] <> ';')) do
  183. begin
  184. S1 := S1 + S[pos];
  185. inc(pos);
  186. end;
  187. inc(pos);
  188.  
  189. while ((pos <= Length(S)) and (S[pos] <> ';')) do
  190. begin
  191. S2 := S2 + S[pos];
  192. inc(pos);
  193. end;
  194. inc(pos);
  195.  
  196. while ((pos <= Length(S)) and (S[pos] <> ';')) do
  197. begin
  198. S3 := S3 + S[pos];
  199. inc(pos);
  200. end;
  201. inc(pos);
  202. end;
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211. function TForm1.Ruble(Value : int64; skl : string) : string;
  212. var
  213. hk10, hk20: integer;
  214. Skl1, Skl2, Skl3: string;
  215. begin
  216. Fst(Skl, Skl1, Skl2, Skl3);
  217. hk10 := Value mod 10;
  218. hk20 := Value mod 100;
  219. if (hk20 > 10) and (hk20 < 20)
  220. then result := Skl3
  221. else if (hk10 = 1) then result := Skl1
  222. else if (hk10 > 1) and (hk10 < 5) then result := Skl2
  223. else result := Skl3;
  224. end;
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233. function TForm1.Kopeika(Value : integer; skp : string) : string;
  234. var
  235. hk10, hk20: integer;
  236. Skp1, Skp2, Skp3: string;
  237. begin
  238. Fst(Skp, Skp1, Skp2, Skp3);
  239. hk10 := Value mod 10;
  240. hk20 := Value mod 100;
  241. if (hk20 > 10) and (hk20 < 20)
  242. then result := Skp3
  243. else if (hk10 = 1) then result := Skp1
  244. else if (hk10 > 1) and (hk10 < 5) then result := Skp2
  245. else result := Skp3;
  246. end;
  247. procedure TForm1.Button1Click(Sender: TObject);
  248. var
  249. ToExcel:array[0..20] of Char;
  250. sum,sup:string;
  251. stroka : string;
  252. kop : string[2];
  253. sr, sk : string[30];
  254. Layout: array[0.. KL_NAMELENGTH] of char;
  255. begin
  256.  
  257. DecimalSeparator := '-';
  258. edit1.PasteFromClipboard;
  259.  
  260.  
  261.  
  262. try
  263. sum:=formatfloat('######0.00',strtofloat(edit1.Text));
  264. kop := Copy(sum, pos('-', sum) + 1, 2);
  265. stroka := Propis(trunc(strtofloat(sum))) + ' ' + Ruble(trunc(strtofloat(sum)), sr) + ' ' + kop + ' ' + Kopeika(StrToInt(kop), sk);
  266. sup := stroka[1];
  267. stroka := AnsiUpperCase(sup) + Copy(stroka, 2, Length(stroka) - 1);
  268. edit1.Text:=stroka;
  269.  
  270.  
  271. form1.WordApplication1.Options.CheckSpellingAsYouType := False;
  272. form1.WordApplication1.Options.CheckGrammarAsYouType := False;
  273. form1.WordApplication1.Selection.TypeText(edit2.Text);}
  274. //
  275.  
  276. edit1.SelectAll;
  277. LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
  278. edit1.CopyToClipboard;
  279. LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
  280. //
  281.  
  282.  
  283. DecimalSeparator := ',';
  284.  
  285.  
  286. DdeClientConv1.PokeData('R7C2',ToExcel);
  287. end;
  288.  
  289.  
  290.  
  291. end.
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  


Тэйк Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Тэйк (статус: Заблокирован)
Вопрос отправлен: 2 июля 2010, 13:41
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Вот тебе БОЛЬШАЯ ССЫЛКА.
Нажми на неё и выбирай.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 2 июля 2010, 13:52


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 3 июля 2010, 08:47; участников в обсуждении: 3.
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 2 июля 2010, 13:59 [#1]:

Функция Str конвертирует из формата числового в строковый
Применение: Str(<<числовая переменная или число >>, <<строковая переменная>>);

Источник:
Delphi syntax:

procedure Str(X [: Width [: Decimals ]]; var S);

Поэтому и ошибка
bugmenot

bugmenot (статус: 3-ий класс), 2 июля 2010, 15:35 [#2]:

А мне больше всего нравится ссылка
виконання програми розпочинається з того самого мiсця, де призупинилося.

Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 2 июля 2010, 16:22 [#3]:

Хорошая ссылка, согласен.
Тэйк

Тэйк (статус: Заблокирован), 3 июля 2010, 08:47 [#4]:

Спасибо






















<a href=http://www.areanda.com >продвижение сайта оплата за результат</a>

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.02 сек.