Zablokowaniee grida podczas przewijania

0

Wzorując się na przykładzie: http://stackoverflow.com/questions/12304727/catching-listview-beginscroll-and-endscroll-events
zrobiłem coś takiego:

 PreviousWndProc(Message);


            case Message.Msg of

              WM_VSCROLL:
              begin

                if TWMVScroll(Message).ScrollCode = SB_ENDSCROLL then
                begin
                  if IsScrolling then
                  begin
                    IsScrolling := False;

                              DBGrid.DataSource.DataSet.AfterScroll :=  IBQNOTATKAAfterScroll;
                              DBGrid.DataSource.DataSet.AfterRefresh := IBQNOTATKAAfterScroll;
                              DBGrid.DataSource.DataSet.OnCalcFields := IBQNOTATKACalcFields;

                              DBGrid.DataSource.DataSet.EnableControls;

                              Application.ProcessMessages;
                  end;
                end
                else if (not IsScrolling) and (not DBGrid.DataSource.DataSet.ControlsDisabled) then
                begin
                  IsScrolling := True;
                              DBGrid.DataSource.DataSet.DisableControls;
                              DBGrid.DataSource.DataSet.AfterScroll := nil;
                              DBGrid.DataSource.DataSet.AfterRefresh := nil;
                              DBGrid.DataSource.DataSet.OnCalcFields := nil;
                end;
              end;

            end;
 

Generalnie chodzi o to, żeby podczas przeciągania scrollbara na DBGridzie nie odświeżać wszystkich widocznych wierszy bo to długo trwa (chcę na początku wyłączyć zdarzenia a po puszczeniu dopiero odświeżyć)
I jeśli przeciągam pasek góra/dół to działa dobrze.
Ale jak kliknę na belkę (a nie przeciągam) to działa nie całkiem dobrze.
scrollbar przesunie się trochę, ale grid pozostaje zablokowany. Czyli wywołała się ta dolna część kodu, ale ta górna (czyli SB_ENDSCROLL) już nie.
Co ciekawe kolejne kliknięcie na pasek wywołuje tylko górną część kodu i wtedy grid zostaje odblokowany. Ale tak nie może być.

Macie jakiś pomysł co można z tym zrobić?

0

Czytaj odpowiedzi na pytania, które sam zadajesz; gdzieś już to widziałem... o tu:
http://4programmers.net/Forum/Delphi_Pascal/164562-jak_wylaczyc_zdarzenia_gdy_przeciagam_suwak_na_gridzie?p=1045177#id1045177

1 użytkowników online, w tym zalogowanych: 0, gości: 1