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

Запрет на редактирование определенных ячеек в stringgrid

24.12.2014, 12:44. Показов 7961. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю игру судоку, используя StringGrid. Ячейки заполняются из файла, т.е. определенные заполнены цифрами, другие же пробелами. Нужно запретить редактировать ячейки с цифрами, но не те которые были с пробелами и были изменены на цифры. Уже два дня мучаюсь, так и не могу додуматься. Это вообще возможно? Помучился и с onEditText и onSetText, SelectCell, но во едино не связывается у меня в голове. Помогите пожалуйста. Может какие мысли есть?
Миниатюры
Запрет на редактирование определенных ячеек в stringgrid  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2014, 12:44
Ответы с готовыми решениями:

Запрет ввода в определенных столбиках stringgrid
Ребят подскажите как сделать что бы sg.cells и нельзя ничего было вводить и изменять а в...

Проверка определенных ячеек StringGrid
Помогите с проверкой 2ух ячеек StringGrid (проверка на корректный ввод даты, что бы не было такого,...

Редактирование ячеек stringgrid
Возможно ли по клику на определенную ячейку StringGrid отредактировать строку которую она содержит?

Редактирование ячеек StringGrid
Здравствуйте=))) У меня вопрос: "Можно ли добавлять значения в StringGrid непосредственно щёлкая...

6
842 / 737 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
24.12.2014, 13:38 2
Цитата Сообщение от shtrayb Посмотреть сообщение
Нужно запретить редактировать ячейки с цифрами
Делай глобальную строковую переменную, и на одно из событий такие как онклик, онкейпрес, онкейдаун запиши в переменную значение из ячейки, затем одай в нее обратно на онкейап.
Delphi
1
2
s:= StringGrid1.Cells[i,j]; //записать в ячейку
StringGrid1.Cells[i,j]:= s; //отдать в ячейку
Номер строки и колонки получай в переменные и тогда код знать будет с какой ячейкой работать.

Цитата Сообщение от shtrayb Посмотреть сообщение
Нужно запретить редактировать ячейки с цифрами
Напиши условие на этот запрет.


Цитата Сообщение от shtrayb Посмотреть сообщение
Нужно запретить редактировать ячейки с цифрами, но не те которые были с пробелами и были изменены на цифры
А это уже сложнее. Как твоя функция или код будет знать что ячейка редактируется уже два раза? Да ни как небудет, поэтому нужно сделать так чтоб она как то узнала, например массив создать равный таблице и вставлять я ячейку массива букву р например что соответствует ячейке в стринггриде и обозначает р - редактировалась значит.
А дальше все просто, проверяй есть ли в массиве буква р по местоположению равная редактируемой ячейки таблицы и отталкивайся от этого.
0
132 / 129 / 31
Регистрация: 12.12.2011
Сообщений: 462
24.12.2014, 13:54 3
Можно, например, запретить выбирать определенные ячейки:
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
1
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
24.12.2014, 14:03 4
при получениии ячейкой фокуса:
Код
if <условие возможности редактирования сфокусированной ячейки> then
  Grid.Options := Grid.Options + [goEditing]
else
  Grid.Options := Grid.Options - [goEditing]
0
842 / 737 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
25.12.2014, 01:36 5
Цитата Сообщение от shtrayb Посмотреть сообщение
Может какие мысли есть?
Вот еще держи в довесок, оказывается у таблицы есть еще свои свойства и события которые которые запоминают ранее редактировавшуюся ячейку и ее значение, тогда можно обойтись и без массива для запоминания этих свойств.

Маска описывается в параметре Value, а правила
ее описания полностью соответствуют маске класса TMaskEdit.
Delphi
1
2
3
property OnGetEditMask: TGetEditEvent;
type TGetEditEvent = procedure (Sender: TObject; ACol,
ARow: Longint; var Value: string) of object;
При редактировании текст, ранее находящийся в ячейке, заносится в пара-
метр Value.
property OnGetEditText: TGetEditEvent;
По окончании редактирования содержимого ячейки вызывается событие:
Delphi
1
2
3
property OnSetEditText: TSetEditEvent;
type TSetEditEvent = procedure (Sender: TObject; ACol,
ARow: Longint; const Value: string) of object;
На этом этапе вполне можно наложить дополнительные ограничения на вво-
димые данные или, например, преобразовать их.
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
25.12.2014, 02:20 6
if <условие возможности редактирования сфокусированной ячейки> then
Плюс к почти идеальному совету mss
добавлю что само это условие прекрасно можно хранить в "самой ячейке TSringGrid". А точнее в свойстве Objects.

Добавлено через 3 минуты
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Вот еще держи в довесок, оказывается у таблицы есть еще свои свойства и события которые которые запоминают ранее редактировавшуюся ячейку и ее значение, тогда можно обойтись и без массива для запоминания этих свойств.
Каких только монстров не рождали "свежие" мозги новичков!

Не прими в личную обиду, пож-ста.
0
mss
25.12.2014, 08:14     Запрет на редактирование определенных ячеек в stringgrid
  #7

Не по теме:

А точнее в свойстве Objects
Ну тоже будет нелишняя ложка к столу)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2014, 08:14

Таблица StringGrid, редактирование ячеек
Я создал таблицу StringGrid, теперь надо, чтобы при помощи MainMenu изменялись значения ячеек...

Редактирование ячеек таблицы Stringgrid
В созданной таблице необходимо нажатием кнопки изменить все отрицательные значения на их абсолютное...

StringGrid Цвет фона пустых ячеек и ячеек с текстом
Доброго дня.. Задачка следующая: Ячейки в StringGrid'e заполняются по блоку из Timer. В...

Запрет ввод определенных слов
Не могу понять как реализовать запрет на ввод определенных слов в edit, например Admin, Player,...


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

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

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