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

Вниз

Какое событие при переводе ячейки грида в режим редактирования?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
7-56935
alexm
2003-09-06 11:09
2003.11.17
Как работать с USB портом


14-56811
Baklan
2003-10-23 15:53
2003.11.17
Недавно поздравляли новых мастеров


14-56918
Alex134
2003-10-23 22:26
2003.11.17
ищу хостинг для домашней странички


14-56839
Thor
2003-10-27 16:49
2003.11.17
APC и иже с ними.


1-56684
tnn
2003-11-06 03:36
2003.11.17
помогите оптимизировать