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 07-06-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Question valor de defecto de propiedad.

Hola querido foro, yo de nuevo molestando por acá, le comento estoy creando un componente muy simple que llama a un form que tiene:
1 - Un label con passwordchar = *
2 - Una caja de texto
3 - Un boton ok
4 - Un boton cancelar
La idea principal es que se pueda cambiar el caption del form, del label y del boton ok y cancelar por propiedades para que no me limite si tengo que hacer un programa para otro idioma (hace mas de 5 años programe para un italiano).

El código completo del form es:

Código Delphi [-]
unit Ufcontrasena;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  Tfcontrasena = class(TForm)
    Lleyenda: TLabel;
    Eclave: TEdit;
    btnok: TBitBtn;
    btncancel: TBitBtn;
    procedure btnokClick(Sender: TObject);
    procedure inicializar();
  private
    { Private declarations }
  public
    titulo, contrasena, leyenda, strok, strcancel, mensaje: string;
    result : boolean;
  end;
var
  fcontrasena: Tfcontrasena;

implementation

{$R *.dfm}

procedure Tfcontrasena.inicializar();
begin
fcontrasena.Caption:= titulo;
Lleyenda.Caption:= leyenda;
btnok.Caption:= strok;
btncancel.Caption:= strcancel;
end;

procedure Tfcontrasena.btnokClick(Sender: TObject);
begin
   result:= Eclave.Text = contrasena;
   if result = True then close
   else
      begin
         ShowMessage(mensaje);
      end;
end;
end.

y el código del componente que si me está funcionando es:
Código Delphi [-]
unit contrasena;

interface

uses
  Windows, Messages, SysUtils, Classes;

type
  tcontrasena = class(tcomponent)
  private
    Ftitulo ,   // texto del titulo de la ventana
    Fvarcontrasena, // valor de la contraseña
    Fleyenda,     //  caption del label
    Fstrok,       // caption del boton ok
    Fstrcancel,   // caption del boton cancel
    Fmensaje: string;   // mensaje en caso de ingreso incorrecto
    result : boolean;   // resultado que devuelve, ok si coincide.

  protected
    { Protected declarations }
  public
    constructor Create(AOwner : TComponent); override;
    procedure Execute;
  published
///////// si sacos las { } me da error.
    property Titulo: string read Ftitulo write Ftitulo {default 'Ingrese contraseña'};
    property contrasena: string read Fvarcontrasena write Fvarcontrasena {default ''};
    property Leyenda: string read Fleyenda write Fleyenda {default 'Clave'} ;
    property ok:string read Fstrok write Fstrok {default 'Ok'};
    property cancel: string read Fstrcancel write Fstrcancel {default 'Cancelar'};
    property mensaje: string read fmensaje write fmensaje {default 'clave incorrecta'};
  end;

procedure Register;

implementation

uses Ufcontrasena;

constructor tcontrasena.Create(AOwner : TComponent);
begin
  inherited Create(AOwner);
  {Asignar la propiedades por defecto}
   Ftitulo := 'Ingrese contraseña';
   Fvarcontrasena := '';
   Fleyenda := 'Clave';
   Fstrok:= 'Ok';
   Fstrcancel:= 'Cancelar';
   fmensaje:= 'Clave incorrecta';
  fcontrasena := tFcontrasena.Create(self);
  try
    {Asignar las propiedades del componente a las variables
     correspondientes del form}
     fcontrasena.titulo := ftitulo;
     fcontrasena.contrasena := fvarcontrasena;
     fcontrasena.leyenda := fleyenda;
     fcontrasena.strok := fstrok;
     fcontrasena.strcancel := fstrcancel;
     fcontrasena.mensaje:= fmensaje;
    {Inicializar el form}
    fcontrasena.Inicializar;
    {Mostrar el form de forma modal}
    fcontrasena.ShowModal;
  finally
    {Liberar el form}
    fcontrasena.Free;
  end;
end;

procedure Register;
begin
  RegisterComponents('Curso', [tcontrasena]);
end;

end.

Bueno como explico en la definición de las propiedades si saco las { } en:
Código Delphi [-]
 published
///////// si sacos las { } me da error.
    property Titulo: string read Ftitulo write Ftitulo {default 'Ingrese contraseña'};
    property contrasena: string read Fvarcontrasena write Fvarcontrasena {default ''};
    property Leyenda: string read Fleyenda write Fleyenda {default 'Clave'} ;
    property ok:string read Fstrok write Fstrok {default 'Ok'};
    property cancel: string read Fstrcancel write Fstrcancel {default 'Cancelar'};
    property mensaje: string read fmensaje write fmensaje {default 'clave incorrecta'};
  end;
El error que me sale es:

Cita:
[Error] contrasena.pas(25): Default values must be of ordinal, pointer or small set type
Bueno, no se que me estoy pasando por alto debe ser que me estoy quedando viejo, no lo puedo sacar.

Bueno espero que me puedan ayudar.
Responder Con Cita
  #2  
Antiguo 07-06-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

El detalle es que la palabra reservada default al momento de definir una propiedad publicada (published) solo se permite para propiedades del tipo Ordinal (Enteros, Conjuntos, Tipos numerados, etc...), como bien lo indica el mensaje de error que obtienes.

Otro detalle que tienes que tomar en cuenta es que la palabra reservada solo le indica al mecanismo de escritura del componentes que si el valor de la propiedad es el indicado como default no lo escriba en el archivo DFM. Esto significa que en el constructor tienes que inicializar las propiedades con los valores predeterminados.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #3  
Antiguo 07-06-2011
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Agrego al comentario de maeyanes, también existe la palabra reservada stored, donde puedes definir un valor boolean o reverenciar a una función boolean y decidir si guardar o no el valor de la propiedad.
Otra cosa importante a tener en cuenta, es que tanto default como stored solo inciden en si se guarda o no el valor de la propiedad, pero no inicializan el valor de la propiedad con un valor por defecto, esto debemos hacerlo en el constructor del objeto, como lo vienes haciendo.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 08-06-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Muchas gracias

Muchas gracias, entonces poniéndola en el constructor bastaría.
Mañana en el trabajo me fijo ya que no tengo aquí el código
Responder Con Cita
  #5  
Antiguo 08-06-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
apoyo a mis compañeros en sus respuestas sobre utilizar el constructor para inicializar las variables... pero me gustaria agregar que la propiedad default tiene un uso especifico con propiedades tipo lista que se accesan a través de un indice...

es decir, si defines la propiedad:

TMyclase =class
...
property Items[Index: Integer] : String; read getItems write setItems; Default;
...

Puedes accesar los Items de la siguiente manera:

objMyclase.Items[10] := 'prueba';

o tambien...

objMyclase[10] := 'prueba';

En sintesis, la palabra Default en una propiedad no especifica un valor por defecto para la misma, sino que señala cual es la propiedad que se tomara por defecto para la clase...

El otro uso que tiene la propiedad Default es con propiedades ordinales, como comentan nuestros compañeros, pero no podría dar una explicación de ello por que aun no las he utilizado...

un saludo,
Responder Con Cita
  #6  
Antiguo 10-06-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Smile Muchas gracias.

Muchas gracias, seguiré sus recomendaciones al pie de la letra.
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
Valor Por Defecto DBlookupComboBox hcalero Conexión con bases de datos 0 22-01-2008 10:54:17
Valor por defecto en DBLookUpComboBox Durbed OOP 1 08-07-2005 19:05:54
Valor por defecto en DBRadioGroup RyAr Varios 1 01-07-2004 14:46:53
Valor por defecto en OnNewRecord RyAr Conexión con bases de datos 4 22-06-2004 10:49:32
Valor por defecto en un dbgrid NuncaMas Conexión con bases de datos 3 28-01-2004 20:31:19


La franja horaria es GMT +2. Ahora son las 05:48:41.


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