1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 102
1

Столбцы StringGrid'a. Запрет ввода перечня символов в определённых строках и столбцах.

14.10.2012, 22:29. Показов 4056. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, возникла трудность при работе со StringGrid'oм. Нужно сделать так чтобы в определенные столбцы таблицы (кроме первых строк) нельзя было ввести буквы, можно пример такое реализации кода? Или подскажите где копать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2012, 22:29
Ответы с готовыми решениями:

Запрет ввода определенных символов в TextBox
Можно ли в каком-то свойстве текстбокса выбрать тип вводимых данных? Т.е., допустим текстбокс нужен...

Запрет ввода определённых символов в scanf
всем привет, я тут впервые так что не пинайте за может глупые на ваш взгляд вопросы. я только...

Запрет ввода в TextBox определенных символов
В общем проблема такая, пол дня уже пытаюсь выполнить небольшое задание... Нужно поставить защиту...

Запрет ввода определенных символов в dataGridView
У меня есть таблица. Хочу чтобы кроме цифр и запятой вводить в ячейки ничего нельзя было. Кто...

3
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
15.10.2012, 10:09 2
Такой механизм можно реализовать, например, так. Для TstringGrid нужно определить обработчики событий: OnGetEditText, OnKeyPress, OnSetEditText и оформить их код таким образом:
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
59
60
61
62
63
implementation
 
{$R *.dfm}
 
const
  //Запрещённые символы.
  D = ['А'..'п', 'р'..'я', 'Ё', 'ё', 'A'..'Z', 'a'..'z'];
  //Перечень индексов проверяемых столбцов и строк.
  DCol = [1, 3];
  DRow = [1, 3];
var
  //Координаты редактируемой ячейки.
  Coord : record
    Col, Row : Integer;
  end;
 
//Событие, возникающее при начале редактирования ячейки.
procedure TForm1.StringGrid1GetEditText(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
  //Запоминаем координаты редактируемой ячейки.
  Coord.Col := ACol;
  Coord.Row := ARow;
end;
 
//Обработка нажатий клавиш.
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  //Если координаты редактируемой ячейки не совпадают с заданными, то выходим.
  if not ( (Coord.Col in DCol) and (Coord.Row in DRow) ) then Exit;
  //Отменяем ввод запрещённых символов.
  if Key in D then Key := #0;
end;
 
//Событие, возникающее при записи очередного символа в ячейку.
//Обрабатывать это событие, в данном случае, нужно для того, чтобы предусмотреть
//случай, когда пользователь выполнил вставку текста в ячейку через буфер обмена.
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
  ARow: Integer; const Value: String);
var
  Sg : TStringGrid;
  S : String;
  i, j, Len : Integer;
begin
  //Если координаты редактируемой ячейки не совпадают с заданными, то выходим.
  if not ( (Coord.Col in DCol) and (Coord.Row in DRow) ) then Exit;
 
  Sg := Sender as TStringGrid;
  Len := Length(Value);
  SetLength(S, Len);
  //Переписываем в S только разрешённые символы.
  j := 0;
  for i := 1 to Len do
    if not (Value[i] in D) then begin
      Inc(j);
      S[j] := Value[i];
    end;
  //Если S отличается от Value, то записываем значимую часть S в ячейку.
  if j < Len then
    Sg.Cells[ACol, ARow] := Copy(S, 1, j);
end;
 
end.
Этот код запрещает ввод запрещённых символов в ячейки, которые расположены на пересечении заданных строк и столбцов.
Если требуется запретить ввод для целых строк и столбцов (а не только для их пересечений), то условие:
Delphi
1
2
  //Если координаты редактируемой ячейки не совпадают с заданными, то выходим.
  if not ( (Coord.Col in DCol) and (Coord.Row in DRow) ) then Exit;
надо заменить на:
Delphi
1
2
  //Если ячейка не принадлежит заданным столбцам и строкам, то выходим.
  if not ( (Coord.Col in DCol) or (Coord.Row in DRow) ) then Exit;
0
1 / 1 / 0
Регистрация: 04.05.2012
Сообщений: 102
16.10.2012, 01:18  [ТС] 3
Вопросик, с таким кодом у меня все равно вводятся буквы, но когда я поменял условие
Delphi
1
2
3
const
  //Запрещённые символы.
  D = ['А'..'п', 'р'..'я', 'Ё', 'ё', 'A'..'Z', 'a'..'z'];
на
Delphi
1
2
3
const
  //Запрещённые символы.
  D = ['А'..'Я','а'..'я','A'..'Z','a'..'z']
теперь у меня не вводятся английские символы, а русские вводятся, в чем может быть дело?

Добавлено через 1 час 4 минуты
СПС, но раскурил сам, сделал так
Delphi
1
2
if (Ord(Key) >= Ord('0')) and  (Ord(Key) <= Ord('9'))or (key=#8) then key:=key
  else key:=#0;
теперь все как надо
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
16.10.2012, 08:34 4
gamerfox, я проверял код (и сейчас ещё раз проверил) - у меня чётко отрабатывает. - Буквы в заданные ячейки не вводятся. На всякий случай прикладываю архивы с проектами:
01-Ограниченный ввод на пересечениях строк и столбцов.rar - столбцы с индексами: [0, 1], строки: [0, 1].
02-Ограниченный ввод в заданных строках и столбцах.rar - столбцы с индексами: [0, 1], строки: [0].
0
16.10.2012, 08:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2012, 08:34
Помогаю со студенческими работами здесь

Запрет ввода определенных символов в TextBox
Пожалуйста помогите как написат программу чтобы в текстбоксе нельзя было бы ставить 1)ПРОБЕЛ,...

Запрет ввода определенных символов в TextBox
Подскажите пожалуйста как с делать так чтобы при выборе в numericUpDown цифры 2 в textBox можно...

Запрет ввода определенных символов в dbgrid
Добрый вечер! Ввожу данные непосредственно dbgrid, как мне запретить ввод знаков кроме чисел в...

Запрет ввода определенных символов в Edit
Я искал на форуме и в гугле, нашел разные варианты, но не нашел который мне бы подошел... Ведь у...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru