Delphi если edit пустой то сообщение

Обновлено: 05.07.2024

Ввод и редактирование текста выполняется в специальных полях или областях формы. При необходимости пользователь может изменить отображаемые данные. Для этих целей система Delphi предлагает различные компоненты, например, Edit, MaskEdit, Memo, RichEdit и LabeledEdit.

Однострочный редактор, или поле редактирования (поле ввода), представляет собой поле ввода текста, в котором возможно отображение и изменение текста. В Delphi есть несколько однострочных редакторов, из них наиболее часто используется компонент Edit.

Компонент ввода и редактирования текста Edit

Компонент Edit позволяет вводить и редактировать с клавиатуры различные символы, при этом поддерживаются операции, такие как перемещение по строке с использованием клавиш управления курсором, удаление символов с помощью клавиш и , выделение части текста и др. Отметим, что у однострочного редактора отсутствует реакция на управляющие клавиши и .

Свойство CharCase

Для изменения регистра символов в поле редактирования служит свойство СharСase типа TEditcharCase, которое может принимать одно из трех значений:

  • ecLowerCase — текст преобразуется к нижнему регистру;
  • ecNormal — регистр символов не изменяется (по умолчанию);
  • ecUpperCase — текст преобразуется к верхнему регистру.

Свойство PasswordChar

При использовании компонента Edit для ввода пароля можно воспользоваться свойством PasswordChar типа Char, задающим символ для отображения в поле ввода. Этот символ при вводе текста появляется вместо фактически введенного символа. Например, после выполнения инструкций

в поле редактирования появится строка ******, в то время как в действительности свойство Text имеет значение — 'Пароль'.

Компонент MaskEdit

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

Свойство EditMask

Маска задается в свойстве EditMask типа string и представляет собой последовательность специальных кодов, определяющих для поля редактирования формат содержащегося в ней текста.

Маска состоит из разделенных символом трех полей:

  1. первое поле является собственно маской;
  2. второе поле— это символ, определяющий, считаются ли литеральные символы частью данных. По умолчанию используется 1, и литеральные символы маски являются частью не только значения, редактируемого в визуальном компоненте, но и значения, содержащегося в поле. Если вместо 1 установить символ о, то литеральные символы маски по-прежнему будут отображаться при редактировании значения, однако в поле не сохраняются. Литеральные символы удобно применять в качестве разделителей, например, при вводе телефонных номеров;
  3. третье поле содержит символ, используемый для указания незаполненных символов во вводимом тексте, по умолчанию это символ подчеркивания.

Если второе и/или третье поля не определены, то для них действуют значения по умолчанию.

В маске могут использоваться следующие специальные символы:

Примеры масок:

Для составления маски можно использовать редактор шаблонов (Input Mask Editor). Редактор шаблонов вызывается двойным щелчком мыши в поле значения свойства EditMask или командой Input Mask Editor контекстного меню.

Маска вводится в поле Input Mask, ее также можно выбрать из образцов в поле Sample Masks и затем изменить. Флажок Save Literal Characters управляет включением в маску литеральных символов, а поле Character for Blanks содержит символ, используемый для указания незаполненных позиций во входной строке. Поле Test Input позволяет проверить функционирование подготовленной маски. Маску также можно загрузить из файла с расширением dem, который выбирается в окне Open Mask File, открываемом нажатием кнопки Masks.

Подготовить маску можно и самому, но это более сложно. Удобно, воспользовавшись редактором маски, выбрать наиболее близкую к требуемой маску, а затем уже откорректировать ее вручную.

Компонент LabeledEdit

Компонент LabeledEdit представляет собой однострочный редактор с надписью и, в отличие от обычного однострочного редактора Edit, дополнительно имеет три свойства, управляющие надписью: EditLabel, LabelPosition и LabelSpacing.

Свойство EditLabel

Свойство EditLabel типа TBoundLabel указывает объект надписи, основные свойства которого (Caption, Alignment, AutoSize, Transparent, Color, Font) не отличаются от свойств рассмотренной ранее надписи Label.

Свойство LabelPosition

Свойство LabelPosition типа TLabeiPosition задает расположение надписи относительно поля редактирования и может принимать значения:

  • lpAbove (над полем) — по умолчанию;
  • lpBelow (под полем);
  • lpLeft (слева от поля);
  • lpRight (справа от поля).

Свойство LabelSpacing типа Integer указывает расстояние (в пикселах) между надписью и полем редактирования (по умолчанию 3).

Обработчик события onKeyPress

Для проверки информации, вводимой в редакторы, можно использовать обработчики событий нажатия клавиш, например обработчик события onKeyPress.

В следующем примере для редактора Edit1 установлено разрешение ввода только десятичных цифр:

В поле редактирования может содержаться одна строка без символа конца строки, поэтому при нажатии клавиши не выполняются никакие действия и в строку ничего не вводится. При необходимости программист должен сам написать код действий, связанных с нажатием клавиши . Чаще всего нажатие этой клавиши служит признаком окончания ввода информации в поле редактора, после чего следует перейти к другому элементу управления, т. е. передать ему фокус ввода, например, с помощью метода SetFocus или установки значения свойства ActiveControl.

Задать реакцию однострочного редактора на нажатие клавиши можно так:

Информация последовательно вводится в три поля, являющихся компонентами Edit1, Edit2 и Edit3. При окончании ввода в первое или второе поля нажатие клавиши автоматически активизирует очередное поле. Из третьего поля фокус ввода автоматически не передается. Передача фокуса ввода из разных полей реализована двумя способами: с использованием свойства ActiveControl формы и с помощью метода SetFocus.

Часто при окончании ввода в элемент редактирования и переходе к следующему (в порядке табуляции) элементу управления удобнее использовать разделяемый (общий) обработчик события, связанного с нажатием клавиши . Эта процедура должна быть общей для всех элементов редактирования и может выглядеть так:

При нажатии клавиши выполняется метод SelectNext, передающий фокус ввода следующему элементу управления. Процедура SelectNext (CurControl: TWinControl; GoForward, CheckTabStop: Boolean) имеет три параметра, из которых CurControl указывает оконный элемент управления, относительно которого выполняется передача фокуса. Параметр GoForward определяет направление передачи фокуса. Если его значение равно True, то фокус получает следующий элемент управления, в противном случае — предыдущий элемент управления. Параметр CheckTabStop определяет, нужно ли учитывать значение свойства TabStop элемента управления, который должен получить фокус. При значении True параметра элемент управления получит фокус, если его свойство Tabstop также имеет значение True.

Чтобы приведенная процедура вызывалась в качестве обработчика для всех трех редакторов, ее нужно включить в описание класса формы и указать в качестве обработчика события OnKeyPress:

Аналогично можно создать разделяемую процедуру, общую для нескольких компонентов (в том числе и разных, например, Edit и Memo), выполняющую обработку других событий.

Аналогичным образом выполняется обработка нажатия клавиши и других клавиш.


если edit пустое или =0 - вывести ошибку
Здравствуйте! Мне нужно сделать так, чтобы в Edit1 (туда нужно вводить размерность массива).

Если введён первый нуль в Edit,и не стоит запятая после него, выдать ошибку
Здравствуйте программисты! Подскажите пожалуйста, как Если введён первый нуль в Edit1,и не стоит.


Не учитывать пустые Edit
Как, в данном случае, не учитывать пустые Edit. То есть что бы программа сохраняла результаты.

Ребята подскажите, кто сталкивался с таким вопросом:
Для числового компонента Edit типа Integer, в Делфи7 нужно прописать условие, в котором нужно показать:

Если Edit пустой, то за этим последуют определённые инструкции.

Для символьного понятно: Edit1.text:=''
А вот как быть с числовым? Сразу скажу, что перевод в строку:IntToStr(Edit1.text):='', не вариант, потому что в условиях фигурируют только числовые компоненты Edit,если переведу в строку, то будет конфликт числовых со строковым.

Так все ведь много проще - достаточно запретить реакцию кнопки на нажатие, выставив его св-ву Enabled значение False, если содержимое того или иного Edit'а некорректно)

И сделать это удобнее всего в обработчиках событий OnChange и OnExit тех самых Edit'ов, содержимое которых напрямую влияет на возможность проведения тех или иных расчетов по нажатию кнопки.

Репутация: нет
Всего: нет

Если хоть один заполнен то выполнение кода.

Репутация: нет
Всего: 40

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
if (edit1.text='') and (edit2.text='') and (edit3.text='') and (edit4.text='') and (edit5.text='') and (edit6.text='') and (edit7.text='') and (edit8.text='') and (edit9.text='') and (edit10.text='') then
begin
if MessageDlg('Вы не ввели ни одного параметра, продолжить. ', mtConfirmation, [mbOk, mbCancel], 0) = mrOK then qwe;
end
else
begin
qwe;
end;
end;

Репутация: нет
Всего: нет

Код

procedure TForm1.Button1Click(Sender: TObject);
begin
if (edit1.text='') and (edit2.text='') and (edit3.text='') and (edit4.text='') and (edit5.text='') and (edit6.text='') and (edit7.text='') and (edit8.text='') and (edit9.text='') and (edit10.text='') then
begin
if MessageDlg('Вы не ввели ни одного параметра, продолжить. ', mtConfirmation, [mbOk, mbCancel], 0) = mrOK t hen form2.show;
end
else
begin
form3.show;
end;
end.

Не ругается и ни чего не происходит!! что тут не так??

Репутация: 1
Всего: 78

gambit, у тебя код не заработает, так как процедура qwe стоит ниже по коду, чем процедура её вызвавшая.

iOS Lead Developer

Репутация: 3
Всего: 128

user posted image

Репутация: 1
Всего: 122

Код

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=1 to 10 do
if(Length(TEdit(FindComponent('Edit' + IntToStr(i))).Text)=0)then
begin
ShowMessage('Enter some in '+IntToStr(i)+' Edit');
Exit;
end;
Form3.show;
end;
Цитата(DenRip @ 16.6.2007, 12:06 )
Не ругается и ни чего не происходит!! что тут не так??

Репутация: 3
Всего: 15

так дык. условие не правильно поставлено. , логику нужно развивать.

не and а or

Но я бы посоветовал код Rodman, (а если едитов будет 20, 30, 40, ты будешь все вручную писать. )

Репутация: нет
Всего: нет

Как
gambit, подсказал

Да это грамотно будет, спасибо!! бум использовать.
А теперь я позволю себе задать вам нескроный вопрос!

мне надо запретить ввод текста в едиты, только цифры, .
Во как.

Поскольку в моем коде пустые edit учитываются программой и программа удаляет еще и пробелы.


1 ответ 1

Вот так, например:


@Татьяна пожалуйста, не отвечайте комментариями типа "спасибо", они не несут ценной информации для других посетителей. Лучшая благодарность - стрелка вверх, галка принять, и то что вы стали чуточку умнее )

Я, поняла и в преть буду соблюдать эти правила. А умнее я стала :) благодаря вашей критике + подсказкам. Так что испытываю к Вам только уважение.

Edit представляет собой однострочное редактируемое тестовое поле. Оно помогает вводить или отображать текстовые строки, с его помощью можно сделать поле для ввода паролей для авторизации пользователей.


Центральное свойство компонента свойство Text, оно содержит отображаемую строку.

С помощью обработчика события onChange можно контролировать вводимый пользователем текст.

Edit2.Font.Size:=10+ length(Edit1.Text);
if length(Edit1.Text)>3 then Edit2.Color:=clYellow;
if length(Edit1.Text) 6 then Edit2.Color:=clLime;
Edit2.Text:=Edit1.Text;

Для автоматического преобразования вводимых букв в заглавные или прописные используйте свойство компонента CharCase:

Если есть вопросы, спрашивайте в комментариях, вам всегда помогут!

Читайте также: