Ver la Versión Completa : AfterScroll Suave con DBGrid Scroll
Delfino
16-12-2015, 17:43:44
Tengo una Dataset que tiene el evento AfterScroll asignado que hace una serie de tareas.
Al hacer scroll en el DBGrid relacionado con el Dataset se hace lento porque por cada scroll del DBGrid se para para ejecutar el evento AfterScroll.
No hay alguna manera de que no ejecute el AfterScroll hasta que deje de hacer scroll del DBGrid?
bien por click en la ScrollBar del DBGrid o bien por MouseWheel o Flechas del teclado
AgustinOrtu
16-12-2015, 18:10:09
Podes probar con
DataSet.DisableControls;
try
{ tareas }
finally
DataSet.EnableControls;
end;
A ver si mejora
Si no mejora, lo unico que podes hacer es quitar el evento y volverlo a asignar
DataSet.AfterScroll := NIL;
DataSet.AfterScroll := DataSetAfterScroll; // manejador que tendras definido en el form/datamodule me imagino
Delfino
16-12-2015, 18:15:08
Cuando quitar el evento y cuando volver a asignarlo?
AgustinOrtu
16-12-2015, 19:21:30
Con un poco de imaginacion?
procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
Caption := 'procesando...';
Sleep(1000); // 1 segundo
ShowMessage('procesado');
Caption := 'Form1';
end;
procedure TForm1.ClientDataSet1BeforeScroll(DataSet: TDataSet);
begin
ClientDataSet1.AfterScroll := NIL;
Timer1.Enabled := False;
Timer1.Enabled := True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
Timer1.Interval := 500; // 500 ms
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
// pasaron 0,5 segundos desde el ultimo scroll, habilitar evento
Timer1.Enabled := False;
if not Assigned(ClientDataSet1.AfterScroll) then
begin
ClientDataSet1.AfterScroll := ClientDataSet1AfterScroll;
// hay que llamar al evento
ClientDataSet1AfterScroll(ClientDataSet1);
end;
end;
Rustico, pero puede servir :)
olbeup
17-12-2015, 09:10:18
Hola Delfino,
Yo lo resuelvo con esto:
procedure TForm1.AfterScroll(DataSet: TDataSet);
begin
if DataSet.ControlsDisabled then
Exit;
...
...
...
end;
Un saludo.
Delfino
17-12-2015, 09:48:58
Hola Delfino,
Yo lo resuelvo con esto:
Código Delphi [-] (http://www.clubdelphi.com/foros/#)procedure TForm1.AfterScroll(DataSet: TDataSet); begin if DataSet.ControlsDisabled then Exit; ... ... ... end;
Un saludo.
Excelente truco donde los haya ;)
Gracias olbeup, me sirvio..
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.