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

Вниз

прицепить PopupMenu к DBGrid   Найти похожие ветки 

 
Павел   (2004-10-12 23:37) [0]

Всем привет.
Хочу присоединить PopupMenu к DBGrid (или к форме), чтобы при нажатии клавиши Del удалялась текущая запись. Проблема в том, что когда редактируешь поле в DBGrid, нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле.
Это связано с тем, что обработчик PopupMenu раньше обрабатывает событие нажатия клавиши и до DBGrid оно не доходит. Как быть ?

Спасибо.


 
KSergey ©   (2004-10-13 07:11) [1]

В начало обработчика PopUp всунуть по вкусу одну из строк (накидал что пришло на ум, не провкерял):

if DBGrid1.EditorMode then Exit;
if DataSet1.State in [dsEdit, dsInsert] then Exit;


Думаю что-то подобное можно еще придумать.


 
Павел   (2004-10-13 10:07) [2]

Дело в том, что я примерно так и сделал, но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает. Можно в обработчике устанавливать код горячей клавиши в 0, а при выходе из состояния dsEdit обратно восстанавливать, но это похоже на "колбасные заводы" :-)
Я уверен, что существует более красивое решение. Я не совсем разбираюсь в событиях и их обработке, именно здесь нужно искать ответ.
Может у кого-нибудь есть готовое решение ?


 
ЮЮ ©   (2004-10-13 10:17) [3]

>Проблема в том, что когда редактируешь поле в DBGrid, нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле.

>но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает

Так что же из сказанного автором правда?


 
Плохиш ©   (2004-10-13 10:34) [4]

Непонятно, использовать PopupMenu чтобы обработать Del :-| Может лучше почитать про события DBGrid OnKeyDown/OnKeyUp?


 
Fedia ©   (2004-10-13 10:38) [5]

ЮЮ ©   (13.10.04 10:17) [3]
И то и другое.
>но нажатие на Del будет обрабатывать мой обработчик и это событие не дойдет до DBGrid, то есть при редактирования поля эта клавиша не работает
Здесь имеется в виду обработчик PopupMenu, удаляющий текущую запись.
Я так понял.


 
Павел   (2004-10-13 10:39) [6]

> Так что же из сказанного автором правда?
А в чем противоречие ? Нажатие на клавишу Del обрабатывает PopupMenu независимо от того редактирую я поле DBGrid или нет.


 
ЮЮ ©   (2004-10-13 10:47) [7]

"нажатие на Del приводит к удалению записи вместо удаления символа в редактируемом поле" тебе в коде и предложили проверить наличие Inplace Editot-а (DBGrid1.EditorMode) и не удалять запись, а удалить текст в редакторе (если уж привязался к символу, используемому при вводе с клавиатуры).
З.Ы. Не зря же в самом гриде для удаления используют Ctrl + Del


 
Павел   (2004-10-13 10:47) [8]

> Здесь имеется в виду обработчик PopupMenu, удаляющий текущую запись.
> Я так понял.
Да, все правильно.

> Непонятно, использовать PopupMenu чтобы обработать Del :-|
Идея следующая: хочу, чтобы при:
1) нажатии на TButton или
2) выбора пункта меню или
3) нажатии Del
происходило удаление записи, то же самое и для удаления/редактирования записи.


 
Павел   (2004-10-13 10:49) [9]

прошу прощения, строку:
> то же самое и для удаления/редактирования записи.

нужно читать так:
то же самое и для вставки/редактирования записи.


 
Fedia ©   (2004-10-13 10:58) [10]

А ведь тебе дельный совет дают. В обработчике PopupMenu пропиши:

 if not DBGrid1.EditorMode then
 Table1.Delete;  //здесь компонент доступа к данным


 
Павел   (2004-10-13 12:09) [11]

> А ведь тебе дельный совет дают. В обработчике PopupMenu пропиши:

> if not DBGrid1.EditorMode then
> Table1.Delete;  //здесь компонент доступа к данным

Я же об этом уже говорил, событие НЕ ДОХОДИТ до DBGrid (независимо от того, что находится в обработчике, я надеюсь, что это и так понятно). Это значит, что в обработчике мне нужно будет удалять символ (или выделенный текст), который находится в TField. Это нехороший способ, т.к. DBGrid сам умеет реагировать на нажатие клавиш.


 
Fedia ©   (2004-10-13 12:09) [12]

To Павел.
Понял тебя только после того, как сам попробовал. За предыдущий post извиняюсь. Раз никто больше ничего не посоветовал, то наверное более красивого решения нет, хотя надежда умирает последней.


 
ЮЮ ©   (2004-10-13 12:29) [13]

А почему бы и [File] повесить не на Alf + F, а просто на F - пусть юзер помучается. Если хочется пользоватедю удалять стоку через Popup, а не через Ctrl + Del - ради бога, нор зачем ассоциировать этот пункт с практически "символом", вводдимым с клавматуры ???
P/S. Кстати, а если убирать эту ассоциацию при переходе в DBGrid1.EditorMode и восстанавливать при выходе?


 
Павел   (2004-10-13 17:16) [14]

Я отказался использовать PopupMenu с DBGrid, переделаю форму по другому :-)

Всем большое спасибо.



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

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

Наверх




Память: 0.5 MB
Время: 0.021 c
14-1096854563
Думкин
2004-10-04 05:49
2004.10.31
С днем рождения! 4 октября


1-1097776898
Viper
2004-10-14 22:01
2004.10.31
ФАЙЛЫ


1-1097868727
Wint_
2004-10-15 23:32
2004.10.31
Разрулите трабла с RichEdit


10-1054029776
serg_
2003-05-27 14:02
2004.10.31
Проблема "лишних" GDI-объектов в corba-сервере


3-1096718489
Denniro
2004-10-02 16:01
2004.10.31
Примеры работы с MS-SQL