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 26-08-2005
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 dec
¿cómo podría volverse a habilitar el Click programáticamente según tu propuesta roman?
CheckBox1.ClicksDisabled := false;

// Saludos
Responder Con Cita
  #2  
Antiguo 26-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hombre, roman, si preguntaba es porque esa instrucción que refieres no me funciona (no sé porqué)...

Me dice aquello de "Undeclared identifier: 'ClicksDisabled'"...

Actualización: Está bien. Si hago uso de la interposición de la clase "TCheckBox" entonces no hay problema en usar la instrucción de marras.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 26-08-2005 a las 02:27:04. Razón: (actualización)
Responder Con Cita
  #3  
Antiguo 26-08-2005
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 dec
Está bien. Si hago uso de la interposición de la clase "TCheckBox" entonces no hay problema en usar la instrucción de marras.
¿Interposición? ¿Qué es eso?

ClicksDisabled es una propiedad protegida en TCheckBox, pero recordemos la accesibilidad de propiedades y métodos protegidos:

Cita:
Empezado por Delphi
Accessible to code in the unit(s) where the class and its descendants are defined.
Como en la unidad del formulario TCheckBox es un descendiente de StdCtrls.TCheckBox, tal propiedad puede accederse libremente.

// Saludos
Responder Con Cita
  #4  
Antiguo 26-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sin duda no supe decir lo que quería decir. Muchas gracias roman.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 26-08-2005
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 dec
Sin duda no supe decir lo que quería decir
¿y qué es lo que querías decir?

¿Te funcionó o no?

// Saludos
Responder Con Cita
  #6  
Antiguo 26-08-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Lo que quería decir (a ver si me sale ahora) es lo siguiente. Si yo no hago uso de la clase ("TCheckBox") interpuesta antes de la declaración del tipo del formulario, no puedo acceder a la propiedad "ClicksDisabled". Pero, como dije antes:

Cita:
Empezado por dec
Actualización: Está bien. Si hago uso de la interposición de la clase "TCheckBox" entonces no hay problema en usar la instrucción de marras.
Si hago uso de la clase interpuesta tal y como proponías entonces puedo acceder a la propiedad "ClicksDisabled" sin problemas. Si ahora resulta que no es tanto porque se hiciera uso de la clase interpuesta, sino que se trata de lo que dices:

Cita:
Empezado por roman
Como en la unidad del formulario TCheckBox es un descendiente de StdCtrls.TCheckBox, tal propiedad puede accederse libremente.
... porque, según Delphi:

Cita:
Empezado por Ayuda de Delphi
Accessible to code in the unit(s) where the class and its descendants are defined.
Y sí, roman, ya sí puedo, como digo, hacer uso de la propiedad "ClicksDisabled", esto es, por lo que has comentado. Así que otra vez he vuelto a confundirme, puesto que no podía acceder a dicha propiedad no tanto por hacer o no hacer uso de la clase interpuesta, sino por lo que se refiere arriba que dice la ayuda de Delphi y tú transcribiste oportunamente.

(Esto si no es que puedo acceder a dicha propiedad precisamente por haber "redeclarado" la clase "TCheckBox", pues de otro modo acaso no fuera posible, de hecho no es posible si no lo hago así, como ya dije más arriba)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 26-08-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Cuantas vueltas para explicar algo tan simple

ClicksDisabled esta declarado en la clase TButtonControl como una propiedad protected (protegida), por lo que sólo puede ser accedida desde la misma clase o sus descendientes.

Hay varias formas de poder acceder a ella

como lo hizo Lepe, creando un nuevo componente que agrega una nueva propiedad para poder modificarlo.

Como lo hizo roman, redefieniendo la clase y desabilitando directamente la propiedad, pero lo bueno es que no hay instalar ningún componente .

y ahora para resumir doy la mia

Código Delphi [-]
TCheckBox = class(StdCtrls.TCheckBox)
public
   property ClicksDisabled;
end;
simplemente hago pública la propiedad y ahora que cada uno la cambie a su antojo cuando quiera y como quiera, sin tener que instalar nada. Eso si debe estar antes de la declaración del formulario (igual que el de roman).

Si quieren crear un componente que ya lo tenga, para no tener que agregar este código en cada proyecto, cambian el public por published, cambian el nombre de la clase y lo registran.

Espero no haber liado más
__________________
[Crandel]
Responder Con Cita
  #8  
Antiguo 26-08-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
Artículo

Vaya, precisamente ayer estuve leyendo un artículo de Ian Marteens sobre Clases Interpuestas:
http://www.marteens.com/trick46.htm
Aquí os dejo el link.

Saludos.
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #9  
Antiguo 26-08-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Vaya, me descuido un poco y se monta un pollo

En El Checkbox que yo propuse, para hacer que se dispare el Onclick por código, usamos Checkbox.Checked := true /false

Cuando no queremos que se dispare el evento, simplemente usamos checkbox.SetChecked(true/false)

Y no tiene más historia.

Un saludo
Responder Con Cita
  #10  
Antiguo 07-12-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Hola!

Aqui reviviendo este hilo. A ver no entendi. Estoy tratando de implementar el codigo de Roman:

Código Delphi [-]
unit UGeneralDatos;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls, StdCtrls, Buttons,
  DateUtils;
 
 {Redefinimos el componente TCheckBox para evitar el evento OnClick}
type
  TCheckBox = class(StdCtrls.TCheckBox)
  public
    constructor Create(AOwner: TComponent); override;
  end;
 
{ 
constructor TCheckBox.Create(AOwner: TComponent);
begin
  inherited;
  ClicksDisabled := true;
end;
 }

type
  TfrmGDatos = class(TForm)
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    StringGrid1: TStringGrid;
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure bbtnOKClick(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
      public
    { Public declarations }
  end;
 
var
  frmGDatos: TfrmGDatos;
 
implementation
 
uses UCnx, UHoraFecha, UVarios;
 
{$R *.dfm}
 
{Definimos el constructor del TCheckBox sin evento OnClick}
constructor TCheckBox.Create(AOwner: TComponent);
begin
  inherited;
  ClicksDisabled := true;
end;
 
procedure TfrmGDatos.FormCreate(Sender: TObject);
begin
  
  checkbox1.Checked := true;
  checkbox2.Checked := true;
  checkbox3.Checked := false;
  checkbox4.Checked := false;
  checkbox5.Checked := false;
  checkbox6.Checked := false;
  checkbox7.Checked := true;
  checkbox8.Checked := true;
end;

La pregunta: ¿esta correcto donde implemente el constructor?
La duda: Se sigue comportando igual, el evento OnClick se dispara de todos modos. ¿Donde me perdi?
Responder Con Cita
  #11  
Antiguo 07-12-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
¿Esto compila?

NO veo donde está declarada la clase TCheckBox... ni creo que tus componentes sean de esa nuev aclase... ¿me equivoco?
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 08-12-2007
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Compila perfectamente, no registra error ni lanza algun aviso, solo que el comportamiento no es el que segun el incio del hilo menciona: Evitar el evento OnClick al asignar la propiedad checked por codigo.

p.d. El codigo no esta completo solo puse lo relevante a la redeclaracion del checkbox.
Responder Con Cita
  #13  
Antiguo 08-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Prueba a instalar mi componente, dicho en el mensaje nº 15 y después me comentas .

No voy a mirar las otras formas, porque hay varias, lo cierto, es que mi CheckboxNoclick si funciona porque lo he utilizado en algunos proyectos.

Las demás opiniones, no sé, no las he probado.

Con Gexperts.org no tendrás problemas en cambiar todos los checkbox por TcheckboxNoClick.

Creo recordar vagamente que había problemas colaterales al dejar ClicksDisabled a true.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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 10:28:00.


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