Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 131
1

Delphi 7 калькулятор запрет чисел 02; 03; 07; и т.д

16.01.2016, 12:56. Показов 1315. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем, есть ли у кого то код запрета ввода с клавиатуры и нажатием кнопками(скриншот) чисел 02; 03; и т. д. при суммировании и т.д чтобы не было например вот такого действия в edit 5*07. Вот код калькулятора и скриншот кнопок:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm332.Label16Click(Sender: TObject);
var k, y1: integer;
s:string;
formula:OleVariant;
begin
begin
formula :=CreateOleObject('MSScriptControl.ScriptControl');
formula.Language :='VBScript';
  s :=Form332.edit1.Text;
 Form332.Edit3.Text:=(formula.Eval(s));
end;
    end;
Миниатюры
Delphi 7 калькулятор запрет чисел 02; 03; 07; и т.д  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2016, 12:56
Ответы с готовыми решениями:

Delphi 7 калькулятор запрет ввода
Привет, как в калькуляторе можно запретить ввод в edit двойного плюса '++' или '+*' и т.д. Вот код:...

Нужен Калькулятор чисел в Excel с считыванием чисел ячейки и суммированием к нему еще чисел
Нужен калькулятор для каждой ячейки в таблице, таблица может быть где угодно поэтому 1) нужно...

Запрет ввода определенных символов (перевод с Delphi)
Доброго времени суток!!! Ребята помогите перевести код с Дэлфы на C++...Пишу Курсач и мне осталось...

Калькулятор Delphi
помогите!!! Модифицируйте созданный калькулятор так, чтобы он вычислял обратное значение числа...

13
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,140
16.01.2016, 14:48 2
artem_0108, почему бы не создать событие OnChange?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Edit1Change(Sender: TObject);
var
s:String;
begin
s := Edit1.Text;
if  (Copy(s,1,1) = '0')
and (Length(s) > 1) then Begin
  Delete(s,1,1);
  Edit1.Text := s;
  Edit1.SelStart := Length(s);
  End;
end;
0
droider
16.01.2016, 14:51
  #3

Не по теме:

Цитата Сообщение от artem_0108 Посмотреть сообщение
Form332
Жестко :)

0
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 131
16.01.2016, 16:20  [ТС] 4
Почему то код не помог мне.
Миниатюры
Delphi 7 калькулятор запрет чисел 02; 03; 07; и т.д  
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
16.01.2016, 17:57 5
Цитата Сообщение от artem_0108 Посмотреть сообщение
код не помог мне
Значит, Вы что-то делаете не так. Код рабочий.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
16.01.2016, 18:09 6
Цитата Сообщение от artem_0108 Посмотреть сообщение
чтобы не было например вот такого действия в edit 5*07
Чем же оно плохо ?
0
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 131
16.01.2016, 18:53  [ТС] 7
Запятой нет, выбивает ошибку.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
16.01.2016, 19:01 8
Цитата Сообщение от artem_0108 Посмотреть сообщение
Запятой нет, выбивает ошибку
У меня не "выбивает", что я неправильно делаю ?

Да и причем здесь запятая ?
Умножается конкретно число 5 на конкретно число 07 - в какую дырку и зачем здесь приспособить запятую ?)
0
1077 / 488 / 316
Регистрация: 05.04.2013
Сообщений: 2,140
16.01.2016, 20:02 9
artem_0108, у вас батенька вообще три edit'a на форме. вы или объясните как у вас код работает или код выложите весь, или оба одновременно - еще лучше будет.
я показал принципе работы события OnChange, а то что вы его к своему коду прикрутить не можете, уж извините
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
16.01.2016, 20:24 10
artem_0108, соглашусь с mss. Чем Вам эти нули мешают? Даже если перед цифрой будет 10 нулей на результат вычисления это никак не влияет.
Delphi
1
5*0000007=35
Цитата Сообщение от artem_0108 Посмотреть сообщение
Запятой нет, выбивает ошибку
откуда там взялась запятая? Даже если она там и будет, это все равно может привести к ошибке, т.к. разделителем дробной части по умолчанию является "." (в зависимости от региональных настроек Windows).
0
0 / 0 / 2
Регистрация: 16.01.2016
Сообщений: 2
17.01.2016, 01:29 11
Лучший ответ Сообщение было отмечено artem_0108 как решение

Решение

artem_0108, когда-то пришлось столкнуться с такой задачей и если я правильно понял вашу цель, то код будет приблизительно такой
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
procedure TForm1.Edit1Change(Sender: TObject);
const
digits: set of char = ['0'..'9'];         // диапазон символов, включающий только цифры
separators: set of char = ['.' , ','];  // диапазон символов, включающий только разделители
var
S: string;        // строка, которая будет равна Edit1.Text
i: word;          // счетчик символов строки
 
begin
if Edit1.text<>'' then  // Если Edit1 не пустой, то
 begin
 S:=Edit1.Text;                   // присваиваем строке S значение введенного текста
 for i:=1 to Length(S)-1 do   // проверяем каждый символ строки, не является ли он нулем
  begin
  if S[i]='0' then                 // если является, то проверяем пару вещей
  if (S[i+1] in digits) then    // если следующим символом после нуля является цифра, то возможно этот ноль - наш клиент на удаление                 
  if ((i=1) or not ((S[i-1] in digit) or (S[i-1] in separator))) then // если перед этим нулем не цифра и не разделитель, или если этот ноль первый в строке, то это точно наш клиент на удаление         
   begin
   delete (S, i, 1);      // удаляем его нещадно и решительно из строки S
   Edit1.Text:=S;       // теперь еще и из Edit1 удаляем его с глаз долой
   Edit1.SelStart:=i;   // если не написать эту строку, курсор переносится в начало Edit1, что не есть удобно (а так он остается в конце)                                
   end;
  end;
 end;
end;
Сразу скажу что код конечно нерациональный, но работает. А почему нерациональный - потому что при каждом изменении текста в Edit1 идет проверка начиная с первого символа строки. То есть повторно проверяются одни и те же символы по 100 раз грубо говоря. Я пытался избежать использования цикла, применяя параметр SelStart, то есть пытался проверять лишь только что введенные символы, а не все символы строки при каждом изменении текста в Edit1. Но к сожалению получилось лишь частично. Если будет время, постараюсь все же переписать эту процедуру без использования цикла. Но пока только так.

Добавлено через 19 минут
p.s. В строке 17 пара опечаток в названиях диапазонов: вместо digit следует читать digits, вместо separator - separators. Прошу прощения.
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
17.01.2016, 07:48 12
Mies_yli_Laidan, в Вашем коде нет никакой необходимости. Там итак все работает. Просто ТС'у нужно было придумать для себя проблему и раздуть из этого тему.
0
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 131
17.01.2016, 13:15  [ТС] 13
Спасибо большое, код работает отлично.
0
Эксперт Pascal/Delphi
4912 / 2781 / 853
Регистрация: 04.10.2012
Сообщений: 10,121
17.01.2016, 15:32 14
Цитата Сообщение от artem_0108 Посмотреть сообщение
код работает отлично
Вы даже не знаете, что работает, а что нет.

Не по теме:

В сети Интернет пополнение: еще одна смешанная масса г..нокода :)

0
17.01.2016, 15:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2016, 15:32
Помогаю со студенческими работами здесь

Delphi калькулятор
Привет, кто знает код калькулятора, который умел бы вычислять сложные примеры к примеру 2+3*5?

Калькулятор на Delphi (x^y)
В общем-то с самим калькулятором разобрался, но вот проблема: не знаю, как сделать так, чтобы можно...

Калькулятор на Delphi
Всем доброго времени суток! По просьбе пользователя PCK: Я покажу как создать простой калькулятор...

Калькулятор в delphi
Помогите пожалуйста срочно))) завтра сдавать)) как сделать, чтобы калькулятор считал, например:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru