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

Вниз

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

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1098101217
Кабан
2004-10-18 16:06
2004.10.31
Команда xlat


1-1097759680
Oleg_
2004-10-14 17:14
2004.10.31
как из дельфи запретить закрытие документа в word


1-1097944789
ИМХО
2004-10-16 20:39
2004.10.31
Текстовый файл огромного размера


3-1096872920
mid
2004-10-04 10:55
2004.10.31
настройка памяти SGA oracle


14-1096643463
Lord de Mon
2004-10-01 19:11
2004.10.31
Где взять исходники?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский