Ver Mensaje Individual
  #1  
Antiguo 07-06-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Reputación: 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