Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-12-2015
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Question AfterScroll Suave con DBGrid Scroll

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
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #2  
Antiguo 16-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Podes probar con

Código Delphi [-]
  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

Código Delphi [-]
  DataSet.AfterScroll := NIL;
  DataSet.AfterScroll := DataSetAfterScroll; // manejador que tendras definido en el form/datamodule me imagino
Responder Con Cita
  #3  
Antiguo 16-12-2015
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cuando quitar el evento y cuando volver a asignarlo?
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #4  
Antiguo 16-12-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Con un poco de imaginacion?

Código Delphi [-]
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
Responder Con Cita
  #5  
Antiguo 17-12-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Hola Delfino,

Yo lo resuelvo con esto:

Código Delphi [-]
procedure TForm1.AfterScroll(DataSet: TDataSet);
begin
  if DataSet.ControlsDisabled then
    Exit;

  ...
  ...
  ...
end;
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #6  
Antiguo 17-12-2015
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Thumbs up

Cita:
Empezado por olbeup Ver Mensaje
Hola Delfino,

Yo lo resuelvo con esto:

Código Delphi [-]procedure TForm1.AfterScroll(DataSet: TDataSet); begin if DataSet.ControlsDisabled then Exit; ... ... ... end;

Un saludo.
Excelente truco donde los haya
Gracias olbeup, me sirvio..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Scroll en DBGrid tarco35 Conexión con bases de datos 6 06-05-2012 23:19:10
Scroll en DBGrid marcial Varios 15 30-03-2012 20:16:08
Ayuda con AfterScroll cubanbaker Conexión con bases de datos 2 25-08-2011 22:28:58
barra de scroll en DBGrid macro32 Conexión con bases de datos 2 15-08-2008 07:53:58
DBGRID y SCROLL vtdeleon OOP 2 22-12-2004 14:34:59


La franja horaria es GMT +2. Ahora son las 01:36:06.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi