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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2011, 14:51   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Повторное нажатие Enter

Вот есть такая процедурка:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
      If (Key = #13) Then
      Begin
            If (Trim(Edit1.Text) <> '') and
               (Trim(Edit2.Text) <> '') and
               (Trim(Edit3.Text) <> '') and
               (Trim(Edit4.Text) <> '') Then
            Begin
                  Emitent:=Edit1.Text;
                  CostOfA:=StrToFloat(Edit2.Text);
                  POfComp:=StrToFloat(Edit3.Text);
                  CountA:=StrToInt(Edit4.Text);
                  Revenue:=POfComp/CountA;
                  Multiply:=CostOfA/Revenue;
                  CompCost:=CountA*CostOfA;
                  Edit5.Text:=FloatToStr(CompCost);
                  Edit6.Text:=FloatToStr(Revenue);
                  Edit7.Text:=FloatToStr(Multiply);
            End;
            If (Trim(Edit1.Text)<> '') and
               (Trim(Edit2.Text)<> '') and
               (Trim(Edit6.Text)<> '') and
               (Trim(Edit3.Text) = '') and
               (Trim(Edit4.Text) = '') and
               (Trim(Edit5.Text) = '') and
               (Trim(Edit7.Text) = '') Then
            Begin
                  Emitent:=Edit1.Text;
                  CostOfA:=StrToFloat(Edit2.Text);
                  Revenue:=StrToFloat(Edit6.Text);
                  Multiply:=CostOfA/Revenue;
                  Edit7.Text:=FloatToStr(Multiply);
                  Multiply:=0;
            End;
      End;
      If not (Key in ['0'..'9',',']) Then
      Begin
            If not (Sender = Edit1) Then
            Begin
                  If Key<>#08 Then Key:=#0;
            End;
      End;
end;
Когда я один раз нажимаю Enter, то всё нормально, процедура срабатывает. Однако, при изменении данных в Edit'ах, процедура не срабатывает, т.е. она просто не видит, что я нажал Enter! Почему же так?
_-Re@l-_ вне форума Ответить с цитированием
Старый 28.01.2011, 15:02   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Повесь её на OnKeyDown
Код:
   If Key = 13 Then
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2011, 15:09   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Я вообще сначала держал её на OnKeyDown, но там точно такой же результат.

В чём же дело?

Последний раз редактировалось _-Re@l-_; 28.01.2011 в 15:13.
_-Re@l-_ вне форума Ответить с цитированием
Старый 28.01.2011, 15:29   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Значит одно из двух:
1. Фокус не находится на Edit1 в момент нажатия.
2. Не выполняется ни одно из этих условий...
Код:
    If (Trim(Edit1.Text) <> '') and
               (Trim(Edit2.Text) <> '') and
               (Trim(Edit3.Text) <> '') and
               (Trim(Edit4.Text) <> '') Then
//***********************************
          If (Trim(Edit1.Text)<> '') and
               (Trim(Edit2.Text)<> '') and
               (Trim(Edit6.Text)<> '') and
               (Trim(Edit3.Text) = '') and
               (Trim(Edit4.Text) = '') and
               (Trim(Edit5.Text) = '') and
               (Trim(Edit7.Text) = '') Then
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2011, 16:00   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

В том то и дело, что оба ваших пункта не верны, т.е. фокус там находится, и все условия выполняются.
_-Re@l-_ вне форума Ответить с цитированием
Старый 28.01.2011, 16:47   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Такого не может быть даже теоретически...
Откуда ты знаешь, что условия выполняются если процедура не срабатывает?
Поставь точку останова в начале процедуры и проверь... Может в Edit пробел попадает?
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.01.2011, 17:06   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

_SERGEYX_,там всё верно.
Вот например, я открыл прогу и заполнил все поля. Нажал Enter.Он мне показал результаты.
Но когда я это делаю во второй и последующие разы, просто с другими числами, то результат просто не выдаётся! Понимаете?
_-Re@l-_ вне форума Ответить с цитированием
Старый 28.01.2011, 18:30   #8
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Упрощенный код проекта - в студию !
asmodey1 вне форума Ответить с цитированием
Старый 28.01.2011, 18:39   #9
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Трассировка + Watch вам в помощь.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 28.01.2011, 23:40   #10
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Цитата:
Я вообще сначала держал её на OnKeyDown, но там точно такой же результат.

В чём же дело?
повесь на KeyPress
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нажатие Enter Alana Общие вопросы Delphi 4 27.10.2010 14:31
Двойное нажатие клавиши Enter Nezaam Помощь студентам 4 18.08.2010 17:00
Нажатие Enter Screame Microsoft Office Excel 1 01.11.2009 17:02
повторное нажатие кнопки blackstersl Общие вопросы Delphi 2 17.09.2008 14:53
Запрет на повторное нажатие клавиши russian-stalker Общие вопросы Delphi 3 12.09.2008 19:39