Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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 22-02-2015
joseprad joseprad is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
joseprad Va por buen camino
Implementar evento en una rutina

Hola amigos.

Estoy escribiendo una función para saber si una linea de un grid esta vacía
Código Delphi [-]
function IsRowEmpty(Grid: TGrid): Boolean;
var
  NumCols: Integer;
  i, Camp: Integer;
begin
  NumCols := Grid.Columns.Count;
  Result := False;
  Camp := 0;
  with Grid do begin
    first;
    while not eof do begin
      for i := 0 to NumCols - 1 do begin
        if VarType(SelectRow.Value[i]) = 1 then
          inc(Camp);
      end;
      Next;
    end;
  end;
  if Camp = NumCols then
    Result := True;
end;

El problema es que desearía desconectar al inicio, los eventos OnBeforePost y OnAfterPost y volver a implementarlos al final.

Para desconectarlos no tengo problema:
Código Delphi [-]
Grid.OnBeforePost:=nil;
Grid.OnAfterPost:=nil

Lo que no se como hacer es para reponerlos.
Mucha gracias.
Responder Con Cita
  #2  
Antiguo 23-02-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Define variables del mismo tipo que los eventos que quieres "desconectar".
Antes de "desconectarlos" apunta con las variables a los eventos. Luego los eventos a nil (como has hecho) y al final vuelves a asignar a los eventos los valores almacenados en las variables.

Igual que harías con otra variable de tipo simple.

En realidad los eventos, no son más que "enteros". Son punteros a una zona de memoria. Si guardas el valor de ese puntero y lo restauras al final, debe funcionar sin problemas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 23-02-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
Código Delphi [-]
Grid.OnBeforePost:= FormX.GridBeforePost;
Grid.OnAfterPost:= FormX.GridAfterPost;

Esto siempre y cuando no crees el grid y los eventos en tiempo de ejecucion y lo hayas incrustado en el FormX.

Sino como te dijo Neftali, declaras dos metodos que tengan los mismos parametros que los respectivos OnBeforePost y OnAfterPost, por ejemplo:

Código Delphi [-]

interface
...
procedure MiGridBeforePost(// parametros);
procedure MiGridAfterPost(// parametros);
...


implementation
procedure MiGridBeforePost(// parametros);
begin

end;

procedure MiGridAfterPost(// parametros);
begin

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Grid.OnBeforePost := NIL;
  Grid.OnAfterPost := NIL;

  Grid.OnBeforePost := MiGridBeforePost;
  Grid.OnAfterPost := MiGridAfterPost;
end;

Si te fijas este es el trabajo sucio que te hace el delphi cuando asignas eventos desde el inspector de objetos
Responder Con Cita
  #4  
Antiguo 23-02-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Esto siempre y cuando no crees el grid y los eventos en tiempo de ejecucion y lo hayas incrustado en el FormX.
Sino como te dijo Neftali, declaras dos metodos que tengan los mismos parametros que los respectivos OnBeforePost y OnAfterPost, por ejemplo:
Creo que lo que él quiere es "desconectar" los eventos y luego volverlos a "conectar".
Lo que tú le estás sugiriendo es "cambiar" los existentes por unos que hayas programado tú.

Son dos cosas diferentes.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 01-03-2015
joseprad joseprad is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
joseprad Va por buen camino
Hola.
Disculparme pero he estado un poco ocupado y aun no había visto vuestras respuestas.
En primer lugar muchas gracias a todos.

Tal como dice Neftali, lo que yo deseo es desconectar los eventos al inicio y al final volverlos a cargar.

Lo que no se es que tipo de variable debo definir para poder guardar el evento.
Responder Con Cita
  #6  
Antiguo 01-03-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola joseprad.

Un ejemplo en el que activas/desactivas los eventos por medio de dos botones:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    ...
    DBGrid1: TDBGrid;
    btnDeactivate: TButton;
    btnActivate: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnDeactivateClick(Sender: TObject);
    procedure btnActivateClick(Sender: TObject);
    procedure DataSetBeforePost(DataSet: TDataSet);
    procedure DataSetAfterPost(DataSet: TDataSet);
  private
     FOldBeforePost,
     FOldAfterPost: TDataSetNotifyEvent;
  ...

  end;
...

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    FOldBeforePost:= BeforePost;
    FOldAfterPost := AfterPost;
  end;
end;

procedure TForm1.btnDeactivateClick(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    BeforePost:= nil;
    AfterPost := nil;
  end;
end;

procedure TForm1.btnActivateClick(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    BeforePost:= FOldBeforePost;
    AfterPost := FOldAfterPost;
  end;
end;

procedure TForm1.DataSetAfterPost(DataSet: TDataSet);
begin
  ShowMessage('Evento AfterPost');
end;

procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
begin
  ShowMessage('Evento BeforePost')
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 03-03-2015
joseprad joseprad is offline
Miembro
 
Registrado: oct 2006
Posts: 36
Poder: 0
joseprad Va por buen camino
Muchas gracias es lo que necesitaba
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
Rutina de Impresion TRichEdit darkamerico OOP 5 20-03-2013 01:09:06
Traducción de rutina JAVA waly2k1 JAVA 2 24-07-2010 11:27:10
Rutina muy lenta... KAYO Firebird e Interbase 10 04-07-2007 18:14:44
Que tiene esta Rutina? esimon OOP 5 04-07-2006 18:19:03
No sale rutina SQl ............ Coco_jac SQL 2 30-11-2005 17:52:44


La franja horaria es GMT +2. Ahora son las 14:23:54.


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