Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 16:32   #1
Alexx_Pol
 
Регистрация: 15.05.2013
Сообщений: 6
По умолчанию Свойство для DBGrid (Delphi)

Ситуация состоит вот в чем: при редактировании ячейки DBGrid'a необходимо отслеживать, чтобы пользователь не ввел более трех символов после запятой. Создал обработчик для действия OnKeyPress. Обработчик работает, но он срабатывает только при сохранении, когда уже введены больше 3х знаков - то есть не оперативно, не при вводе 4го знака. я считываю вводимый текст при помощи DbGrid.SelectedField.Text, но этот метод мне кажется считывает сохраненное в базе значение, а не вводимый текст. Перечитал документацию, но так и не нашел, каким методом считывается текущее значение в редактируемой ячейке. (Пробовал также методы CurValue и NewValue - та же проблема.) Может, такой возможности в принципе нет и ее нужно программировать? Буду благодарен за любой ответ/совет/ИМХО.
Alexx_Pol вне форума Ответить с цитированием
Старый 15.05.2013, 21:13   #2
Armorer
Подтвердите свой е-майл
 
Регистрация: 07.04.2007
Сообщений: 120
По умолчанию

Можно воспользоваться каким нибудь набором компонентов, например EhLib, там возможно реализовать такую проверку.

Вообще с такой валидацией идеального решения не видел, хотелось бы чтобы можно было ввести только такое число, какое ограничение заданно в БД. Например если Number(5), то только 5 цифр и т.п. Может кто подскажет, где такое реализовано.

Последний раз редактировалось Armorer; 15.05.2013 в 21:16.
Armorer вне форума Ответить с цитированием
Старый 15.05.2013, 23:04   #3
Alexx_Pol
 
Регистрация: 15.05.2013
Сообщений: 6
По умолчанию

Пока пытаюсь реализовать свою задачу при помощи InplaceEditor. Не могу понять одну вещь: объекту класса TStringGrid этот метод недоступен, а если создать тип на основании TStringGrid :
Код:
type
  TDBGridAccess = class (TStringGrid);
...
var
  DBGridAccess1: TDBGridAccess;
...
то объекту DBGridAccess1 класса TDBGridAccess этот метод будет доступен. как так может быть? Ведь наследнику доступны методы предка.
Alexx_Pol вне форума Ответить с цитированием
Старый 16.05.2013, 13:19   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Наследнику они доступны, подразумевается для обращения к ним в методах самого наследника, обращаясь же к экземпляру наследника в методе левого класса (в данном случае формы) - нельзя. Сделав потомка, Вы раскрыли область видимости до границ модуля (например из другого модуля обращаясь к dbgridaccess1 вы не сможете вызвать этот метод)
Теория http://www.transl-gunsmoker.ru/2010/07/4-protected.html
По теме - я бы выкинул onkeypress и сделал бы на onkeydown, мне кажется , может сработать, особенно если проверять текущий вводимый символ и если его запрещено по логике использовать, то просто делать параметр текущей нажатой кнопки пустым - #0
phomm вне форума Ответить с цитированием
Старый 16.05.2013, 19:45   #5
Alexx_Pol
 
Регистрация: 15.05.2013
Сообщений: 6
По умолчанию

Задачу решил. Но обработчик сделал не для моего DBGrid'a, а для объекта TOraQuery, данные которого отображаются/редактируются через мой DBGrid (полностью цепочка выглядит так: TOraQuery -> TDataSource -> TDBGrid). Обработчик повесил на действие BeforePost, введенный, но еще не сохраненный текст получил вот так: Query.FieldByName('field_name').Val ue, где Query: TOraQuery, а field_name - имя редактируемого поля. То есть отреагировать и выдать сообщение сразу при вводе 4го знака так и не получилось, но в принципе задание решено. Всем большое спасибо за помощь!
Alexx_Pol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойство DBGrid Ericnex БД в Delphi 11 11.09.2012 11:33
свойство PopupMenu, компонент DBGrid Jene4ka Компоненты Delphi 5 19.12.2011 22:17
DbGrid свойство Option.dgEditing RS219 Общие вопросы Delphi 5 17.11.2010 10:55
Изменене свойство копонента DBGrid Uchqunbek БД в Delphi 2 19.03.2009 19:54
свойство сетки DBGrid XFilippowX Общие вопросы Delphi 6 15.02.2009 14:56