gekasa 1 / 1 / 0 Регистрация: 21.09.2014 Сообщений: 26 |
||||
1 |
||||
11.11.2015, 21:57. Показов 12125. Ответов 18 Метки нет (Все метки)
Задача на площадь треугольника за 3 отрезками
Помогите вывести ошибку , если Edit пустые , при это также должно выдавать ошибку , если не является треугольником
1 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
11.11.2015, 21:57 |
Ответы с готовыми решениями: если edit пустое или =0 — вывести ошибку Если введён первый нуль в Edit,и не стоит запятая после него, выдать ошибку Если строка- запись целого числа, то вывести 1; если вещественного , то вывести 2; если строку нельзя преобразовать в число, то вывести 0. Не учитывать пустые Edit 18 |
droider 4896 / 2766 / 851 Регистрация: 04.10.2012 Сообщений: 10,075 |
||||||||
11.11.2015, 22:33 |
2 |
|||||||
вывести ошибку , если Edit пустые
выдавать ошибку , если не является треугольником
0 |
1 / 1 / 0 Регистрация: 21.09.2014 Сообщений: 26 |
|
11.11.2015, 23:03 [ТС] |
3 |
Не работает почему то, я в Button1.Click вставляю , правильно ?
0 |
пофигист широкого профиля 4662 / 3096 / 855 Регистрация: 15.07.2013 Сообщений: 17,865 |
|
12.11.2015, 00:25 |
4 |
я в Button1.Click вставляю , правильно ? Не знаю правильно ли ты вставляешь в Button1.Click, но попробуй вставить в Button2Click.
0 |
3035 / 2217 / 511 Регистрация: 11.09.2009 Сообщений: 8,196 |
|
12.11.2015, 02:28 |
5 |
if (c=a+b) or … (‘Не является треугольником’); if (c>=a+b) …
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 20:32 |
6 |
Ребята подскажите, кто сталкивался с таким вопросом: Если Edit пустой, то за этим последуют определённые инструкции. Для символьного понятно: Edit1.text:=»
0 |
4896 / 2766 / 851 Регистрация: 04.10.2012 Сообщений: 10,075 |
|
30.11.2015, 20:52 |
7 |
в условиях фигурируют только числовые компоненты Edit поясните
0 |
Евгик 0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
||||
30.11.2015, 21:11 |
8 |
|||
Поясняю: Есть условие, в котором хочу учесть 2 эдита числового типа. Одному присвоить значение 0, а второму пусто.
0 |
2649 / 2270 / 279 Регистрация: 24.12.2010 Сообщений: 13,723 |
|
30.11.2015, 21:37 |
9 |
то при нажатии на кнопку обработать Так все ведь много проще — достаточно запретить реакцию кнопки на нажатие, выставив его св-ву Enabled значение False, если содержимое того или иного Edit’а некорректно) И сделать это удобнее всего в обработчиках событий OnChange и OnExit тех самых Edit’ов, содержимое которых напрямую влияет на возможность проведения тех или иных расчетов по нажатию кнопки.
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 21:59 |
10 |
Я вижу, толковые ответы у тебя есть, за что спасибо! Подумаю, как их можно применить!
0 |
4896 / 2766 / 851 Регистрация: 04.10.2012 Сообщений: 10,075 |
|
30.11.2015, 22:00 |
11 |
Может лучше вести обсуждение в отдельно созданной для этого теме?
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 22:01 |
12 |
Согласен!
0 |
2649 / 2270 / 279 Регистрация: 24.12.2010 Сообщений: 13,723 |
|
30.11.2015, 22:21 |
13 |
понятие корректности содержимого эдита, здесь не актуально! Хренасе заява) Да как же не актуально-то, если значение «пусто» невозможно преобразовать ни в какое число в принципе, хоть ты из штанов выпрыгни ?)
0, целое число, число с запятой Чем, по-твоему, 0 отличается от 0.00000 ? Какую из ф-ций преобразования ты будешь использовать, заранее не зная что юзер впендюрит в Edit — «0» или «0.00000» ? Тот же самый вопрос тебе на засыпку для случая впендюривания «5» и «5.000000000000000»)
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 22:31 |
14 |
Блокировка стоит для эдита в событии OnKeyPress, пользователь сможет ввести только числа!
0 |
2649 / 2270 / 279 Регистрация: 24.12.2010 Сообщений: 13,723 |
|
30.11.2015, 22:35 |
15 |
пользователь сможет ввести только числа! Ну а я о чем ?) Вот он ввел «5» — это он число ввел ? Число. И тут же вопрос — в какой тип ты будешь преобразовывать то что он ввел ?
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 22:50 |
16 |
Ну в моём случае случае он не введет число с точкой. Блокировка сработает.
0 |
2649 / 2270 / 279 Регистрация: 24.12.2010 Сообщений: 13,723 |
|
30.11.2015, 22:53 |
17 |
в событии OnKeyPress проставлена блокировка на все кроме чисел Сказка про белого бычка) И «5» — число, и «5.000» — тоже число)
0 |
0 / 0 / 0 Регистрация: 30.11.2015 Сообщений: 33 |
|
30.11.2015, 23:47 |
18 |
да, с тобой не поспоришь! не буква.
0 |
Arcor 5694 / 2285 / 466 Регистрация: 20.11.2009 Сообщений: 7,697 Записей в блоге: 1 |
||||
01.12.2015, 02:11 |
19 |
|||
а если отследить это все чудо вот так
если будет введено целое — оно пропустится полностью без каких либо сообщений, будет это вещественное число, первая проверка зафиксирует, что число не является целым, во втором случае пропустится или в чем вся конкретная соль сего задания? в k и l будут возвращены соответствующие результаты, если проверка будет успешной, в них запишется обработанное значение, иначе в этих 2 переменных будет вероятнее всего мусор, который возможно выдаст крит при дальнейших преобразованиях
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
01.12.2015, 02:11 |
Помогаю со студенческими работами здесь Если хотя бы один из Edit-ов или ячейка StringGrid не заполнены, то вывести сообщение об ошибке Если a>b, то вывести дату рождения, если a=b, то вывести ФИО, если a<b, то вывести количество пальцев на руке Если вводит в объект Edit отрицательное число, то выдает ошибку «-» is not a valid integer value». Как исправить? implementation {$R *.dfm} procedure… из таблицы DBGrid нужно вывести в edit количество строк из столбца Статус со значением работает, вот код, но выдает ошибку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 19 |
Читайте также:
|
Filter – это строка, которая служит для задания критерия, по которому производится выборка записей. В ней нужно указать имя поля, по которому идет фильтрация, затем = ( если нужно полное совпадение) либо LIKE (если мы хотим организовать поиск и по части слова) и само значение, по которому выбираются записи.
Допустим, есть таблица с полями Фамилия, Имя, Отчество. Нужно фильтровать данные по одному из полей (на выбор), т.е. пользователь должен иметь возможность выбрать по какому из полей фильтровать данные. Задача стоит такая отсеивать данные по мере ввода искомой строки в Edit.
Расположим на форме компоненты Combobox и Edit. Combobox будет использоваться для выбора столбца, а в Edit будет вводится искомое слово. Заполняем свойство Items в Combobox именами столбцов. Затем в обработчике события Edit1Change пишем следующее:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Length(Edit1.Text) > 0 then
begin
ADOTable1.Filtered:=false;
ADOTable1.Filter:=Combobox1.Text + ‘ LIKE ‘ + #39 + Edit1.Text + ‘%’ + #39;
ADOTable1.Filtered:=true;
end
else ADOTable1.Filtered:=false;
end;
Прокомментирую код: если Edit не пустой (при пустом вылетит ошибка), отключаем фильтрацию, формируем строку фильтра, запускаем фильтрацию, если Edit пустой — отключаем фильтрацию.
В самом простом случае, если не нужно давать возможность выбора определенного столбца, а фильтровать по одному конкретному полю(например «ФАМИЛИЯ»), строка фильтра выглядела бы следующим образом: ADOTable1.Filter:=’ФАМИЛИЯ LIKE ‘+ #39 + Edit1.Text + ‘%’ + #39;
Строка-условие фильтра означает следующее — выбрать те записи из столбца ‘ФАМИЛИЯ’, которые начинаются с тех же символов, что и набраны в Edit1.Text.
Особое внимание обратите на пробелы — «потеряете» пробел — не будет работать.
Ключевое слово LIKE позволяет по заданному шаблону сравнивать строки. При этом нужно знать следующее:
символ ‘_’ (подчеркивание) – заменяет любой одиночный символ,
символ ‘%’ (процент) – заменяет любую последовательность из символов.
Знак #39 — означает номер символа ‘ (одинарная кавычка) в кодовой таблице ASCII. Дело в том, что значение на фильтрацию нужно указывать в одинарных кавычках, а так как одинарные кавычки используются в Delphi для ограничения строк, то чтобы внутри строки поставить одинарную кавычку, её нужно поставить дважды. Конструкция #39 + Edit1.Text + ‘%’ + #39 идентична »» + Edit1.Text + ‘%’ + »».
Если, например, нужно искать любое вхождение искомой строки в записях, а не начиная с первого символа, то строка фильтра выглядела бы следующим образом:
ADOTable1.Filter:=’ФАМИЛИЯ LIKE ‘ + #39 + ‘%’ + Edit1.Text + ‘%’ + #39;
Заметили ‘%’ перед Edit1.Text? Переводится так — выбрать те записи из столбца ‘ФАМИЛИЯ’, в которых есть последовательность символов, которые набраны в Edit1.Text.
Часто нужно фильтровать по нескольким столбцам. Тут применяется немного иная конструкция.
Добавим еще два компонента Edit на форму. Combobox использовать не будем, его можно удалить, т.к. у нас каждое поле (Edit) будет отвечать за ввод информации по определенному столбцу. Еще добавим кнопочку, она будет запускать фильтрацию. Казалось бы, следующая конструкция должна корректно работать:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOTable1.Filtered:=false;
ADOTable1.Filter:=’ФАМИЛИЯ LIKE ‘+ #39 + Edit2.Text + ‘%’ + #39 +’ AND ‘ + ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39 + ‘ AND ‘ + ‘ОТЧЕСТВО LIKE ‘ + #39 + Edit4.Text + ‘%’ + #39;
ADOTable1.Filtered:=true;
end;
Она и работает, но только в том случае, если данные введены во все три поля. Если одно из полей ввода(Edit) пустое — вылетает ошибка «Аргументы имеют неверный тип». Впрочем, есть способ с этим бороться. Сначала код:
procedure TForm1.Button1Click(Sender: TObject);
var filtr, // формируемая строка фильтра
add: string;
begin
ADOTable1.filtered:=false;
filtr:=»;
if length(edit2.text) > 0 then
filtr:= ‘ФАМИЛИЯ LIKE ‘+ #39 + Edit2.Text + ‘%’ + #39;
if length(edit3.text) > 0 then
begin
if length(filtr) > 0 then add:= ‘ and ‘ else add:=»;
filtr:=filtr + add + ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39;
end;
if length(edit4.text) > 0 then
begin
if length(filtr) > 0 then add:= ‘ and ‘ else add:=»;
filtr:=filtr + add + ‘ОТЧЕСТВО LIKE ‘+ #39 + Edit4.Text + ‘%’ + #39;
end;
if length(filtr) > 0 then
begin
ADOTable1.Filter:= filtr;
ADOTable1.filtered:=true;
end
else Showmessage(‘Все поля пусты!’);
end;
Смысл такой: нужно провести проверку, пустое поле ввода или нет, а затем уже формировать строку фильтра. Причем начиная со второго поля ввода нужно проверять и строку фильтра. Это нужно для последующего правильного формирования строки.
Например, если поле Edit2 (Фамилия) пустое, то соответственно и строка фильтра будет пуста (filtr:=») , а, например, поле Edit3 (ИМЯ) заполнено, это значит, строка фильтра должна иметь вид ‘ИМЯ LIKE ‘ + #39 + Edit3.Text + ‘%’ + #39 , а не ‘ and ‘ + ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39 , (т.е. без ‘ and ‘ вначале). Следующий фрагмент кода это и выполняет:
…..
if length(edit3.text) > 0 then
begin
if length(filtr) > 0 then add:= ‘ and ‘ else add:=»;
filtr:=filtr + add + ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39;
end;
…..
Если Edit3 не пустое, то проверяем строку фильтра(filtr) если она не пуста, то прибавляем к сторке фильтра ‘ and ‘ + ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39, если пуста, то просто ‘ИМЯ LIKE ‘+ #39 + Edit3.Text + ‘%’ + #39.
Присваиваем сформированную строку(filtr) свойству ADOTable1.Filter и запускаем фильтрацию.
…..
if length(filtr) > 0 then
begin
ADOTable1.Filter:= filtr;
ADOTable1.filtered:=true;
end
else Showmessage(‘Все поля пусты!’);
…..
Соответственно, если на этом этапе filtr=», значит, ни одно из полей не было заполнено, о чем и выводим соответствующую надпись.
Кроме операции and можно использовать и другие логические операции or, not, xor, при формирования строки-условия фильтрации по нескольким столбцам, хотя такая необходимость возникает достаточно редко.
8. Теперь рассмотрим организацию поиска через ADOQuery. Поиск можно осуществлять как на текущей, так и на другой форме.
9. Приступим к организации самого поиска. Для этого нам нужен компонент ADOQuery. Предварительно не забудьте «познакомить» формы и юниты друг с другом (см. рисунок ниже).
После этого в свойстве Connection компонента ADOQuery станет доступен компонент ADOConnection с формы1.
Следующее свойство, самое важное, отвечающее за сам поиск – свойство SQL. В него мы должны внести запрос, формирующий результирующую таблицу. К примеру, запрос на рисунке выбирает все поля из таблицы base, в которых значение поля price равно 55000. Последнее свойство, которое нужно указать – свойство Active устанавливаем в true.
Для отображения результата поиска нужны еще 2 компонента: DataSource (в свойстве DataSet указываем ADOQuery) для привязки результата к сетке таблицы на форме и сама таблица DBGrid (в свойстве DataSource указываем тот DataSource, который только что поместили на форму). Результат должен уже отобразиться в таблице.
10. Если вы хотите осуществлять несколько видов поиска, не обязательно для каждого из них делать отдельную форму и использовать отдельный компонент ADOQuery. К примеру, можно организовать это следующим образом:
Т.е. вносить значение в свойство SQL не вручную, а программно, по нажатию на кнопку ИСКАТЬ, в зависимости от выбранной радиокнопки. Это можно сделать при помощи команды ADOQuery.SQL.Add(…). В скобках указывается строка запроса.
Дата добавления: 2015-11-28; просмотров: 389 | Нарушение авторских прав
mybiblioteka.su — 2015-2023 год. (0.015 сек.)
← →
новичок_из_сыктывкара ©
(2004-03-30 18:39)
[0]
Люди помогите надопроверить пустая ли Edit ? если пустая то messagebox? если что то есть то тогда выполнять дальше…вроде все правильно, но что то не получается…может подскажете в чем ошибка, или свой метод…Очень прошу помочь…)
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
d,e,r:real;
kd,ke:real;
code:integer;
begin
e:=strtofloat(edit3.text);
if edit3.Text=»» then application.MessageBox(PChar(введи курс evro»), «Ошибка», MB_OK);
d:=strtofloat(edit4.text);
if edit4.Text=»» then application.MessageBox(PChar(введи курс dollar»), «Ошибка», MB_OK);
r:=strtofloat(edit1.text);
if edit1.Text=»» then application.MessageBox(PChar(введи количество рублей»), «Ошибка», MB_OK);
try
ke:=r/e;
kd:=r/d;
except on EZeroDivide do application.MessageBox(PChar(«Ââåäè êóðñ èí. âàëþòû-äåëåíèå íà íîëü+»), «Îøèáêà», MB_OK);
end;
edit2.text:=floattostr(ke);
edit5.text:=floattostr(kd);
end;
← →
Smithson ©
(2004-03-30 18:42)
[1]
Что именно не получается-то? Телепатов нету
← →
новичок_из_сыктывкара ©
(2004-03-30 18:43)
[2]
в общем не выводит сообщение об ошибке…
← →
panov ©
(2004-03-30 18:44)
[3]
>новичок_из_сыктывкара © (30.03.04 18:43) [2]
в общем не выводит сообщение об ошибке…
А что выводит?
← →
имя
(2004-03-30 18:45)
[4]
if (Edit3.Text = «») then raise Exception.Create(«Введите курс Euro»);
P.S. А в чем ошибка-то?
← →
Smithson ©
(2004-03-30 18:46)
[5]
У тебя в корне неверный подход. Если в строке не число (или строка пустая), то StrToFloat выдаст исключение. Поэтому после нее проверять строку на отсутсвие значения бессмысленно — это нужно делать до. Или не делать вовсе, а заключать каждый StrToFloat в try except и реагировать на ошибку тама.
← →
PVOzerski ©
(2004-03-30 18:46)
[6]
>PChar(введи
апостроф Пушкин введет? И телепатия не требуется. На будущее: просьба писать внятно, программа не компилируется или работает, но не так
← →
новичок_из_сыктывкара ©
(2004-03-30 18:47)
[7]
надо что бы выводилась не виндосовское сообщение об ошибке а отлавливалась програмно, а она не отлавливается
← →
PVOzerski ©
(2004-03-30 18:51)
[8]
>e:=strtofloat(edit3.text);
>if edit3.Text=»» then application.MessageBox(PChar(введи курс >evro»), «Ошибка», MB_OK);
Дык надо же сначала проверять содержимое, а потом strtofloat
← →
Smithson ©
(2004-03-30 18:51)
[9]
виндосовское сообщение об ошибке
Такового зверя здесь нет в принципе. Все сообщения об ошибках выдает твоя прогамма. Те ошибки, которые ТЫ не обработал, обработает код Borland`а и выдаст стандартное уведомление об ошибке. Не нравиться оно — обрабатывай ошибки сам :))
А windows, по-моему, только про Access Violation ругается сама, поскольку защита ресурсов — привелегия OC.
← →
новичок_из_сыктывкара ©
(2004-03-30 18:51)
[10]
всем спасибо огромное
← →
имя
(2004-03-30 18:56)
[11]
1. try
E := StrToFloat(Edit3.Text);
except
on Excp: Exception do // что-то сделать
end;
2.if (Edit3.Text = "") then
begin
ShowMessage("Введите курс Euro");
Exit;
end;
E := StrToFloat(Edit3.Text);
3.if (Edit3.Text = "") then raise Exception.Create("Введите курс Euro");
E := StrToFloat(Edit3.Text);
4….
← →
новичок_из_сыктывкара ©
(2004-03-30 18:57)
[12]
Если вы разрабатываете программу на Delphi, то вероятно, вам придется столкнуться с ситуацией, когда пользователь не заполнит обязательные поля формы приложения. В таком случае важно сообщить пользователю о необходимости заполнения этих полей.
Для проверки пустоты поля ввода (edit), в Delphi можно использовать следующий код:
if (Edit1.Text = '') then
ShowMessage('Введите значение для поля');
Этот код проверяет содержимое поля Edit1 и, если оно пустое, показывает сообщение с просьбой ввести значение для поля.
Также можно добавить проверку на пробелы и другие символы:
if Trim(Edit1.Text) = '' then
ShowMessage('Введите значение для поля');
Этот код удаляет пробелы в начале и конце строки и проверяет, что остаток строки не пустой.
Editing Databases in Delphi — Editing a current record
DELPHI Урок 3 Создание БД, добавление, удаление, изменение записей
Программирование в Delphi Урок 3 2 Работа с текстом, строковые функции Length, Pos и другие
Программирование в Delphi Урок 5. Массивы и циклы, цикл for, глобальные переменные. Array
[Новые уроки по Lazarus] №3 Компонент Label и Edit. Работа с полем ввода данных.
How to Synchronize or Align a BMW ECU DME to the EWS security system ISN
DELPHI Исправляем ошибки прошлого урока под номером 7 =)
Пример использования компонента KRIniConfig в Delphi
Уроки программирования в Lazarus. Урок №3. Работа с полем ввода, компонентом Edit
При изменении TEdit процедура автоматически начинает подсчёт суммы, и если очистить поле TEdit, то высвечивается ошибка » »is not a valid integer value «, можете подсказать, что можно сделать? Заранее благодарю за ответ.
- delphi
- edit
задан 16 дек 2020 в 22:09
1
-
можно при подсчете суммы проверить, пустая ли строка. и если пустая то использовать при вычислениях 0, не вписывая в сам едит ничего
16 дек 2020 в 22:33
1 ответ
Можно использовать функцию IntToStrDef
, вместо IntToStr
ответ дан 17 дек 2020 в 8:50
Герман БорисовГерман Борисов
10.3k14 серебряных знаков37 бронзовых знаков