|
Вопрос # 4 374/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!Делаю программу, для перевода цисел цифрами в сумму прописью и вывести результат в ячейку документа Excel.xls. На форме есть Кнопка TButton1, поле для ввода суммы(цифрами), и клиент для связи по протоколу DDE. Ошибка кода в функции Str,то ли функцию другую или параметры не правильно задавал, а в ячейку выходит число цифрой(((. Я только начал изучать программирование, до меня не жоходит каким принципом функция . Товарищи программисты, требуется квалифицированная помощь.
Приложение: Переключить в обычный режим- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, DdeMan;
-
- type
- TForm1 = class(TForm)
- DdeClientConv1: TDdeClientConv;
- Edit1: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- Function Propis(Value : int64) : string;
- Procedure Fst(S : string; var s1 : string; var s2 : string; var s3 : string);
- Function Ruble(Value : int64; Skl : string) : string;
- Function Kopeika(Value : integer; skp : string) : string;
- private
- { Private declarations }
-
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
-
- function TForm1.Propis(Value : int64) : string;
- var
- Rend: boolean;
- ValueTemp: int64;
-
-
-
- procedure Num(Value: byte);
- begin
- case Value of
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- end
- end;
-
-
-
- procedure Num10(Value: byte);
- begin
- case Value of
-
-
-
-
-
-
-
-
- end;
- end;
-
-
-
- procedure Num100(Value: byte);
- begin
- case Value of
-
-
-
-
-
-
-
-
-
- end
- end;
-
-
-
- procedure Num00;
- begin
-
- Num100(ValueTemp div 100);
-
- ValueTemp := ValueTemp mod 100;
-
- if ValueTemp < 20
- then Num(ValueTemp)
- else begin
-
- Num10(ValueTemp div 10);
-
- ValueTemp := ValueTemp mod 10;
-
- Num(ValueTemp);
- end;
- end;
-
-
-
-
-
-
- procedure NumMult(Mult: int64; s1, s2, s3: string);
- var ValueRes: int64;
- begin
-
- if Value >= Mult then
- begin
-
- ValueTemp := Value div Mult;
- ValueRes := ValueTemp;
-
- Num00;
-
- if ValueTemp = 1 then Result := Result + s1
- else if (ValueTemp > 1) and (ValueTemp < 5) then Result := Result + s2
- else Result := Result + s3;
-
- Value := Value - Mult * ValueRes;
- end;
- end;
-
- begin
-
- if (Value = 0)
-
- else begin
- Result := '';
-
- Rend := true;
-
-
-
-
-
-
-
-
- Rend := false;
-
-
-
- Rend := true;
- ValueTemp := Value;
- Num00;
- end;
- end;
-
-
-
-
-
-
- Procedure TForm1.Fst(S : string; var s1 : string; var s2 : string; var s3 : string);
- var
- pos: integer;
- begin
- S1 := ''; S2 := ''; S3 := ''; pos := 1;
-
- while ((pos <= Length(S)) and (S[pos] <> ';')) do
- begin
- S1 := S1 + S[pos];
- inc(pos);
- end;
- inc(pos);
-
- while ((pos <= Length(S)) and (S[pos] <> ';')) do
- begin
- S2 := S2 + S[pos];
- inc(pos);
- end;
- inc(pos);
-
- while ((pos <= Length(S)) and (S[pos] <> ';')) do
- begin
- S3 := S3 + S[pos];
- inc(pos);
- end;
- inc(pos);
- end;
-
-
-
-
-
-
-
-
- function TForm1.Ruble(Value : int64; skl : string) : string;
- var
- hk10, hk20: integer;
- Skl1, Skl2, Skl3: string;
- begin
- Fst(Skl, Skl1, Skl2, Skl3);
- hk10 := Value mod 10;
- hk20 := Value mod 100;
- if (hk20 > 10) and (hk20 < 20)
- then result := Skl3
- else if (hk10 = 1) then result := Skl1
- else if (hk10 > 1) and (hk10 < 5) then result := Skl2
- else result := Skl3;
- end;
-
-
-
-
-
-
-
-
- function TForm1.Kopeika(Value : integer; skp : string) : string;
- var
- hk10, hk20: integer;
- Skp1, Skp2, Skp3: string;
- begin
- Fst(Skp, Skp1, Skp2, Skp3);
- hk10 := Value mod 10;
- hk20 := Value mod 100;
- if (hk20 > 10) and (hk20 < 20)
- then result := Skp3
- else if (hk10 = 1) then result := Skp1
- else if (hk10 > 1) and (hk10 < 5) then result := Skp2
- else result := Skp3;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- ToExcel:array[0..20] of Char;
- sum,sup:string;
- stroka : string;
- kop : string[2];
- sr, sk : string[30];
- Layout: array[0.. KL_NAMELENGTH] of char;
- begin
-
- DecimalSeparator := '-';
- edit1.PasteFromClipboard;
-
-
-
- try
- sum:=formatfloat('######0.00',strtofloat(edit1.Text));
- kop := Copy(sum, pos('-', sum) + 1, 2);
- stroka := Propis(trunc(strtofloat(sum))) + ' ' + Ruble(trunc(strtofloat(sum)), sr) + ' ' + kop +
' ' + Kopeika(StrToInt(kop), sk);
- sup := stroka[1];
- stroka := AnsiUpperCase(sup) + Copy(stroka, 2, Length(stroka) - 1);
- edit1.Text:=stroka;
-
-
- form1.WordApplication1.Options.CheckSpellingAsYouType := False;
- form1.WordApplication1.Options.CheckGrammarAsYouType := False;
- form1.WordApplication1.Selection.TypeText(edit2.Text);}
- //
-
- edit1.SelectAll;
- LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE);
- edit1.CopyToClipboard;
- LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);
- //
-
-
- DecimalSeparator := ',';
-
-
- DdeClientConv1.PokeData('R7C2',ToExcel);
- end;
-
-
-
- end.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 |
Вопрос задал: Тэйк (статус: Заблокирован)
Вопрос отправлен: 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 (статус: 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>
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|