Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2004
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Unhappy TCheckbox no acepta el OnClick

Hola de nuevo! yo dando dolores de cabeza de nuevo
Ahora tengo un problema muy particular que quiero plantearles: tengo un checkbox de IntraWeb (TIWCheckBox), el cual quiero que efectúe una acción al darle clic, sin embargo, no me funciona llamarlo directamente
Código Delphi [-]
chkDefinitivo  := TIWCheckBox.Create(Self);
chkDefinitivo.Tag  := grdDatos.RowCount - 1;
chkDefinitivo.Caption  := '';
grdDatos.Cell[grdDatos.RowCount - 1, 8].Control := chkDefinitivo;
chkDefinitivo.OnClick  := PonerTotales;
chkDefinitivo.Checked  := false;
El error que me marca es "Incompatible types: 'Parameter lists differ'"; sin embargo, PonerTotales es un método que no utiliza parámetros, y dentro de él no manda llamar métodos con parámetros.
En las variables, está declarada como:
Código Delphi [-]
chkDefinitivo: TIWCheckBox;

Definitivamente en este momento no se me ocurre nada, ya que la ayuda de Delphi, sólo me dice lo obvio, que si un método tiene parámetros, debo llamarlo con parámetros, pero en este caso, PonerTotales no los tiene...

Un saludo y espero que puedan ayudarme como siempre lo han hecho
Responder Con Cita
  #2  
Antiguo 30-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por atirado
sin embargo, PonerTotales es un método que no utiliza parámetros
Pues quizá este sea precisamente el problema. A no ser que IntraWeb entienda algo muy raro por OnClick, el método que le asignes debe recibir un parámetro: Sender: TObject.

Dices que la ayuda de Delphi no dice mucho pero sí te manda un mensaje "Incompatible types" lo mínimo es checar el tipo de datos involucrados en la asignación. Al menos con un CheckBox normal, al consultar el tipo de datos de la propiedad OnClick verás que es de tipo TNotifyEvent y al buscar en la ayuda acerca de este tipo verás que está declarado como

Código Delphi [-]
type
  TNotifyEvent = procedure(Sender: TObject) of object;

de donde concluyes que hace falta un parámetro al procedimiento PonerTotales.

// Saludos
Responder Con Cita
  #3  
Antiguo 30-09-2004
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Thumbs up

Hola, Román! Gracias por la aclaración, y sí tiene mucho sentido como lo dices. Me hicieron llegar un código donde ya pude resolver mi duda, pero se los explico aquí para aquellos que tengan problemas con IntraWeb, el cual veo que no hay mucha gente que lo esté utilizando en este foro
En fin, mi declaración del código estaba correcta:
Código Delphi [-]
chkDefinitivo  := TIWCheckBox.Create(Self);
chkDefinitivo.Tag  := grdDatos.RowCount - 1;
chkDefinitivo.Caption  := '';
grdDatos.Cell[grdDatos.RowCount - 1, 8].Control := chkDefinitivo;
chkDefinitivo.OnClick  := PonerTotales;
chkDefinitivo.Checked  := false;
Sin embargo, era la funcionalidad de IntraWeb la que me había hecho bolas; simplemente se deben cumplir 3 condiciones:
  1. El procedimiento a utilizar en el OnClick, debe ser declarado de la siguiente manera:
    Código Delphi [-]
    procedure PonerTotales(Asender: TObject);
  2. El procedimiento debe estar declarado antes de private o public y ser declarado en type.
    Código Delphi [-]
    type
      TfrmConsultas = class(TIWAppForm)
        txtEncabezado: TIWText;
        lblFInicio: TIWLabel;
        lblFFinal: TIWLabel;
        edtFinicio: TIWEdit;
        edtFFinal: TIWEdit;
        btnConsultar: TIWButton;
        grdDatos: TIWGrid;
        lblTotalRegistros: TIWLabel;
        procedure grdDatosRenderCell(ACell: TIWGridCell; const ARow,
          AColumn: Integer);
        procedure btnConsultarClick(Sender: TObject);
        procedure PonerTotales(Asender: TObject);
      public
      private
        procedure LlenarGridDatos;
    .... {etc]
  3. En el evento OnClick de un componente que se crea dinámicamente, no se llama usando el parámetro ASender, pero si se utiliza en cualquier otra parte del código, debe llamarse usando Self. Ejemplos:
    Código Delphi [-]
    ...
    chkDefinitivo.OnClick  := PonerTotales;
    ...
    PonerTotales(Self);
    ...
Así, se evita el error del compilador, tal cual yo lo veía. Si alguien utiliza IntraWeb en sus aplicaciones (se que algunos todavía recelan de él, pero creanme que es mejor de lo que parece ) y necesita llamar un procedimiento en el evento OnClick, espero le sirva esta aclaración

gracias de nuevo por demostrar que este sigue siendo el mejor foro de Delphi en Español

Salu2 desde MX
Alejandro
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 17:55:45.


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