Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.09.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
1-10692
lww
2003-08-20 10:30
2003.09.04
Как написать dll для 1С?


14-10910
Прохожий
2003-08-11 08:19
2003.09.04
Ожидание готовности SMTP


14-10919
Marser
2003-08-19 00:27
2003.09.04
Именинники 19 августа


3-10612
PrettyFly
2003-08-13 15:41
2003.09.04
Индекс XSQLDA выходит за границы :(


14-10880
Vint
2003-08-18 13:32
2003.09.04
Пиву - нет !





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский