Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid pointer operation. [D7, WinXP]


Merry ©   (2006-10-04 21:03:00) 

Когда-то давно на форуме взяла  код полезной функции, переводящей денежные суммы  из цифр  в пропись.
Почему-то при выполнении:
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??


isasa   (2006-10-05 08:55:00) [1]

Ketmar ©   (05.10.06 01:46) [6]
См почту.


Ketmar   (2006-10-05 05:47:00) [2]

>[14] Германн(c) 5-Oct-2006, 04:50
>Я даже не понимаю "продолжение Turbo
>Professional. тоже для BP/DOS/DPMI."
идеологическое развитие библиотеки "Turbo Professional". тоже для доса и турбо/борланд паскаля. к сожалению, оригинальной версии нет. есть только переточеная версия под Virtual Pascal. стукни в асю, если оно тебе надо в таком виде. %-)


Германн   (2006-10-05 04:50:00) [3]


> 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 04:33:00) [4]

>[12] Германн(c) 5-Oct-2006, 03:33
>А что это?
продолжение Turbo Professional. тоже для BP/DOS/DPMI. только ещё больше, ещё страшнее, и объектное. %-)


Германн   (2006-10-05 03:33:00) [5]


> а вот TurboPower Object Professional нигде не дают.

А что это?
Стало даже очень интересно!  Поясни, пож-ста.


Ketmar   (2006-10-05 03:18:00) [6]

>[10] Германн(c) 5-Oct-2006, 02:57
>Отправил всё, что мог. Если что-то лишнее не
>обессудь.
tnx. лишнее выкину, если что. а TOT я только что нашёл. %-)
а вот TurboPower Object Professional нигде не дают. TP его не открыла, зараза. %-)


Германн   (2006-10-05 02:57:00) [7]

Отправил всё, что мог. Если что-то лишнее не обессудь.


Ketmar   (2006-10-05 02:39:00) [8]

>[7] Германн(c) 5-Oct-2006, 02:13
>На мыло в анкете?
угу.

>TPguide нужен или нет?
лей всё. оно ж, вроде, маленькое %-)


Германн   (2006-10-05 02:14:00) [9]

TechnoJocks Object Toolkit - этого зверя я не встречал, увы!


Германн   (2006-10-05 02:13:00) [10]


> Ketmar ©   (05.10.06 01:46) [6]
>
> >[5] Германн(c) 5-Oct-2006, 01:17
> >с библиотекой TurboProfessional.
> слушай, намыль, а? библиотеку

На мыло в анкете?
TPguide нужен или нет?


Ketmar   (2006-10-05 01:46:00) [11]

>[5] Германн(c) 5-Oct-2006, 01:17
>с библиотекой TurboProfessional.
слушай, намыль, а? библиотеку, в смысле. и ещё: если есть TechnoJocks Object Toolkit -- тоже намыль, плз. а то в гугле, заразы, TOT не дают %-((


Германн   (2006-10-05 01:17:00) [12]


> 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;


guav   (2006-10-05 00:19:00) [13]

Ошибку может вызывать и приведеный код, но вряд ли.
Если при включении проверки диапазонов повторяется та же ошибка, тогда точно согласен с

> [3] Правильный Вася   (04.10.06 22:08)


Правильный Вася   (2006-10-04 22:08:00) [14]

да негде там такой ошибке быть
наверно в другом месте


Джо   (2006-10-04 21:23:00) [15]

> но при этом выдаётся ошибка:"Invalid pointer operation."

У меня не выдается. Код не читал, ибо не враг своему здоровью :) Ты бы его отформатировал, что ли...


Ketmar   (2006-10-04 21:09:00) [16]

всё читать ниасилил. а LongInt -- это то же самое, что и Integer. потому что справка рулит. %-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо