Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
ВнизКакое событие при переводе ячейки грида в режим редактирования? Найти похожие ветки
← →
Bless (2003-10-24 16:20) [0]Какое событие ловить, чтобы поймать момент, когда пользователь начал редактировать ячейку DBGrid-а, то есть когда он нажал F2 или Enter?
Должно же быть какое-то событие, может, не дельфийское, а виндовое. Или только через OnKeyDown?
← →
Sandman25 (2003-10-24 16:22) [1]BeforeEdit
AfterEdit
← →
Bless (2003-10-24 17:19) [2]Неа.
BeforeEdit не возникает, если нажать F2, только если начать вводить текст.
А мне нужно именно сразу. Как только исчезла рамка фокуса и появился курсор.
← →
Sandman25 (2003-10-24 17:24) [3]Тогда только OnKeyDown ИМХО
← →
Митяй (2003-10-24 17:27) [4]Попробуй ONCellClick, правда это не совсем то, а чё ты хочешь сделать на этом курсоре?
← →
Bless (2003-10-24 17:30) [5]:(
Но ведь сам делфи как-то определяет, что надо убрать рамку фокуса и нарисовать курсорчик. Причем, если написать ADOQuery.Edit, то ячейка грида тоже переходит в режим редактирования, хоть и не было ни OnKeyDown ни OnCellClick
← →
Sandman25 (2003-10-24 17:33) [6]DataSource.OnStateChange?
← →
Митяй (2003-10-24 18:00) [7]Слушай, а такой вариант: класс TDBDataSet событие BeforeEdit???
← →
Митяй (2003-10-24 18:10) [8]У меня тут на полке старенькая книжка завалялась ещё по Delphi4,
кажись нашёл что тебе нужно
OnColEnter (возникает в момент получения ячейкой фокуса ввода).
← →
kaif (2003-10-24 18:16) [9]Дело в том, что переход в режим редактирования происходит путем создания (то ли активизации) InplaceEditor-а. И этот код скрыт в недрах implementation DBGrid-a. Боюсь, что придется своего наследника создавать. Может есть какой-то близкий виртуальный метод, чтобы переопределить его и пихнуть туда такое событие. Дело в том, что AfterEdit датасета сработает при первом редактировании, а при переходе в другую ячейку у тебя датасет останется в режиме State = dsEdit и никакого события AfterEdit уже не произойдет.
Лучше скажи, зачем это тебе в конечном счете нужно? Может как-то по-другому проблема решается.
← →
Vlad (2003-10-24 18:19) [10]Есть вариант на OnDrawColumnCell отслеживать State ячейки, но опять же, такой вариант не ко всему подходит. Смотря зачем нужно.
← →
Johnmen (2003-10-25 00:41) [11]>kaif © (24.10.03 18:16)
Совершенно верно :) Путем создания....
>Bless (24.10.03 17:30) [5]
>Но ведь сам делфи как-то определяет...
Причем тут Дельфи, неясно, но определяется именно анализом нажатой кнопы... См. исходники...
← →
ЮЮ (2003-10-25 07:01) [12]>А мне нужно именно сразу. Как только исчезла рамка фокуса и появился курсор
Всё тянется отсюда
procedure TCustomGrid.KeyPress(var Key: Char);
begin
inherited KeyPress(Key);
if not (goAlwaysShowEditor in Options) and (Key = #13) then
begin
if FEditorMode then
HideEditor
else
ShowEditor;
Key := #0;
end;
end;
Т.е. в OnKeyPress ( вызываемом в inherited KeyPress(Key)) ещё нет никакого InplaceEditor-а, а тем более событий, связанных с го появлением (см. текст ShowEditor). Но есть возможность проверить условия, при котором он появится:
if not (goAlwaysShowEditor in Grid.Options) and (Key = #13) and not Grid.EditorMode
← →
axx (2003-10-25 10:15) [13]Была проблема такая же.
Используй DBGridEH а если конкретнее
[DBGridEH.Columns[???]].onGetCellParams(Sender: TObject;
EditMode: Boolean; Params: TColCellParamsEh);
Begin
if (gdFocused in Params.State) тогда колонка выбрана
if EditMode (или DBGridEH.EditorMode) режим редактирования
end;
Может я и не прав но мне очень помогло. НАдеюсь и тебе поможет
← →
Bless (2003-10-27 09:39) [14]>Лучше скажи, зачем это тебе в конечном счете нужно?
Нужно мне это вот зачем:
Пользователи должны ввести исполнителя работ. Вводится он по коду ( пользователи его знают), но после того как они ввели код, надо чтобы в ячейке отобразилось его имя, чтоб было понятно, не ошиблись ли они.
В общем, я хотел выводить в гриде имя исполнителя, а перед переходом в режим редактирования в месте ячейки показать DBEdit, настроенный на код исполнителя. А после заверщения редактирования DBEdit спрятать. Чтоб получилось, что при редактировании вводят код, а все остальное время видят на экране имя.
Это, конечно, косолапо, но боюсь на подмену Inplace Editor-а не хватит квалификации.
А может, есть какой-то штатный способ сделать нечто подобное?
Используй DBGridEH...> Спасибо, кажется, onGetCellParams - то что нужно.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c