edit delphi



Edit в делфи

Автор Аццкий скорпиончег задал вопрос в разделе Другие языки и технологии

Проверка Edit в Delphi и получил лучший ответ

Ответ от Gennady[гуру]
Доброго времени суток.
Трудно не зная тонкостей задачи дать вменяемый ответ. Попробую в качестве примера показать куски из рабочего проекта. На форме несколько экземпляров TEdit, корректными значениями которых являются только цифры. Процесс расчета запускается по нажатию кнопки. Обработчик клика делаем таким.
procedure TForm1.btnCalcClick(Sender: TObject);
begin
if not (ValidData(i1, Edit1) and
ValidData(i2, Edit2) and
ValidData(i3, Edit3) and
ValidData(i4, Edit4) and
ValidData(i5, Edit5)) then Exit;
if (ActionID < 9) or (btnCalc.Caption = 'Принять') then AddElements
else CalcIntersect;
end;
i1 .. i5 - локальные поля формы (не спрашивайте почему так сделано) . Т. е. перед запуском вычислений просто проверяем содержимое едитов. Эта миссия возложена на метод
function TForm1.ValidData(var i: Longint; Edit: TEdit): Boolean;
begin
Result := True;
if Edit.Visible then begin
try
i := StrToInt(Edit.Text);
except
DrawErrMessage(ErrMsg[eMsgDataError]);
ActiveControl := Edit;
Result := False;
end;
end;
end;
В методе проверяется видимость элемента, поскольку в различных ситуациях некоторые могут быть скрыты. Далее выполняется попытка преобразовать текст в число. При ошибке выводится сообщение, фокус устанавливается на едит с "левыми" данными и все завершается.
Пару слов о том, как не дать ввести в едит не цифры.
Реализуем пару функций. Причем даже не методами формы.
function CheckKey(Key: Char): Char;
begin
Result := Chr(0);
case Key of
'0'..'9', #8 : Result := Key; // цифры и <backspace>
end;
end;
function CorrectText(s: String; Idx: Longint ): String;
begin
Result := s;
Delete(Result, Idx, 1);
end;
А обработчики делаем такими.
procedure TForm1.KeyPress(Sender: TObject; var Key: Char);
begin
Key := CheckKey(Key);
end;
В принципе, реализацию функции CheckKey можно было внести в этот обработчик, но просто она используется еще в других местах.
procedure TForm1.TextChanged(Sender: TObject);
const
ValidChar : Set of Char = ['0'..'9'];
var
i : Longint;
begin
for i:=1 to Length((Sender as TEdit).Text) do begin
if not ((Sender as TEdit).Text[ i ] in ValidChar) then
if (i > 0) and (i <= Length((Sender as TEdit).Text)) then begin
(Sender as TEdit).Text := CorrectText((Sender as TEdit).Text, i);
(Sender as TEdit).SelStart := i - 1;
// Beep;
Break;
end;
end;
end;
Первый из них вешаем на событие OnKeyPress, а второй на OnChange всех едитов. Эти пляски в результате дают то, что в едит невозможно запихать не цифру. Причем не только путем ввода с клавы, но и посредством вставки из буфера обмена.
Если у вас иной смысл корректности данных, то, думаю, и в этом случае возможно использовать подобный подход.
Надеюсь, что хоть немного помог.
Удачи!
Gennady
Гений
(51339)
🙂 Тоже вариант. А если в едите что-то будет? Ну, не пустая строка, а какой-нить мусор? Проверяйте все-таки именно на корректность данные, а не просто на наличие чего-то.

Ответ от Ним[гуру]
if pos(строка, символ) <>0 then?

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: Проверка Edit в Delphi

Как создать текстовый документ в Делфи 7??
TStringList.Create.SaveToFile(\'Мой первый текстовый документ, созданный в Делфи
подробнее...

Алгоритм расчета времени между двумя датами в Делфи
в делфях datetime - обычное число с плавающей точкой, целая часть - количество дней, дробная часто
подробнее...
спросили в Гриды
вывод элементов матрицы в StringGrid в делфи
Доброго времени суток.

Что "вывод элементов матрицы в StringGrid в делфи"? Как это
подробнее...

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

Что за ошибка в Delphi E2010 incompatible types: \'HDC\' and \'TRect\'?
это не только в делфе. это вообще ошибка. НЕСООТВЕТСТВИЕ ТИПОВ называется.. .
это как
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Интернет
почему в в одноклассниках не открываются вкладка сообщения?
Обновить антивирус, перезагрузить РС, просканировать веб-узел. Очистить cookies интернет-браузера
подробнее...
спросили в Другое
В вашем браузере отключена поддержка cookie.
Использование cookies

«Cookies» - это текстовая информация небольшого объема, которая
подробнее...
спросили в Гриды
Ecxel в Delphi
Доброго времени суток.

Боюсь пальцами и парой слов не обойдемся. Если интересует про что
подробнее...
спросили в Citroën
Помогите найти программу написанную в Delphi 7 "Шифрование текста по методу Цезаря с лозунгом (с ключивым словом)"
тестировался на Pascal ABC и Pascal Abc.NET) должно работать и в делфи, только нужно переобьявить
подробнее...

Горячие клавиши в Delphi
У кнопок в строке "Name" должно быть тоже имя что и в коде примера. И собственно в делфи видна
подробнее...
спросили в Железо Asset Management
Помогите!
Данные цифры совпадают с физическим количеством точек на экране, поэтому изображение получается
подробнее...
спросили в USB
Delphi + USB сканер штрих-кодов
Delphi + USB = ? Смотря как сканер у тя работает там может быть эмуляция ком порта или он может как
подробнее...

Visual Studio C# - Остановить выполнение кода, какой нужен оператор
В делфи процедура exit не останавливает выполнение кода, а осуществляет выход из процедуры или
подробнее...
спросили в Другое Кэш
КАК Почистить cookies и кэш веб-браузера
Здравствуйте!

КАК почистить cookies...

Вам нужно в браузере …

там
подробнее...
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*