Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.11.2010, 16:19
Аватар для Tensh
Tensh Tensh вне форума
Прохожий
 
Регистрация: 28.11.2010
Адрес: Москва
Сообщения: 5
Репутация: 10
По умолчанию Использование функций

Добрый вечер. Собственно возникла проблема. Было дано куча заданий по информатике из одной книжки, где вроде бы очень неплохо расписаны все возможности Delphi, ну и книжка соответственно наполнена различными заданиями.
Вот собственно само задание
Цитата:
Пусть необходимо проверить, является ли допустимым вводимый в окно редактирования символ при наборе натурального числа. В соответствии с поставленной задачей разрешимыми для ввода являются цифры, клавиши Enter (символ - #13) и Backspace (символ - #8) - стирание влево неверно введенного символа.

Назовем нашу функцию ProvInputInt. Описание функции можно представить в виде:

Код:
function ProvInputInt (ch: char): Boolean; begin

if (ch>='0') and (ch<='9') or (ch=#13) or (ch=#8) 
then ProvInputInt:=True // символ допустим 
else Provlnputlnt:=False; //символ недопустим

end;

Функция работает с одним параметром — ch - переменная типа Char, результат работы функции — переменная типа Boolean. В теле функции проверяется, каким символом является символ ch. Если символ ch - цифра, #13 или #8, то значению функции Provlnputlnt присваивается значение True, иначе значению функции Provlnputlnt присваивается значение False.

Проблема возникла вот в чём. Вроде бы функция написана, как она работает понятно. Вот только как её использовать абсолютно не понятно. Нужно её каким-то образом для поля Edit применить, только вот в книге не написано как, а без наглядного примера воображение не работает...

Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 28.11.2010, 16:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

В событии OnKeyPress компонента Edit вы можете проводить обработку:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
 if not ProvInputInt(Key) then Key := #0
end;
А что касается самой функции я бы немножко ее изменил:
Код:
function ProvInputInt (ch: char): Boolean; 
begin
 ProvInputInt := ch in ['0'..'9',#13,#8];
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 28.11.2010 в 16:58.
Ответить с цитированием
  #3  
Старый 28.11.2010, 17:27
Аватар для Tensh
Tensh Tensh вне форума
Прохожий
 
Регистрация: 28.11.2010
Адрес: Москва
Сообщения: 5
Репутация: 10
По умолчанию

Благодарю.
UPD: Пока тему не закрыли.
Возникла ещё одна проблема со схожей задачей.
Ругается: Operator no applicable to this operand type.
Код:
function ProvInputDrobn (ch: char; str: string): Boolean;
begin

   if (ch>='0') and (ch<='9') or (ch=#13) or (ch=#8)
    then
    begin
    ProvInputDrobn:=True;
     Exit;
    End;

Case ch of

 '-': if Length(str)=0 then ProvInputDrobn:=True;
 ',': if (Pos(',',str)=0 and
         (str[Length(str)]>='0') and(ругается тут) (str[Length(str)]<='9')
         then ProvInputDrobn:=True
       else ProvInputDrobn:=False;

 end;

 end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if not ProvInputDrobn(Key) then key:=chr(0);
end;

end.

Последний раз редактировалось Tensh, 28.11.2010 в 18:11.
Ответить с цитированием
  #4  
Старый 28.11.2010, 18:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Наверное так должно быть:
Код:
if (Pos(',',str)=0) and (str[Length(str)]>='0') and (str[Length(str)]<='9')
then ProvInputDrobn :=True
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 28.11.2010, 19:22
Аватар для Tensh
Tensh Tensh вне форума
Прохожий
 
Регистрация: 28.11.2010
Адрес: Москва
Сообщения: 5
Репутация: 10
По умолчанию

А почему один пробел так всё изменил?

Теперь ругается: not enough actual parameters
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not ProvInputDrobn(Key)(тут) then key:=chr(0);
end;
Ответить с цитированием
  #6  
Старый 28.11.2010, 19:26
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

У тебя ж функция имеет 2 параметра:
function ProvInputDrobn (ch: char; str: string): Boolean;
А ты заполняешь только один:
Код:
if not ProvInputDrobn(Key)(тут) then key:=chr(0);

// ты должен указать еще строку:
if not ProvInputDrobn(Key, s) then key:=chr(0);
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 28.11.2010, 23:53
Аватар для Tensh
Tensh Tensh вне форума
Прохожий
 
Регистрация: 28.11.2010
Адрес: Москва
Сообщения: 5
Репутация: 10
По умолчанию

Что-то не сработало.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:53.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025