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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2011, 18:00   #11
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
см пост выше
Ага, вижу)
Должен делать "...", но почему то отказывается делать это самое "..."))
ты ЭТО хотел сказать ?
Или ты хотел сказать что BP на строчке if Key = #13 then не ловится ?)
mss вне форума Ответить с цитированием
Старый 28.06.2011, 18:31   #12
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Советую выполнить пошаговую трассировку (клавиша F7).
То есть, вместо того, чтобы нажать RUN, нажимайте F7, при этом на экране так строка, которая выполняется в данный момент времени, будет выделена тёмно-синим цветом.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.06.2011, 18:33   #13
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
Ага, вижу)
Должен делать "...", но почему то отказывается делать это самое "..."))
ты ЭТО хотел сказать ?
Или ты хотел сказать что BP на строчке if Key = #13 then не ловится ?)
ну посмотрите внимательнее, я же код выложил
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 18:36   #14
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

ещё совет
Код:
DecimalSeparator:= '.';
Не трогайте эту переменную вообще, она сама принимает нужное значение в зависимости от того, какие настройки вашего ПК.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.06.2011, 18:37   #15
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
ещё совет
Код:
DecimalSeparator:= '.';
Не трогайте эту переменную вообще, она сама принимает нужное значение в зависимости от того, какие настройки вашего ПК.
программа работает с файлами с других компов, там может стоять что угодно.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 18:40   #16
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ваш код вообще не понятно что делает, в case для '.' какого то фига #13 обрабатывается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.06.2011, 18:45   #17
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ваш код вообще не понятно что делает, в case для '.' какого то фига #13 обрабатывается
что непонятного?

1)в "case" заданы символы или кнопки которые можно использовать, #9 - это backspace, #13 - Enter, '.' - дробный разделитель, и числа.

2)if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0);
// запрет ввода второго разделителя - запрет ввода второго разделителя

3)if Key = #13 then
begin
if (Label37.Caption = 'Введите новое значение (диаметр):') and ((Edit1.Text <> '') or (Edit1.Text <> '0')) then
begin
if Edit1.Text[1] <> '.' then
Label24.Caption:= 'Диаметр: ' + Edit1.Text + ' мм'
else
Label24.Caption:= 'Диаметр: 0' + Edit1.Text + ' мм';
end
else
Label24.Caption:= 'Диаметр: н/а';
end;

//код обработки клавиши Enter

4) Key := Chr(0);
// остальные символы запрещены

простой же код...
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 28.06.2011, 18:52   #18
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
1)в "case" заданы символы или кнопки которые можно использовать, #9 - это backspace, #13 - Enter, '.' - дробный разделитель, и числа.
BackSpace - это #8.
Сейчас смотрю и анализирую ваш код, вижу, что Case похоже не к месту вообще, на и может напутано что-то с парами begin-end.
Щас посмотрим...

Вообще, пишите код форматированно.
Вадим Мошев вне форума Ответить с цитированием
Старый 28.06.2011, 18:53   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну это вам понятно, а это ваш код в виде, в котором хоть что-то понятно
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
  #8,'0'..'9': ;
  #13: ;
  '.': begin
      DecimalSeparator:= '.';
      if Pos(DecimalSeparator, Edit1.Text) <> 0 then Key:= Chr(0);
      if Key = #13 then begin
        if (Label37.Caption = 'Введите новое значение (диаметр):') and ((Edit1.Text <> '') or (Edit1.Text <> '0')) then begin
          if Edit1.Text[1] <> '.' then Label24.Caption:= 'Диаметр: ' + Edit1.Text + ' мм'
                                  else Label24.Caption:= 'Диаметр: 0' + Edit1.Text + ' мм';
        end
        else Label24.Caption:= 'Диаметр: н/а';
      end;
    end;
  else Key := Chr(0);
  end;
end;
Ничего не убрал кроме коментов и выровнял для наглядности, будете так оформлять - меньше ошибок будет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 28.06.2011 в 19:21.
Аватар вне форума Ответить с цитированием
Старый 28.06.2011, 19:05   #20
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Советую обработку написать следующим образом:
Код:
if NOT (key in [#8, #13, '.', '0'..'9']) then 
					    begin
					    	key:=chr(0);
					    	exit
					    end;
					
if key = '.' then 
		if Pos(DecimalSeparator, Edit1.Text) <> 0 then
			                		   begin
					         		 Key:= Chr(0); 
						        	 exit;
							   end; 

if key = #13 then // Обрабатываем клавишу Enter, насяльника
С ДекиминалСепараторами и десятичными точками сами разберитесь...
Вадим Мошев вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OnKeyPress VS Edit1 :) Federal Помощь студентам 6 29.07.2010 16:00
Не работатет onkeypress. vedro-compota Мультимедиа в Delphi 4 08.06.2010 20:58
OnKeyPress aurora_87 Общие вопросы C/C++ 3 15.01.2010 12:06
OnKeyPress из NumLock`а Alex Cones Общие вопросы Delphi 2 23.04.2009 20:08