Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> беру стринг, привращаю в флоат, еррор 
V
    Опции темы
freenity
Дата 7.9.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Код

if HiWord(WParam) = BN_CLICKED then
               begin

                    GetWindowText(hwndEdit, pchar(numero), 255);
                    resraiz := sqrt(strtofloat(numero));
                    resultado := FloatToStr(resraiz);
                    MessageBox(0,PChar(resultado), 'asd', 0);
               end


в этой части происходит ошибка, когда нажимаю на кнопку, появляется мисаджБокс и говорит что эксэпшн. Что не так? 
numero, resultado : string;
resraiz : float;

Спасибо.
PM MAIL   Вверх
Matematik
Дата 7.9.2006, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Текст ошибки напиши
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 7.9.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Разделитель целой и дробной части отличается от требуемого в strtofloat(); 
Он должен совпадать с DecimalSeparator определяющий разделитель из региональных настроек.
Например: 
numero = '12.5' а DecimalSeparator = ','
вот не понимает strtofloat();  такое число.
Проще всего попытатся заменить оба возможных  разделителя на значение указаное в DecimalSeparator
при помощи функции StringReplace (strUtils)

Добавлено @ 22:40 
Matematik, приходится учится телепатии smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
freenity
Дата 7.9.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Вот текст ошибки:

Цитата

an unhandled exception occured at 0x004014C0:
"" is an invalid float





Это сообщение отредактировал(а) freenity - 7.9.2006, 23:06
PM MAIL   Вверх
Fedia
Дата 7.9.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(alexeis1 @  7.9.2006,  22:38 Найти цитируемый пост)
Разделитель целой и дробной части отличается от требуемого в strtofloat(); 

А ведь ты скорее всего совершенно прав. А я функцию strtofloat в примере не заменил smile
А здесь приводилось решение этой проблемы.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
freenity
Дата 7.9.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Код

begin
                    GetWindowText(hwndEdit, pchar(numero), 255);

                     if DecimalSeparator = ',' then
                        numero := StringReplace(numero,'.', DecimalSeparator,[rfReplaceAll])
                     else
                        numero := StringReplace(numero,',', DecimalSeparator,[rfReplaceAll]);

                    resraiz := sqrt(strtofloat(numero));
                    resultado := FloatToStr(resraiz);
                    MessageBox(0,PChar(resultado), 'asd', 0);
               end


Добавил, все равно та же ошибка
PM MAIL   Вверх
Fedia
Дата 7.9.2006, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Что содержит переменная numero перед строкой
Код

resraiz := sqrt(strtofloat(numero));
 ? Посмотри в пошаговом режиме.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Alexeis
Дата 7.9.2006, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



freenity, все намного проще  smile 
Ситуация вот такая!
Код

var
  resraiz           : Double;
  resultado, numero : AnsiString;

begin
  numero := ''; //имитирует получение пустой строки от GetWindowText(hwndEdit, pchar(numero), 255);
  resraiz := sqrt(strtofloat(numero));
  resultado := FloatToStr(resraiz);
  MessageBox(0, PChar(resultado), 'asd', 0);


Просто функция GetWindowText(hwndEdit, pchar(numero), 255); - возвращает пустую строку
Попробуйте мой код - он дает ту же ошибку smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
freenity
Дата 8.9.2006, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Fedia
numero это то что копируется с EditClass 'a, там должен быть номер.

GetWindowText не возвращает пустую строку, попробывал мисаджем сразау после getwindowtext ошибка точно здесь: 
resraiz := strtofloat(numero);
PM MAIL   Вверх
volvo877
Дата 8.9.2006, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 14
Всего: 116



freenity, тебя просили сказать, 
Цитата(Fedia @  7.9.2006,  23:19 Найти цитируемый пост)
Что содержит переменная numero
, в смысле, какое значение... Откуда оно берется - это твои проблемы, и в данном случае - неважно...

или тебе уже не нужна помощь? Телепаты, извини, в отпуске...

Это сообщение отредактировал(а) volvo877 - 8.9.2006, 01:15
PM MAIL   Вверх
Fedia
Дата 8.9.2006, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(freenity @  8.9.2006,  00:59 Найти цитируемый пост)
numero это то что копируется с EditClass 'a, там должен быть номер.

Должен быть - это не ответ на мой вопрос. Посмотри точно, какое значение содержит переменная numero перед выполнением:
Код

resraiz := strtofloat(numero);



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Alexeis
Дата 8.9.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(freenity @  7.9.2006,  22:47 Найти цитируемый пост)
Цитата

an unhandled exception occured at 0x004014C0:
"" is an invalid float


показывает что строка пустая, а потому не может быть представлена вещественым числом. 

возможно нельзя передавать возвращаемый параметр ввиде pchar(numero)
поскольку функция вернет не string, а PChar, а его то нужно сконвертировать в string,
а потому лучше передать PChar, так Delphi сможет сгенерировать правельный код для конвертации PChar в sting при передаче PChar в качестве параметра в strtofloat()

Добавлено @ 01:20 
Кстати под numero выделена хоть память на длину 255 символов?

Добавлено @ 01:24 
Конечно!
Цитата

GetWindowText Function

Parameters

hWnd
[in] Handle to the window or control containing the text. 
lpString
[out] Pointer to the buffer that will receive the text. If the string is as long or longer than the buffer, the string is truncated and terminated with a NULL character. 
nMaxCount

[in] Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated. 


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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fedia
Дата 8.9.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(alexeis1 @  8.9.2006,  01:18 Найти цитируемый пост)
an unhandled exception occured at 0x004014C0:"" is an invalid float

Блин, я и не заметил, что он отредактировал этот постинг smile
Цитата(alexeis1 @  8.9.2006,  01:18 Найти цитируемый пост)
нужен указатель на выделеный буфер, а не пустой указатель, вот ничего и не копируется.

Если человек не может сказать, какое значение содержится в переменной, то маловероятно, что это ему поможет.

alexeis1, молодец  smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
freenity
Дата 8.9.2006, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Спасибо заработало  smile 

Это сообщение отредактировал(а) freenity - 8.9.2006, 02:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1189 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.