| 
| 
 | Вопрос # 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                     endend;   procedure Num10(Value: byte);begin  case Value of          end;end;   procedure Num100(Value: byte);begin  case Value of           endend;   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>
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |