Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
0 / 0 / 0
Регистрация: 13.08.2022
Сообщений: 93

Как сравнить числа в Edit (с дробью) и ComboBox с вводом условий в разные ComboBox?

12.04.2025, 04:12. Показов 2450. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сравнить числа в edit(с дробью) и combobox с вводом условий в разные combobox
(помогите разобрать с кодом если можно, условный пример прилагаю)

1. При вводе числа в edit3 (в примере - это А+В после расчета=С -кнопка расчет) определить диапазон чисел в combobox1 автоматически ( к примеру - с 0 до 10 и с 11 до 20) как сделать?
2. Одновременно с выбором диапазона(combobox1) выбрать в combobox2 (0,1,2 и тд или 11,12,13 и тд) значения и
одновременно прописать в combobox3 отдельный номер (типа №1 или №2).
3. При выборе диапазона запретить выбор других значений (цифры)
4. При вводе определить точку или запятую для системы (постоянно ругается система на разных компах)

Гуру Delfi поможете в данном примере разобраться?
Вложения
Тип файла: rar Вопрос как сделать выбор чисел.rar (168.0 Кб, 25 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2025, 04:12
Ответы с готовыми решениями:

Edit Label (линейный) Panel, Edit Label (строки), Memo (одномер-ный),ComboBox ListBox , RadioButton (RadioGroup) CheckBox ,StringGrid (ввод пароля)
1)Edit Label (линейный) Panel Проверить истинность высказывания: "Цифры данного трехзначного...

При вводе в один Edit, во второй Edit автоматически вводится то же самое
Ввел я допустим в Edit1- "АБВГД", нажал на кнопку и "АБВГД" появилась во втором эдите, как такое...

написать процедуру "ввод" которая введенное слово в edit перемещает в список listbox и процедуру "очистить", которая очищает поле edit
написать процедуру "ввод" которая введенное слово в edit перемещает в список listbox и процедуру...

33
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
13.04.2025, 12:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от VVME Посмотреть сообщение
а в едит при вводе чисел
а вот сразу нельзя было именно так написать?

Добавлено через 2 минуты
Так какие значения вводить можно?

Добавлено через 51 секунду
и сколько чисел может быть после запятой?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.04.2025, 12:56
Лучший ответ Сообщение было отмечено VVME как решение

Решение

Цитата Сообщение от VVME Посмотреть сообщение
но мне исключение нужно не в комбике, а в едит при вводе чисел
Странно. А до этого запрос был:
Цитата Сообщение от VVME Посмотреть сообщение
При выборе диапазона запретить выбор других значений
"Выбор", а не "ввод".

Ну и из ответа
Цитата Сообщение от AzAtom Посмотреть сообщение
Delphi
1
  cbb1.Enabled := false;
можно было самостоятельно попробовать по аналогии:
Delphi
1
  edt1.Enabled := false;
Добавлено через 6 минут
Последний вариант, как понял:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
procedure TForm1.btn1Click(Sender: TObject);
var
  A, B, C: double;
begin
  A := StrToFloat(Edt1.Text);
  B := StrToFloat(Edt2.Text);
  C := A + B;
  edt3.Text := FloatToStr(C) ;
 
  if (c > 6) and (c <= 9) then
  begin
    cbb1.ItemIndex := 0;
    cbb2.ItemIndex := 0; // Группа, 0, 1, 2
  end;
 
  if (c > 9) and (c <= 15) then
  begin
    cbb1.ItemIndex := 0;
    cbb2.ItemIndex := 1; // Группа, 0, 1, 2
  end;
 
  if (c > 15) and (c <= 20) then
  begin
    cbb1.ItemIndex := 1;
    cbb2.ItemIndex := 0; // Группа, 0, 1, 2
  end;
 
  if (c > 20) and (c <= 25) then
  begin
    cbb1.ItemIndex := 1;
    cbb2.ItemIndex := 1; // Группа, 0, 1, 2
  end;
 
  if (c > 25) and (c <= 30) then
  begin
    cbb1.ItemIndex := 1;
    cbb2.ItemIndex := 2; // Группа, 0, 1, 2
  end;
 
  if (c > 30) and (c <= 40) then
  begin
    cbb1.ItemIndex := 2;
    cbb2.ItemIndex := 0; // Группа, 0, 1, 2
  end;
 
  if (c > 40) and (c <= 50) then
  begin
    cbb1.ItemIndex := 2;
    cbb2.ItemIndex := 1; // Группа, 0, 1, 2
  end;
 
  if (c > 50) and (c <= 60) then
  begin
    cbb1.ItemIndex := 2;
    cbb2.ItemIndex := 2; // Группа, 0, 1, 2
  end;
 
end;
А наличие значения в списке лучше, наверное, проверять в текстовом виде, приведя их к единому виду.
0
0 / 0 / 0
Регистрация: 13.08.2022
Сообщений: 93
13.04.2025, 12:56  [ТС]
AzAtom, нет мне не нужна блокировка едит, мне нужно чтобы кроме 0,1,2,3,5,...10 (11,11,12,13,14...20) не вводилось ничего- такое можно сделать?
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
13.04.2025, 13:01
Цитата Сообщение от VVME Посмотреть сообщение
мне нужно чтобы кроме 0,1,2,3,5,...10 (11,11,12,13,14...20) не вводилось ничего
Если перевести на русский - Вам надо вводить только цифры и введенное число не может превышать 20, так? Если нет, то будьте добры объяснить понятнее, где и что можно вводить.

Добавлено через 1 минуту
Блин, но тогда как может число С принимать значения более 40?

Добавлено через 1 минуту
вот как-то так понял ситуацию, но далеко не факт, что правильно
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function CheckEntry(sNum: String; var x: double): boolean;
var i: integer;
begin
  for i := 1 to Length(sNum) do
    if (sNum[i] = ',') or (sNum[i] = '.') then sNum[i] := DecimalSeparator;
  result := TryStrToFloat(sNum, x);
end;
 
procedure TForm1.btn1Click(Sender: TObject);
var
  A, B, C: double;
  err_msg: String;
  k: integer;
begin
  err_msg := EmptyStr;
  A := 0; B := 0;
  if not CheckEntry(Edt2.Text, B) then err_msg := 'Не введено/введено неверно число B';
  if not CheckEntry(Edt1.Text, A) then err_msg := 'Не введено/введено неверно число A';
  if Length(err_msg) > 0 then begin
    Application.MessageBox(PChar(err_msg), 'ERROR!!!', MB_ICONERROR);
    Exit;
  end;
  C := A + B;
  Edt3.Text := FloatToStr(C);
 
  if C <= 15 then cbb1.ItemIndex := 0
  else if C <= 30 then cbb1.ItemIndex := 1
         else cbb1.ItemIndex := 2;
 
  case cbb1.ItemIndex of
    0 : if C <= 9 then cbb2.ItemIndex := 0
        else cbb2.ItemIndex := 1;
    1 : if C <= 20 then cbb2.ItemIndex := 0
        else if C <= 25 then cbb2.ItemIndex := 1
               else cbb2.ItemIndex := 2;
    2 : if C <= 40 then cbb2.ItemIndex := 0
        else if C <= 50 then cbb2.ItemIndex := 1
               else cbb2.ItemIndex := 2;
  end;
 
  k := cbb3.Items.IndexOf(Edt3.Text);
  if k = -1 then Form2.ShowModal else cbb3.ItemIndex := k;
end;
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.04.2025, 13:03
Цитата Сообщение от VVME Посмотреть сообщение
мне нужно чтобы кроме 0,1,2,3,5,...10 (11,11,12,13,14...20) не вводилось ничего- такое можно сделать?
Куда? В Edit? Или в ComboBox? Нормально напишите что вам нужно...
0
0 / 0 / 0
Регистрация: 13.08.2022
Сообщений: 93
13.04.2025, 13:11  [ТС]
в эдит-не вводилось - в что что в комбоках, то заведено заранее в программе

Добавлено через 3 минуты
AzAtom , В Еdit конечно, в ComboBox все заводится заранее в программе и ничего не добавляется
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.04.2025, 13:14
Чтобы не вводилось в Edit это нужно при выходе из Edit проверять введённое значение и, например, блокировать кнопку расчёта.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
type
  TForm1 = class(TForm)
    edt1: TEdit;
    cbb1: TComboBox;
    cbb2: TComboBox;
    edt2: TEdit;
    edt3: TEdit;
    lbl1: TLabel;
    btn1: TButton;
    cbb3: TComboBox;
    lbl2: TLabel;
    lbl3: TLabel;
    lbl4: TLabel;
    lbl5: TLabel;
    lbl6: TLabel;
    lbl7: TLabel;
    procedure btn1Click(Sender: TObject);
    procedure edt1Exit(Sender: TObject);
    procedure edt2Exit(Sender: TObject);
 
  private
    { Private declarations }
    e1, e2: boolean;
  public
    { Public declarations }
  end;
...
implementation
...
 
 
procedure TForm1.edt1Exit(Sender: TObject);
var
  d: double;
begin
  e1 := TryStrToFloat(edt1.Text, d) and (d > 6) and (d < 60);
  btn1.Enabled := e1 and e2;
end;
 
procedure TForm1.edt2Exit(Sender: TObject);
var
  d: double;
begin
  e2 := TryStrToFloat(edt2.Text, d) and (d > 6) and (d < 60);
  btn1.Enabled := e1 and e2;
end;
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
13.04.2025, 13:28
AzAtom, а два одинаковых обработчика - оно зачем?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.04.2025, 13:31
D1973, они не одинаковые, в одном обновляется e1, а в другом e2. Ну и у ТС числа в диапазоне могут быть разными.
0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
13.04.2025, 13:38
Цитата Сообщение от AzAtom Посмотреть сообщение
в одном обновляется e1, а в другом e2.
ну так в одном же обработчике можно сделать, не прибегая к глобальным переменным. Не?

Добавлено через 56 секунд
Цитата Сообщение от AzAtom Посмотреть сообщение
Ну и у ТС числа в диапазоне могут быть разными.
А это уже пусть сам разруливает, раз всю информацию клещами тянуть надо.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
13.04.2025, 13:47
Цитата Сообщение от D1973 Посмотреть сообщение
А это уже пусть сам разруливает, раз всю информацию клещами тянуть надо.
Ну это жэж классика.

0
Модератор
 Аватар для D1973
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 3
13.04.2025, 16:27
Verevkin, ну, типа того...
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
13.04.2025, 17:28
Цитата Сообщение от D1973 Посмотреть сообщение
ну, типа того...
Не "типа того", а 146%.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
13.04.2025, 18:38
Цитата Сообщение от D1973 Посмотреть сообщение
Не?
Так-то да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.04.2025, 18:38

Запрет на ввод чисел в EDIT, пока не будет заполнено другое поле edit
Здравствуйте! Дело в том, что мне нужно сделать так, чтобы одно поле edit нельзя было заполнять до...

Как число из одного edit'a ввести в другой edit только в 10 раз меньше
Есть Edit1 в него вводится число типа integer то есть целое и есть Edit2 изначально пустой. Когда...

Как из Edit первый символ сравнить с заданным
помогите сделать задачу, которая заключается в следующем: ЕСть форма с 5-ю эдитами, кнопкой и...

Как корректно сравнить версии программы, записанные в двух Edit
Доброго времени суток дорогие форумчани))) Сегодня я столкнулся с проблемой по сравнению версий...

как сравнить значение "0000" и поля edit
Давно не пользовалась языком Паскаль и что-то забыла. Пожалуйста, подскажите, где я ошиблась. ...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru