Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизInvalid pointer operation. Найти похожие ветки
← →
Merry (2006-10-04 21:03) [0]Когда-то давно на форуме взяла код полезной функции, переводящей денежные суммы из цифр в пропись.
Почему-то при выполнении:
Edit2.Text:=TextSum(StrToFloat(Edit1.text));
перевод проходит, в Edit2 я вижу результат, но при этом выдаётся ошибка:"Invalid pointer operation."
Что она означает? Как от неё избавиться?
Код функции следующий:
{------------------------ Деньги прописью ---------------------}
function Conv999(M: longint; fm: integer): string;
const
c1to9m: array [1..9] of string [6] =
("один","два","три","четыре","пять","шесть","семь","восемь","девять");
c1to9f: array [1..9] of string [6] =
("одна","две","три","четыре","пять","шесть","семь","восемь","девять");
c11to19: array [1..9] of string [12] =
("одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",
"шестнадцать","семнадцать","восемнадцать","девятнадцать");
c10to90: array [1..9] of string [11] =
("десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят",
"семьдесят","восемьдесят","девяносто");
c100to900: array [1..9] of string [9] =
("сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот",
"восемьсот","девятьсот");
var
s: string;
i: longint;
begin
s := "";
i := M div 100;
if i<>0 then s:=c100to900[i]+" ";
M := M mod 100;
i := M div 10;
if (M>10) and (M<20) then s:=s+c11to19[M-10]+" "
else
begin
if i<>0 then s:=s+c10to90[i]+" ";
M := M mod 10;
if M<>0 then
if fm=0 then s:=s+c1to9f[M]+" "
else s:=s+c1to9m[M]+" ";
end;
Conv999 := s;
end;
{--------------------------------------------------------------}
function TextSum(S: double): string;
var
i: longint;
j: longint;
r: real;
t: string;
begin
t := "";
j := Trunc(S/1000000000.0);
r := j;
r := S - r*1000000000.0;
i := Trunc(r);
if j<>0 then
begin
t:=t+Conv999(j,1)+"миллиард";
j := j mod 100;
if (j>10) and (j<20) then t:=t+"ов "
else
case j mod 10 of
0: t:=t+"ов ";
1: t:=t+" ";
2..4: t:=t+"а ";
5..9: t:=t+"ов ";
end;
end;
j := i div 1000000;
if j<>0 then
begin
t:=t+Conv999(j,1)+"миллион";
j := j mod 100;
if (j>10) and (j<20) then t:=t+"ов "
else
case j mod 10 of
0: t:=t+"ов ";
1: t:=t+" ";
2..4: t:=t+"а ";
5..9: t:=t+"ов ";
end;
end;
i := i mod 1000000;
j := i div 1000;
if j<>0 then
begin
t:=t+Conv999(j,0)+"тысяч";
j := j mod 100;
if (j>10) and (j<20) then t:=t+" "
else
case j mod 10 of
0: t:=t+" ";
1: t:=t+"а ";
2..4: t:=t+"и ";
5..9: t:=t+" ";
end;
end;
i := i mod 1000;
j := i;
if j<>0 then t:=t+Conv999(j,1);
t := t+"руб. ";
i := Round(Frac(S)*100.0);
t := t+Long2Str(i)+" коп.";
TextSum := t;
End
Да ,ещё 3-я строка снизу выдаёт ошибку. Я заменила её на
t := t+IntToStr(i)+" коп."; Но это, наверное, не совсем корректно. Потому что
i: longint, а не integer. А какой функцией перевести Longint в String??
← →
Ketmar © (2006-10-04 21:09) [1]всё читать ниасилил. а LongInt -- это то же самое, что и Integer. потому что справка рулит. %-)
← →
Джо © (2006-10-04 21:23) [2]> но при этом выдаётся ошибка:"Invalid pointer operation."
У меня не выдается. Код не читал, ибо не враг своему здоровью :) Ты бы его отформатировал, что ли...
← →
Правильный Вася (2006-10-04 22:08) [3]да негде там такой ошибке быть
наверно в другом месте
← →
guav © (2006-10-05 00:19) [4]Ошибку может вызывать и приведеный код, но вряд ли.
Если при включении проверки диапазонов повторяется та же ошибка, тогда точно согласен с
> [3] Правильный Вася (04.10.06 22:08)
← →
Германн © (2006-10-05 01:17) [5]
> Merry (04.10.06 21:03)
>
> Когда-то давно на форуме взяла код полезной функции, переводящей
> денежные суммы из цифр в пропись.
Кстати сей код без ошибок работает в TP7. Проверил сам. Но с библиотекой TurboProfessional. Long2Str именно оттуда.function Long2Str(L : LongInt) : string;
{-Convert a long/word/integer/byte/shortint to a string}
var
S : string;
begin
Str(L, S);
Long2Str := S;
end;
← →
Ketmar © (2006-10-05 01:46) [6]>[5] Германн(c) 5-Oct-2006, 01:17
>с библиотекой TurboProfessional.
слушай, намыль, а? библиотеку, в смысле. и ещё: если есть TechnoJocks Object Toolkit -- тоже намыль, плз. а то в гугле, заразы, TOT не дают %-((
← →
Германн © (2006-10-05 02:13) [7]
> Ketmar © (05.10.06 01:46) [6]
>
> >[5] Германн(c) 5-Oct-2006, 01:17
> >с библиотекой TurboProfessional.
> слушай, намыль, а? библиотеку
На мыло в анкете?
TPguide нужен или нет?
← →
Германн © (2006-10-05 02:14) [8]TechnoJocks Object Toolkit - этого зверя я не встречал, увы!
← →
Ketmar © (2006-10-05 02:39) [9]>[7] Германн(c) 5-Oct-2006, 02:13
>На мыло в анкете?
угу.
>TPguide нужен или нет?
лей всё. оно ж, вроде, маленькое %-)
← →
Германн © (2006-10-05 02:57) [10]Отправил всё, что мог. Если что-то лишнее не обессудь.
← →
Ketmar © (2006-10-05 03:18) [11]>[10] Германн(c) 5-Oct-2006, 02:57
>Отправил всё, что мог. Если что-то лишнее не
>обессудь.
tnx. лишнее выкину, если что. а TOT я только что нашёл. %-)
а вот TurboPower Object Professional нигде не дают. TP его не открыла, зараза. %-)
← →
Германн © (2006-10-05 03:33) [12]
> а вот TurboPower Object Professional нигде не дают.
А что это?
Стало даже очень интересно! Поясни, пож-ста.
← →
Ketmar © (2006-10-05 04:33) [13]>[12] Германн(c) 5-Oct-2006, 03:33
>А что это?
продолжение Turbo Professional. тоже для BP/DOS/DPMI. только ещё больше, ещё страшнее, и объектное. %-)
← →
Германн © (2006-10-05 04:50) [14]
> Ketmar © (05.10.06 04:33) [13]
>
> >[12] Германн(c) 5-Oct-2006, 03:33
> >А что это?
> продолжение Turbo Professional. тоже для BP/DOS/DPMI. только
> ещё больше, ещё страшнее, и объектное. %-)
>
Я в восторге! Но увы первый раз слышу! :-(
Я даже не понимаю "продолжение Turbo Professional. тоже для BP/DOS/DPMI."
Мне тоже хотелось бы это иметь у себя.
← →
Ketmar © (2006-10-05 05:47) [15]>[14] Германн(c) 5-Oct-2006, 04:50
>Я даже не понимаю "продолжение Turbo
>Professional. тоже для BP/DOS/DPMI."
идеологическое развитие библиотеки "Turbo Professional". тоже для доса и турбо/борланд паскаля. к сожалению, оригинальной версии нет. есть только переточеная версия под Virtual Pascal. стукни в асю, если оно тебе надо в таком виде. %-)
← →
isasa © (2006-10-05 08:55) [16]Ketmar © (05.10.06 01:46) [6]
См почту.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.053 c