![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить перемещение по записям в гриде?
daser © (2007-01-22 12:28:00)
MsGuns (2007-01-23 10:16:00) [1]>Johnmen © (23.01.07 00:44) [17]
>Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.
Во блин ! Сколько работаю с датасетами, а не знал ;)
Спасибо за полезную инфу, Женя
Ega23 (2007-01-23 10:02:00) [2]
> Только ты ее сначала своими глазами посмотри ) Просто чтобы
> удостовериться )
Да посмотрел уже...
Нет, это не то, что нужно.
А нужно событие на TDataSet.EnableControls. Причём не RecordChange
novill (2007-01-23 09:58:00) [3]> [21] Ega23 © (23.01.07 09:36)
Только ты ее сначала своими глазами посмотри ) Просто чтобы удостовериться )
Ega23 (2007-01-23 09:36:00) [4]
> Эта функция объявлена в классе Tdataset.
Фу-у-ункция!!!!!
Тьфу, дьявол!!!
Всё, понёсся исправлять
novill (2007-01-23 09:29:00) [5]Эта функцияобъявлена в классе Tdataset.
Ega23 (2007-01-23 09:17:00) [6]
> А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).
Блиню. Или я туп, как пробка, или вы, товарищи, что-то путаете.
Где и у какого потомка TDataSet в Delphi 5 есть это свойство????
Германн (2007-01-23 01:20:00) [7]
> Johnmen © (23.01.07 00:44) [17]
>
>
> > Германн © (23.01.07 00:28) [15]
>
>
> Нет.
> Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет
> (False) в данный момент.
>
А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).
Johnmen (2007-01-23 00:44:00) [8]
> Германн © (23.01.07 00:28) [15]
Нет.
Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.
Германн (2007-01-23 00:31:00) [9]Если да, то этот метод был и в Д1 у TTable и TQuery. TDataSet тогда ещё не было.
Германн (2007-01-23 00:28:00) [10]
> Johnmen © (22.01.07 23:06) [14]
>
> ControlsDisabled было, насколько помню, даже в D3.
> А уж в D6 это точно.
>
TDataSet.DisableControls может быть?
Johnmen (2007-01-22 23:06:00) [11]ControlsDisabled было, насколько помню, даже в D3.
А уж в D6 это точно.
Ega23 (2007-01-22 17:33:00) [12]
> Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled:
> Boolean
>
> Это только у меня в Turbo Delphi 2006 ?
Дык вот... Нету такого свойства в Delphi 5. А ОЧЕНЬне хватает.
Мне такие извраты пришлось наворачивать в DBTree, дабы отследить данную ситуацию... :((((
Игорь Шевченко (2007-01-22 17:27:00) [13]Ega23 © (22.01.07 17:17) [11]
> Правильно. Но речь в вопросе шла о Как отловить перемещение
> по записям в гриде?
> В AfterScroll ещё и другие будешь ловить.
Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled: Boolean
Это только у меня в Turbo Delphi 2006 ?
Ega23 (2007-01-22 17:17:00) [14]
> Точно также, как будут вызываться любые другие события TDataSet
> - а что тут такого, они не зависят от связи с DataLink'ами
Правильно. Но речь в вопросе шла о Как отловить перемещение по записям в гриде?
В AfterScroll ещё и другие будешь ловить.
Игорь Шевченко (2007-01-22 17:11:00) [15]
> В этом случае события о перемещении курсора НЕ БУДУТ передаваться
> визуальным компонентам. И с точки зрения пользователя "как
> бы" ничего не будет происходить.
> Но при AfterScroll (сейчас специально посмотрел, вроде так
> и есть) этот метод будет вызываться.
Точно также, как будут вызываться любые другие события TDataSet - а что тут такого, они не зависят от связи с DataLink'ами
Ega23 (2007-01-22 17:00:00) [16]
> Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих
> его объектов.
> Один из способов избежать этого - сбрасывать события ДО
> выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
>
> Или (что ИМХО проще, использовать тэг датасета:
>
> Procedure TDataModule1.ADODataSet1AfterScroll...
> begin
> With DataSet.Tag>0 then exit;
> ...
> end;
Это, кстати, одна из бед TDataSet - нет возможности узнать, чему равно поле FDisableCount.
MsGuns (2007-01-22 16:51:00) [17]>Но при AfterScroll (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.
Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих его объектов.
Один из способов избежать этого - сбрасывать события ДО выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
Или (что ИМХО проще, использовать тэг датасета:
Procedure TDataModule1.ADODataSet1AfterScroll...
begin
With DataSet.Tag>0 then exit;
...
end;
zdm (2007-01-22 16:08:00) [18]
> Ega23 © (22.01.07 15:49) [5]
Спасибо. Учтём.
Elen (2007-01-22 15:54:00) [19]
> Ega23
Ясно. Спасибо. Буду иметь ввиду - на всякий случай пригодится ;)
Ega23 (2007-01-22 15:49:00) [20]
> Не спорю, но поскольку всегда пользуюсь [1], хочу спросить
> - почему?
> Данные ведь могут меняться вне зависимости от перемещения
> по гриду.
Ну вот, допустим, я хочу пробежаться но НД и что-то сделать. Задача вполне частая.
если я напишу
With MyDataSet do
begin
try
bm := GetBookmark;
First;
While not Eof do
begin
с FieldByName(...).Value сделать что-то.
Next;
end;
finally
GotoBookmark(bm);
end;
end;
В этом случае у меня грид начнёт перерисовываться, т.к. TDataSet рассылает событие о смене курсора всем "смотрящим" на него TDataSource, которые рассылают это событие всем "смотрящим" на него TDataLink, потомок которого есть в кишках каждого DB-компонента.
Чтобы этого не происходило, нужно перед перемещениями курсора вызвать метод DisableControls, а в блоке finally после перехода по ссылке - EnableControls.
В этом случае события о перемещении курсора НЕ БУДУТ передаваться визуальным компонентам. И с точки зрения пользователя "как бы" ничего не будет происходить.
Но при AfterScroll (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.