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

Вниз

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

 
daser   (2007-01-22 12:28) [0]



 
Elen ©   (2007-01-22 12:41) [1]


> daser

Если имеется ввиду BDGrid, то прописать AfterScroll для TQuery или подобного компонента, который с ним связан.
Если имеется ввиду StringGrid, то прописать OnSelectCell.


 
Ega23 ©   (2007-01-22 14:24) [2]


> Если имеется ввиду BDGrid, то прописать AfterScroll для
> TQuery или подобного компонента, который с ним связан.


Я бы не советовал. Вроде должно работать при TDataSet.DisableControls
Лучше использовать TDataSource.OnDataChange


 
Elen ©   (2007-01-22 15:26) [3]


> Я бы не советовал

Не спорю, но поскольку всегда пользуюсь [1], хочу спросить - почему?


 
zdm ©   (2007-01-22 15:30) [4]


> Ega23 ©   (22.01.07 14:24) [2]

Данные ведь могут меняться вне зависимости от перемещения по гриду.


 
Ega23 ©   (2007-01-22 15:49) [5]


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


 
Elen ©   (2007-01-22 15:54) [6]


> Ega23

Ясно. Спасибо. Буду иметь ввиду - на всякий случай пригодится ;)


 
zdm ©   (2007-01-22 16:08) [7]


> Ega23 ©   (22.01.07 15:49) [5]

Спасибо. Учтём.


 
MsGuns ©   (2007-01-22 16:51) [8]

>Но при AfterScroll (сейчас специально посмотрел, вроде так и есть) этот метод будет вызываться.

Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих его объектов.
Один из способов избежать этого - сбрасывать события ДО выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
Или (что ИМХО проще, использовать тэг датасета:

Procedure TDataModule1.ADODataSet1AfterScroll...
begin
 With DataSet.Tag>0 then exit;
 ...
end;


 
Ega23 ©   (2007-01-22 17:00) [9]


> Без всяких "вроде". События датасета НЕ ЗАВИСЯТ от отображающих
> его объектов.
> Один из способов избежать этого - сбрасывать события ДО
> выполнения "пробежек" по датасету и восстанавливать ПОСЛЕ.
>
> Или (что ИМХО проще, использовать тэг датасета:
>
> Procedure TDataModule1.ADODataSet1AfterScroll...
> begin
>  With DataSet.Tag>0 then exit;
>  ...
> end;


Это, кстати, одна из бед TDataSet - нет возможности узнать, чему равно поле FDisableCount.


 
Игорь Шевченко ©   (2007-01-22 17:11) [10]


> В этом случае события о перемещении курсора НЕ БУДУТ передаваться
> визуальным компонентам. И с точки зрения пользователя "как
> бы" ничего не будет происходить.
> Но при AfterScroll (сейчас специально посмотрел, вроде так
> и есть) этот метод будет вызываться.


Точно также, как будут вызываться любые другие события TDataSet - а что тут такого, они не зависят от связи с DataLink"ами


 
Ega23 ©   (2007-01-22 17:17) [11]


> Точно также, как будут вызываться любые другие события TDataSet
> - а что тут такого, они не зависят от связи с DataLink"ами


Правильно. Но речь в вопросе шла о Как отловить перемещение по записям в гриде?
В AfterScroll ещё и другие будешь ловить.


 
Игорь Шевченко ©   (2007-01-22 17:27) [12]

Ega23 ©   (22.01.07 17:17) [11]


> Правильно. Но речь в вопросе шла о Как отловить перемещение
> по записям в гриде?
> В AfterScroll ещё и другие будешь ловить.


Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled: Boolean

Это только у меня в Turbo Delphi 2006 ?


 
Ega23 ©   (2007-01-22 17:33) [13]


> Это да, будешь. Но у TDataSet я наблюдаю метод ControlsDisabled:
>  Boolean
>
> Это только у меня в Turbo Delphi 2006 ?


Дык вот... Нету такого свойства в Delphi 5. А ОЧЕНЬ не хватает.
Мне такие извраты пришлось наворачивать в DBTree, дабы отследить данную ситуацию...  :((((


 
Johnmen ©   (2007-01-22 23:06) [14]

ControlsDisabled было, насколько помню, даже в D3.
А уж в D6 это точно.


 
Германн ©   (2007-01-23 00:28) [15]


> Johnmen ©   (22.01.07 23:06) [14]
>
> ControlsDisabled было, насколько помню, даже в D3.
> А уж в D6 это точно.
>

TDataSet.DisableControls может быть?


 
Германн ©   (2007-01-23 00:31) [16]

Если да, то этот метод был и в Д1 у TTable и TQuery. TDataSet тогда ещё не было.


 
Johnmen ©   (2007-01-23 00:44) [17]


> Германн ©   (23.01.07 00:28) [15]


Нет.
Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.


 
Германн ©   (2007-01-23 01:20) [18]


> Johnmen ©   (23.01.07 00:44) [17]
>
>
> > Германн ©   (23.01.07 00:28) [15]
>
>
> Нет.
> Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет
> (False) в данный момент.
>

А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).


 
Ega23 ©   (2007-01-23 09:17) [19]


> А. Понял. В Д4 есть. В Д2 ещё не было (как и TDataSet).


Блиню. Или я туп, как пробка, или вы, товарищи, что-то путаете.
Где и у какого потомка TDataSet в Delphi 5 есть это свойство????


 
novill ©   (2007-01-23 09:29) [20]

Эта функция объявлена в классе Tdataset.


 
Ega23 ©   (2007-01-23 09:36) [21]


> Эта функция объявлена в классе Tdataset.


Фу-у-ункция!!!!!
Тьфу, дьявол!!!
Всё, понёсся исправлять


 
novill ©   (2007-01-23 09:58) [22]

> [21] Ega23 ©   (23.01.07 09:36)

Только ты ее сначала своими глазами посмотри ) Просто чтобы удостовериться )


 
Ega23 ©   (2007-01-23 10:02) [23]


> Только ты ее сначала своими глазами посмотри ) Просто чтобы
> удостовериться )


Да посмотрел уже...
Нет, это не то, что нужно.
А нужно событие на TDataSet.EnableControls. Причём не RecordChange


 
MsGuns ©   (2007-01-23 10:16) [24]

>Johnmen ©   (23.01.07 00:44) [17]
>Именно ф-ия, возвращающая ДисайблКонтрол (True) или нет (False) в данный момент.

Во блин ! Сколько работаю с датасетами, а не знал ;)

Спасибо за полезную инфу, Женя



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.148 c
15-1169150541
Cyrax
2007-01-18 23:02
2007.02.11
Общий принцип организации виртуальных методов и...


15-1169300520
Ngk88
2007-01-20 16:42
2007.02.11
Ошибка "Procedure call of a function"


2-1169861040
Pipety
2007-01-27 04:24
2007.02.11
В чем ошибка?


2-1169647027
DVM
2007-01-24 16:57
2007.02.11
Директивы условной компиляции


15-1169381276
Expell
2007-01-21 15:07
2007.02.11
Вот о прокрутке баянчик