![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прицепить PopupMenu к DBGrid [D5, Win95/98, WinXP]
Павел © (2004-10-12 23:37:00)Всем привет.
Хочу присоединить PopupMenu к DBGrid (или к форме), чтобы при нажатии клавиши Del удалялась текущая запись. Проблема в том, что когда редактируешь поле в DBGrid, нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле.
Это связано с тем, что обработчик PopupMenu раньше обрабатывает событие нажатия клавиши и до DBGrid оно не доходит. Как быть ?
Спасибо.
Павел (2004-10-13 17:16:00) [1]Я отказался использовать PopupMenu с DBGrid, переделаю форму по другому :-)
Всем большое спасибо.
ЮЮ (2004-10-13 12:29:00) [2]А почему бы и [File] повесить не на Alf + F, а просто на F - пусть юзер помучается. Если хочется пользоватедю удалять стоку через Popup, а не через Ctrl + Del - ради бога, нор зачем ассоциировать этот пункт с практически "символом", вводдимым с клавматуры ???
P/S. Кстати, а если убирать эту ассоциацию при переходе в DBGrid1.EditorMode и восстанавливать при выходе?
Павел (2004-10-13 12:09:00) [3]> А ведь тебе дельный совет дают. В обработчике PopupMenu пропиши:
> if not DBGrid1.EditorMode then
> Table1.Delete; //здесь компонент доступа к данным
Я же об этом уже говорил, событие НЕ ДОХОДИТдо DBGrid (независимо от того, что находится в обработчике, я надеюсь, что это и так понятно). Это значит, что в обработчике мне нужно будет удалять символ (или выделенный текст), который находится в TField. Это нехороший способ, т.к. DBGrid сам умеет реагировать на нажатие клавиш.
Fedia (2004-10-13 12:09:00) [4]To Павел.
Понял тебя только после того, как сам попробовал. За предыдущий post извиняюсь. Раз никто больше ничего не посоветовал, то наверное более красивого решения нет, хотя надежда умирает последней.
Fedia (2004-10-13 10:58:00) [5]А ведь тебе дельный совет дают. В обработчике PopupMenu пропиши:
if not DBGrid1.EditorMode then
Table1.Delete; //здесь компонент доступа к данным
Павел (2004-10-13 10:49:00) [6]прошу прощения, строку:
> то же самое и для удаления/редактирования записи.
нужно читать так:
то же самое и для вставки/редактирования записи.
ЮЮ (2004-10-13 10:47:00) [7]"нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле" тебе в коде и предложили проверить наличие Inplace Editot-а (DBGrid1.EditorMode) и не удалять запись, а удалить текст в редакторе (если уж привязался к символу, используемому при вводе с клавиатуры).
З.Ы. Не зря же в самом гриде для удаления используют Ctrl + Del
Павел (2004-10-13 10:47:00) [8]> Здесь имеется в виду обработчик PopupMenu, удаляющий текущую запись.
> Я так понял.
Да, все правильно.
> Непонятно, использовать PopupMenu чтобы обработать Del :-|
Идея следующая: хочу, чтобы при:
1) нажатии на TButton или
2) выбора пункта меню или
3) нажатии Del
происходило удаление записи, то же самое и для удаления/редактирования записи.
Павел (2004-10-13 10:39:00) [9]> Так что же из сказанного автором правда?
А в чем противоречие ? Нажатие на клавишу Del обрабатывает PopupMenu независимо от того редактирую я поле DBGrid или нет.
Fedia (2004-10-13 10:38:00) [10]ЮЮ © (13.10.04 10:17) [3]
И то и другое.
>но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает
Здесь имеется в виду обработчик PopupMenu, удаляющий текущую запись.
Я так понял.
Плохиш (2004-10-13 10:34:00) [11]Непонятно, использовать PopupMenu чтобы обработать Del :-| Может лучше почитать про события DBGrid OnKeyDown/OnKeyUp?
ЮЮ (2004-10-13 10:17:00) [12]>Проблема в том, что когда редактируешь поле в DBGrid, нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле.
>но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает
Так что же из сказанного автором правда?
Павел (2004-10-13 10:07:00) [13]Дело в том, что я примерно так и сделал, но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает. Можно в обработчике устанавливать код горячей клавиши в 0, а при выходе из состояния dsEdit обратно восстанавливать, но это похоже на "колбасные заводы" :-)
Я уверен, что существует более красивое решение. Я не совсем разбираюсь в событиях и их обработке, именно здесь нужно искать ответ.
Может у кого-нибудь есть готовое решение ?
KSergey (2004-10-13 07:11:00) [14]В начало обработчика PopUp всунуть по вкусу одну из строк (накидал что пришло на ум, не провкерял):
if DBGrid1.EditorMode then Exit;
if DataSet1.State in [dsEdit, dsInsert] then Exit;
Думаю что-то подобное можно еще придумать.