Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.47 MB
Время: 0.01 c
1-56555
Poof-poof
2003-11-08 01:40
2003.11.17
Как сделать так чтобы форму нельзя было ресайзнуть?


14-56807
Романов Р.В.
2003-10-28 14:47
2003.11.17
file-mail


3-56451
Belkova
2003-10-30 08:11
2003.11.17
DBLookupComboBox


1-56614
amisare
2003-11-05 19:30
2003.11.17
Снова TFileStream


6-56801
ilka
2003-09-22 16:30
2003.11.17
откуда ошибка (TIdTcpServer TIdTcpClient)





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