Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отловить перемещение по записям в гриде?


Страницы:   1 2

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 (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо