Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2009, 17:58   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию Остановилось на строке, а дальше не хочет идти

Здравствуйте программисты! По книге написал программу деления двух чисел на С++ Билдер 6,0. При кампиляции останавливается курсор после фигурной скобки {..., а дальше не хочет идти. Вот после вот этой процедуры:
void __fastcall TForm1 ::Edit1KeyPress(TObject *Sender, char &Key) после фигурной скобки "{" дальше не идёт, не знаю что теперь делать. Подскажите пожалуйста. Заранне благодарен.


Вот код программы:
Код:
float u; // напряжение
float r; // сопротивление
float i; // ток
// проверим, введены ли данные в поля Напряжение и Сопротивление
if ( ( (Edit1->Text) .Length () == 0 ) || ( (Edit2->Text) .Length () == 0) )
{
MessageDlg ("Надо ввести напряжение и сопротивление",
mtInformation, TMsgDlgButtons ()<< mbOK, 0) ;
if ( (Edit1->Text) .Length () == 0)
Edit1->SetFocus ( ) ; // курсор в поле Напряжение
else
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
// получить данные из полей ввода
u = StrToFloat (Edit1->Text) ;
r = StrToFloat (Edit2->Text) ;
// вычислить силу тока
try
{
i = u/r;
}
catch (EZeroDivide &e)
{
ShowMessage ("Величина сопротивления не должна быть равна нулю") ;
Edit2->SetFocus ( ) ; // курсор в поле Сопротивление
return;
// вывести результат в поле Label4
{
Label1->Caption = "Ток : " +
FloatToStrF(i,ffGeneral,7,2) + " А";
}
// нажатие клавиши в поле Напряжение
void __fastcall TForm1 ::Edit1KeyPress(TObject *Sender, char &Key)


// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым
{
if(( Key >= '0') && ( Key <= '9'));} // цифра
return;
// Глобальная переменная Decimalseparator
I/ содержит символ, используемый в качестве разделителя
/I при записи дробных чисел
if ( Key == Decimalseparator)
if ( (Editl->Text).Pos(Decimalseparator) != 0)
Key =0; // разделитель уже введен
return;
if (Key == VK_BACK) // клавиша <Backspace>
return;
if ( Key == VK_RETURN) // клавиша <Enter>
{
Edit2->SetFocus ( ) ;
return;
// остальные клавиши запрещены
Key =0; //не отображать символ
}
/ / нажатие клавиши в поле Сопротивление
void _ fastcall TForml : :Edit2KeyDown (TObject *Sender, WORD &Key,
TShiftState Shift)
{
if ( ( Key >= '0') && ( Key <= '9')) // цифра
return;
if ( Key == Decimalseparator) {
if ( (Edit2->Text) .Pos (Decimalseparator) != 0)
Key =0; // разделитель уже введен
return;
if (Key == VK_BACK) // клавиша <Backspace>
return;
if ( Key == VK_RETURN) // клавиша <Enter>
{
Buttonl->SetFocus ( ) ; // переход к кнопке Вычислить
/ I повторное нажатие клавиши <Enter>
/ / активизирует процесс вычисления тока
return;
// остальные клавиши запрещены
Key =0; //не отображать символ
}
II щелчок на кнопке Завершить
void _ fastcall TForml: :Button2Click(TObject *Sender)
{
Forml->Close ( ) ; // закрыть форму приложения
}

Последний раз редактировалось prikolist; 23.03.2009 в 18:00.
prikolist вне форума Ответить с цитированием
Старый 23.03.2009, 18:50   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

А что компилятор пишет? Что-то мне подсказывает, что Вы с книги целиком этот код "срисовали", а в описании класса этих методов нет, вот он и ругается, что нет в классе метода Edit1KeyPress
pu4koff вне форума Ответить с цитированием
Старый 23.03.2009, 18:54   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

А что нужно прописать в классах, я не в курсе, новичок, подскажите пожалуйста.
prikolist вне форума Ответить с цитированием
Старый 23.03.2009, 18:58   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Не нужно эти методы вручную вбивать. На форму кидайте свой Edit1. Выделяете. в Object Inspector открываете вкладку Events, там ищите OnKeyPress. двойной клик по этой строке. Должна добавиться "заготовка" метода Edit1KeyPress и с OnKeyDown так же, а потом уже вбивайте "тела" методов.
pu4koff вне форума Ответить с цитированием
Старый 23.03.2009, 19:09   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Всё сделал как вы сказали, с самого начала. Снова останавливается начиная после этой части кода, после пераого знака '{'. Блин, уже 4,5 часа сижу. Выдаёт такую ошибку: Identifier 'Edit1 Keypress' cannot have a type qualifier.

Код:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым

if(( Key >= '0') && ( Key <= '9')) // цифра }
return;
// Глобальная переменная Decimalseparator
I/ содержит символ, используемый в качестве разделителя
/I при записи дробных чисел
if ( Key == Decimalseparator)
if ( (Editl->Text).Pos(Decimalseparator) != 0)
Key =0; // разделитель уже введен
return;
if (Key == VK_BACK) // клавиша <Backspace>
return;
if ( Key == VK_RETURN) // клавиша <Enter>
{
Edit2->SetFocus ( ) ;
return;
// остальные клавиши запрещены
Key =0; //не отображать символ
}
/ I нажатие клавиши в поле Сопротивление
void _ fastcall TForml : :Edit2KeyDown (TObject *Sender, WORD &Key,
TShiftState Shift)
{
if ( ( Key >= '0') && ( Key <= '9')) // цифра
return;
if ( Key == Decimalseparator) {
if ( (Edit2->Text) .Pos (Decimalseparator) != 0)
Key =0; // разделитель уже введен
return;
if (Key == VK_BACK) // клавиша <Backspace>
return;
if ( Key == VK_RETURN) // клавиша <Enter>
{
Buttonl->SetFocus ( ) ; // переход к кнопке Вычислить
/ I повторное нажатие клавиши <Enter>
/ / активизирует процесс вычисления тока
return;
// остальные клавиши запрещены
Key =0; //не отображать символ
}
II щелчок на кнопке Завершить
void _ fastcall TForml: :Button2Click(TObject *Sender)
{
Forml->Close ( ) ; // закрыть форму приложения
}
}

Последний раз редактировалось prikolist; 23.03.2009 в 19:17.
prikolist вне форума Ответить с цитированием
Старый 24.03.2009, 14:11   #6
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Дело в том, что вы в один обработчик вставили все описания функций. И не забывайте, если вы открыли скобку {, нужно ее закрыть}.
Не поленилась, исправила те ошибки, которые увидела по Вашему коду, но может еще есть какие. А там смотрите, может какие-то обработчики событий в классе не описаны.
Код:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
// коды запрещенных клавиш заменим нулем, в результате
// символы этих клавиш в поле редактирования не появятся
// Key — код нажатой клавиши
// проверим, является ли символ допустимым

 if(( Key >= '0') && ( Key <= '9')) // цифра 
  return;
// Глобальная переменная Decimalseparator
// содержит символ, используемый в качестве разделителя
//I при записи дробных чисел
 if ( Key == Decimalseparator)
 if ( (Edit1->Text).Pos(Decimalseparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if ( Key == VK_RETURN) // клавиша <Enter>
 {
  Edit2->SetFocus() ;
  return;
 }
// остальные клавиши запрещены
 Key =0; //не отображать символ
}


// нажатие клавиши в поле Сопротивление
void _fastcall TForm1::Edit2KeyDown (TObject *Sender, WORD &Key,
TShiftState Shift)
{
 if ( ( Key >= '0') && ( Key <= '9')) // цифра
 return;
 if ( Key == Decimalseparator) 
 if ( (Edit2->Text).Pos(Decimalseparator) != 0)
 {
  Key =0; // разделитель уже введен
  return;
 }
 if (Key == VK_BACK) // клавиша <Backspace>
  return;
 if (Key == VK_RETURN) // клавиша <Enter>
 {
  Button1->SetFocus(); // переход к кнопке Вычислить
// I повторное нажатие клавиши <Enter>
// активизирует процесс вычисления тока
  return;
 }
// остальные клавиши запрещены
 Key =0; //не отображать символ
}


// щелчок на кнопке Завершить
void _fastcall TForm1::Button2Click(TObject *Sender)
{
 Form1->Close(); // закрыть форму приложения
}
Svetlag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Идти ли работать в сеть??? Saiko Фриланс 7 13.12.2008 00:53
Что учить дальше? Манжосов Денис :) Свободное общение 14 18.07.2008 17:26
С++ для чайников - Что дальше? ANTI Свободное общение 1 12.05.2008 15:24
Какой язык учить дальше..? Lilith Общие вопросы по программированию, компьютерный форум 25 13.01.2008 00:28