Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.04;
Скачать: CL | DM;

Вниз

TDBGrid   Найти похожие ветки 

 
Алексей Петухов   (2003-08-14 09:01) [0]

Здравствуйте, уважаемые мастера.

Допустим у нас есть DBGrid, в нем отображон некоторый набор данных.
Мы перемещаемся в некоторую ячейку некоторого столбца и нажимаем клавишу "Enter".
Данные в этой ячейке Выделяются и в ней появляется курсор.

Подскажите пожалуйста, как я могу узнать, что DBGrid находистя в этом состоянии?


 
Reindeer Moss Eater ©   (2003-08-14 09:06) [1]

DBGrid.DataSource.DataSet.State in dsEditModes


 
Алексей Петухов   (2003-08-14 09:11) [2]

> DBGrid.DataSource.DataSet.State in dsEditModes
Что то не сработало...


 
Reindeer Moss Eater ©   (2003-08-14 09:16) [3]

Что не сработало? Что должно было сработать?


 
HSolo ©   (2003-08-14 09:20) [4]

DBGrid.DataSource.DataSet.State = dsEdit;


 
Алексей Петухов   (2003-08-14 09:24) [5]

Дело в том, что в теле обработчика DBGrid.OnKeyPress
DBGrid.DataSource.DataSet.State = dsBrowse
А мне при нажатии "Esc" на DBGrid нужно: в случае если DBGrid находится в вышеописанном состоянии произвести обычнае действия, иначе - закрыть форму.


 
Reindeer Moss Eater ©   (2003-08-14 09:28) [6]

Ты чего в начале спрашивал?
как я могу узнать, что DBGrid находистя в этом состоянии?

Тебе написали булево выражение, отвечающее на твой вопрос.


 
Алексей Петухов   (2003-08-14 09:33) [7]

>Ты чего в начале спрашивал?
Если DBGrig находится в описанном в начале состоянии, и я нажимаю "Esc", то в теле обработчика события DBGrid.OnKeyPress
(DBGrid.DataSource.DataSet.State in dsEditModes)=false, потому что DBGrid.DataSource.DataSet.State=dsBrowse.
Вот такое булево выражение.


 
Reindeer Moss Eater ©   (2003-08-14 09:35) [8]

Ну так ты получил значение этого выражения, узнав при этом, что датасет не в режиме редактирования.

Еще вопросы?


 
Reindeer Moss Eater ©   (2003-08-14 09:35) [9]

Ну так ты получил значение этого выражения, узнав при этом, что датасет не в режиме редактирования.

Еще вопросы?


 
Johnmen ©   (2003-08-14 09:36) [10]

>Алексей Петухов

DBGrid1.EditorMode


 
Reindeer Moss Eater ©   (2003-08-14 09:37) [11]

потому что DBGrid.DataSource.DataSet.State=dsBrowse.

hint:
Грид - dataaware компонент. И сам имеет виды на нажатие некоторых кнопок.


 
Алексей Петухов   (2003-08-14 09:38) [12]

Ну так ты получил значение этого выражения, узнав при этом, что датасет не в режиме редактирования.
Отладчиком.


 
Алексей Петухов   (2003-08-14 09:43) [13]

DBGrid1.EditorMode
То-же не помогает.

hint:
Грид - dataaware компонент. И сам имеет виды на нажатие некоторых кнопок.


И что же делать?


 
Reindeer Moss Eater ©   (2003-08-14 09:49) [14]

то в теле обработчика события DBGrid.OnKeyPress

Перенести логику в Form1.OnKeyPress


 
Reindeer Moss Eater ©   (2003-08-14 09:50) [15]

DBGrid1.EditorMode
То-же не помогает.


Абалдеть! "Не помогает". А что должно произойти при вычислении этого выражения по твоему? Салют что ли начаться?


 
Johnmen ©   (2003-08-14 09:53) [16]

>Алексей Петухов

EditorMode однозначно определяет, находится ли текущая ячейка в режиме редактирования. Т.е. создан ли в данный момент инплейседитор для редактирования...


 
Алексей Петухов   (2003-08-14 10:01) [17]

Перенести логику в Form1.OnKeyPress
Т.е. если я нажму кнопочку на DBGrid-е, произойдет событие Form1.OnKeyPress, так?


 
Reindeer Moss Eater ©   (2003-08-14 10:02) [18]

Т.е. если я нажму кнопочку на DBGrid-е, произойдет событие Form1.OnKeyPress, так?

Если у формы выставлено KeyPreview, то да.


 
Алексей Петухов   (2003-08-14 10:03) [19]

DBGrid1.EditorMode
То-же не помогает.
Абалдеть! "Не помогает". А что должно произойти при вычислении этого выражения по твоему? Салют что ли начаться?


DBGrid1.EditorMode=false
- вот что эначит непомогает.


 
Reindeer Moss Eater ©   (2003-08-14 10:04) [20]

DBGrid1.EditorMode=false
- вот что эначит непомогает.


Не помогает понять, что нет режима редактирования?


 
Reindeer Moss Eater ©   (2003-08-14 10:05) [21]

Что уже нет режима редактирования?


 
Алексей Петухов   (2003-08-14 10:12) [22]

установил Form1.KeyPreview:=true;

Все равно в обработчике Form1.OnKeyPress, при описанных выше условиях DBGrid1.EditorMode=false.


 
Johnmen ©   (2003-08-14 10:14) [23]

>Алексей Петухов (14.08.03 10:12) [22]

Потому, что OnKeyPress возникает до перехода в режим редактирования.


 
Reindeer Moss Eater ©   (2003-08-14 10:15) [24]

Это значит, что нет режима редактирования.
Ты узнал то, что хотел узнать.
Что хочешь узнать еще?


 
Reindeer Moss Eater ©   (2003-08-14 10:17) [25]

Потому, что OnKeyPress возникает до перехода в режим редактирования.

У него был режим редактирования, потом нажался Esc, а в обработчике ожидается, что все еще должен быть режим редактирования. Вот и недоумение возникает.


 
Johnmen ©   (2003-08-14 10:25) [26]

>Reindeer Moss Eater © (14.08.03 10:17) [25]

Совершенно верно :)


 
Алексей Петухов   (2003-08-14 11:01) [27]

Ну ладно, значит так:
1. У меня DBGrid в "режиме редактирования" (то есть я просто нажал Enter в одной из ячеек, но пока ничего там не менял - весь текст в ячейке выделен и там мигает курсорчик).
2. Я нажимаю "Esc" или "стрелочка вверх".
3. в теле какого то обработчика выполняется такой код:
Если DBGrid описанном состоянии
тогда
Если нажата Esc
тогда
ModalResult:=MrCancel
иначе
Если "стрелочка вверх"
тогда DBGrid.datasourse.dataset.prior;

Вопрос: как осуществить такую проверку?


 
Соловьев ©   (2003-08-14 11:06) [28]


> 1. У меня DBGrid в "режиме редактирования" (то есть я просто
> нажал Enter в одной из ячеек, но пока ничего там не менял
> - весь текст в ячейке выделен и там мигает курсорчик).

из второго первое не следует, т.е. по миганию курсорчика нельзя сказать что НД уже в режиме редактирования.


 
Johnmen ©   (2003-08-14 11:07) [29]

Может ты просто скажешь, что нужно ? Четко и последовательно.


 
Reindeer Moss Eater ©   (2003-08-14 11:10) [30]

2. Я нажимаю "Esc" или "стрелочка вверх".
3. в теле какого то обработчика выполняется такой код:
Если DBGrid описанном состоянии
тогда
Если нажата Esc
тогда
ModalResult:=MrCancel
иначе
Если "стрелочка вверх"
тогда DBGrid.datasourse.dataset.prior;


Нажатие на эти стрелочки и кнопочки выводит из режима редактирования.
И в твоем обработчике он уже отменен. Поздно пить боржом.


 
Vlad   (2003-08-14 11:16) [31]

(gdFocused in DBGrid1.State)
Можно на OnDrawColumnCell вешать.


 
Алексей Петухов   (2003-08-14 11:21) [32]

Ой.
Ну ладно, устраивайтесь поудобнее. Яначинаю свой рассказ... :-)
1. У меня есть форма, на ней BDGrid. Пусть будет Form.BDGrid
2. Мне хочется что-бы форма закрывалась при нажатии на клавишу "Esc".
3. Если я в BDGrid нажал на клавишу "Enter" и побегал по строке текста стрелочками влево, вправо (т.е. BDGrid как-бы в режиме редактирования), то при нажатии на клавишу "Esc" уже я не хочу что-бы форма закрывалась, а хочу что-бы BDGrid вернулся в обычное состояние(т.е курсор вышел бы из ячейки BDGrid-а и перешол бы на сам BDGrid).
Вот что-то в этом роде.


 
Алексей Петухов   (2003-08-14 11:23) [33]

Поздно пить боржом.
Только не внашем случае. Мы выпьем его ранньше!
Только когда?
Вот в чем вопрос.


 
Mark   (2003-08-14 11:40) [34]

Алексею Петухову!
Всё понятно, что имелось ввиду. Только делать лучше, по-моему, вот так:
1 В событии OnKeyPress отлавливаем клавишу ESC и пишем Close. И всё! Больше здесь ничего не надо!!!
2 В событии OnClose пишем:
with DBGrid1.DataSource.DataSet do
if State in [dsEdit,dsInsert] then
try Post except Cancel end;

И всё будет в порядке!


 
Johnmen ©   (2003-08-14 11:43) [35]

Просто заведи флаг, которым будет определяться, было ли редактирование, и анализируй его, когда надо и где надо...


 
Johnmen ©   (2003-08-14 11:44) [36]

>Mark (14.08.03 11:40) [34]

Не совсем то...


 
Mike2 Kouzmine2   (2003-08-14 11:50) [37]

case Key of
#13 : ......;
#27 :
begin
if (t.state in [dsbrowse]) then modalresult := mrOk
else Application.MessageBox("нах","впд");
end;


 
Vlad   (2003-08-14 11:50) [38]

На сколько я понял речь идет НЕ о DataSet.State, а о DBGrid.State,т.е. когда ячейка грида имеет фокус ввода. [gdFocused]
Т.е. на событие OnKeyPress нужно проверять
1) Нажата ли клавиша Esc
2) Не имеет ли DBGrid фокус ввода.
Если ОБА эти условия выполняются, то нужно делать Close.


 
Reindeer Moss Eater ©   (2003-08-14 11:54) [39]

Автору не нужен Close если Esc прервал редактирование.


 
Vlad   (2003-08-14 11:58) [40]

2 Reindeer Moss Eater ©
Если прервал редактирование то Close и не будет.
Читай внимательнее.
Ладно, по-другому:
If (key=#27) and not(gdFocused in DBGrid.State) then Close



Страницы: 1 2 вся ветка

Текущий архив: 2003.09.04;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.018 c
14-10978
Wonder
2003-08-14 15:02
2003.09.04
По поводу той задачи, из-за которой драки назревают :)


3-10557
Rel_
2003-08-11 14:17
2003.09.04
Работа с датой


3-10556
byTural
2003-08-10 14:49
2003.09.04
Как обновить данные после отмены транзакции


4-11029
Stany
2003-07-06 09:47
2003.09.04
Как получить атрибуты форматирования и шрифта текста в RichEdit д


6-10857
SemFLY
2003-06-26 16:52
2003.09.04
Почему не работает ? (TIdTCPClient и TIdTCPServer)