Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/119: Рейтинг темы: голосов - 119, средняя оценка - 4.92
Эксперт 1С
 Аватар для OverDozero
924 / 329 / 130
Регистрация: 07.04.2011
Сообщений: 1,753

Проверка вводимых данных в StringGrid

07.07.2012, 16:58. Показов 22164. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как осуществить проверку вводимых данных в стринггрид?
Есть таблица стринггрид состоящая из 3 столбцов,и проивольного количества строк.
Необходимо чтоб в ячейки 1 и 2 столбцов можно было вводить только значения типа integer.А в 3 столбец можно и интежер и реал.
Проверку ввода в эдит сделал так:
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case key of
 '0'..'9':;
 #8:;
 else key:=#0;
 end;
end;
Вот необходимо что-то похожее сделать для ввода в стринггрид.Как-то надо проверять в каком столбце находится ячейка и оттуда уже позволять либо только целые,либо целые и дробные.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2012, 16:58
Ответы с готовыми решениями:

Проверка в Srtinggrid вводимых данных на совпадение в строке
Всем привет!!! помогите кто чем может) В чём суть, имеется таблица в которой хранится расписание. В строках пары, в столбцах группы, нужно...

Проверка вводимых данных
Создал вотакую коляску $login = trim(htmlspecialchars(mysql_real_escape_string($login))); Или лучше по отдельности сделать проверку ?

Проверка вводимых данных
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения, если та инициализирована ранее то все...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
07.07.2012, 18:00
Очень удобно для этого использовать событие OnSetEditText грида:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: string);
var
   DValue : Double;
   IValue : Integer;
begin
   // Если редактируется столбец №0 или №1, и введенное число не является целым
   // или если редактируется 2-ой столбец, и введеннный текст - не вещественное число
   if ((ACol < 2) and not TryStrToInt(Value, IValue))
      or
      ((ACol = 2) and not TryStrToFloat(Value, DValue)) then
   begin
      // (Sender as TStringGrid).Cells[ACol, ARow] := '';
 
      // То выдаешь сообщение об ошибке. Можно очистить ячейку при этом.
      ShowMessage('Неправильное значение');
   end;
end;
2
85 / 69 / 12
Регистрация: 17.02.2011
Сообщений: 138
08.07.2012, 18:29
Можно использовать для этих целей и обработчик KeyPress
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var c,r:word;
begin
c:=(sender as TStringGrid).Col;//текущий столбец
r:=(sender as TStringGrid).Row; //текущая строка грида
if key='.' then key:=DecimalSeparator;//На всякий случай и точку и запятую заменяем на десятичный разделитель, подстраиваемся под сист. настройки
if key=',' then key:=DecimalSeparator;
//Если вводимый символ не цифра, не десятичный разделитель, не минус, то исключаем
if not(key in ['0','1','2','3','4','5','6','7','8','9',DecimalSeparator,'-',#8])
   or((key=DecimalSeparator)and(Pos(DecimalSeparator,(sender as TStringGrid).Cells[c,r])>0))//Только один разделитель
   or((key='-')and(Pos('-',(sender as TStringGrid).Cells[c,r])>0))//минус только один
   or((c<>3)and(key=DecimalSeparator)) //В случае если столбец не третий, то десятичный разделитель тоже исключаем
    then
    begin
      beep;
      key:=#0;
    end;
end;
2
Эксперт 1С
 Аватар для OverDozero
924 / 329 / 130
Регистрация: 07.04.2011
Сообщений: 1,753
12.07.2012, 15:06  [ТС]
Всем спасибо!!Реализовал проверку таким образом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var i,j:integer;
begin
i:=StringGrid1.Col;
j:=StringGrid1.Row;
 if ((StringGrid1.Col=0) or (StringGrid1.Col=1)) then
  if not (key in ['0'..'9',#8]) then key:=#0;
 if (StringGrid1.Col=2) then
   if not (key in ['0'..'9',DecimalSeparator,#8]) then key:=#0;
    if ((key=DecimalSeparator) and (pos(DecimalSeparator,StringGrid1.Cells[i,j])>0)) then key:=#0;
      end;
З.Ы.Дробные числа необходимо вводить только в 3 столбец грида.

Добавлено через 30 минут
Как запретить ввод десятичного разделителя (точки) на 1 позиции.То есть нельзя начинать ввод с "."?
1
geJI<|>eP
 Аватар для flatgad
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
12.07.2012, 15:19
Цитата Сообщение от OverDozero Посмотреть сообщение
Всем спасибо!!Реализовал проверку таким образом:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var i,j:integer;
begin
i:=StringGrid1.Col;
j:=StringGrid1.Row;
 if ((StringGrid1.Col=0) or (StringGrid1.Col=1)) then
  if not (key in ['0'..'9',#8]) then key:=#0;
 if (StringGrid1.Col=2) then
   if not (key in ['0'..'9',DecimalSeparator,#8]) then key:=#0;
    if ((key=DecimalSeparator) and (pos(DecimalSeparator,StringGrid1.Cells[i,j])>0)) then key:=#0;
      end;
З.Ы.Дробные числа необходимо вводить только в 3 столбец грида.

Добавлено через 30 минут
Как запретить ввод десятичного разделителя (точки) на 1 позиции.То есть нельзя начинать ввод с "."?
Delphi
1
if copy(s,1,1)='.' then s='';
а это можно пихать где ты вводишь значение
0
Эксперт 1С
 Аватар для OverDozero
924 / 329 / 130
Регистрация: 07.04.2011
Сообщений: 1,753
12.07.2012, 15:29  [ТС]
flatgad
А зачем copy?
Я ввожу данные в 3 столбец грида.В коде,что я писал выше,там можно использовать точку.
Мне просто необходимо определить на какой позиции находится точка.В данном случае на позиции с индексом 1.То есть ввод начинается с точки.А надо запретить ввод числа,начинающегося с ".".
Используя length надо определить номер позиции.И если эта позиции под индексом 1(первый символ),то запретить ввод.Не выходит никак пока.
Или ни length надо использовать.Pos тоже ничего не выходит.
0
geJI<|>eP
 Аватар для flatgad
188 / 187 / 19
Регистрация: 22.07.2010
Сообщений: 735
12.07.2012, 15:38
Ну почему же не copy вот тебе примерчик с Edit+ запрет двух точек подряд:

Delphi
1
2
3
4
5
6
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if copy(Edit1.Text,1,1)='.' then Edit1.Text:='';
  if ansipos('..',Edit1.Text)<>0 then
    Edit1.Text:=StringReplace(Edit1.Text,'..','.',[rfReplaceAll]);
end;
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
12.07.2012, 15:47
Так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
   with Sender as TStringGrid do
   begin
      if (Col = 0) or (Col = 1) then
         if not (key in ['0'..'9', #8]) then key := #0;
      if Col = 2 then
         if (key = DecimalSeparator) and (Length(Cells[Col, Row]) = 0) or
            not (key in ['0'..'9', DecimalSeparator, #8]) then key := #0;
 
      if (key=DecimalSeparator) and
         (Pos(DecimalSeparator,Cells[Col, Row]) > 0) then key:=#0;
   end;
end;
2
Эксперт 1С
 Аватар для OverDozero
924 / 329 / 130
Регистрация: 07.04.2011
Сообщений: 1,753
12.07.2012, 16:14  [ТС]
UI cпасибо!Все работает.
flatgad..ну незнаю почему не копи)Просто знал что можно сделать через length,но не получалось.Сначала находил длину строки,а потом только искал позицию.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2012, 16:14
Помогаю со студенческими работами здесь

Проверка вводимых данных
Народ, приветствую. Метод по запросу числа от 1 до 10... Вернуть нужно в любом случае, поэтому делаю проверку. Пробую 2 способами: ...

Проверка вводимых данных
Добрый день, уважаемые форумчане. Помогите, пожалуйста, со следующим вопросом. Есть ячейки E-L в которые вбивается время. Необходимо...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1, mas2, mas3, outmas; int ke1, ke2,...

Проверка вводимых данных
Доброго времени суток, уважаемые форумчане. Прошу помощи, разобраться со следующим моментом. Имеется часть кода: repeat clrscr; ...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru