PDA

Ver la Versión Completa : Problema con constructor..


linuxtin
08-08-2012, 15:31:21
Hola a todos! Me estoy volviendo loco no puedo crear el objeto de la clase TPersona desde otro form, acá les dejo el código de la clase.


unit Persona;



interface
uses SysUtils, Classes;

type

TPersona=Class
private

idPersona:string;
apellido:string;
nombre:string;
dni:string;
fechaNacimiento:TDate;
provincia:string;
ciudad:string;
codigoPostal:integer;
direccion:string;
codigoArea:integer;
telefono:string;



public

constructor Create; overload;
constructor Create(Apellido:string;Nombre:string);overload;





published

property SetGetApellido: string read apellido write apellido;
property SetGetNombre: string read nombre write nombre;






END;


implementation


constructor TPersona.Create(Apellido: string; Nombre: string);
begin


apellido:=Apellido;
nombre:=Nombre;
end;


constructor TPersona.Create;
begin

end;

end.


y en el form lo llamo de esta manera




procedure TForm1.Button1Click(Sender: TObject);
var
persona:TPersona;

begin

persona:=TPersona.Create('Juan','Pedro');
Edit3.Text:=persona.SetGetApellido;



end;

end.



Si alguien me puede dar una mano, desde ya muchas gracias!!

Caro
08-08-2012, 15:49:14
Hola linuxtin, no dices que error te sale, en uses debes añadir la unit Persona que supongo lo haces. Otra cosa que veo, apellido y nombre tienen el mismo nombre que tus parametros del constructor (delphi no hace diferencia entre mayusculas y minusculas) cambia los nombres.


constructor TPersona.Create(aApellido: string; aNombre: string);
begin
apellido:=aApellido;
nombre:=aNombre;
end;


Saluditos

ecfisa
08-08-2012, 15:51:16
Hola linuxtin.

Proba de este modo:

unit uPersona;

interface

uses SysUtils, Classes;

type
TPersona=Class
private
idPersona:string;
FApellido:string;
FNombre:string;
//...
public
constructor Create(Apellido:string; Nombre:string);
//...
published
property Apellido: string read FApellido write FApellido;
property Nombre: string read FNombre write FNombre;
//...
end;

implementation

constructor TPersona.Create(Apellido: string; Nombre: string);
begin
FApellido:= Apellido;
FNombre:= Nombre;
end;

//...

end.



...
implementation

uses uPersona;

procedure TForm1.Button1Click(Sender: TObject);
var
Persona: TPersona;
begin
Persona:= TPersona.Create('TRUENO','PEPE');
ShowMessage(Persona.Nombre+' '+Persona.Apellido);
end;


Saludos.

linuxtin
08-08-2012, 16:01:40
Hola linuxtin.

Proba de este modo:

unit uPersona;

interface

uses SysUtils, Classes;

type
TPersona=Class
private
idPersona:string;
FApellido:string;
FNombre:string;
//...
public
constructor Create(Apellido:string; Nombre:string);
//...
published
property Apellido: string read FApellido write FApellido;
property Nombre: string read FNombre write FNombre;
//...
end;

implementation

constructor TPersona.Create(Apellido: string; Nombre: string);
begin
FApellido:= Apellido;
FNombre:= Nombre;
end;

//...

end.



...
implementation

uses uPersona;

procedure TForm1.Button1Click(Sender: TObject);
var
Persona: TPersona;
begin
Persona:= TPersona.Create('TRUENO','PEPE');
ShowMessage(Persona.Nombre+' '+Persona.Apellido);
end;


Saludos.



Gracias chicos!! Efectivamente era eso, pensé que estaba mal declarado algo.

Como ven declarada la clase? Algo que esta mal?

Gracias !!

ecfisa
08-08-2012, 17:20:01
Como ven declarada la clase? Algo que esta mal?
Hola.

No... Pero podrías agregar algunos detalles a efectos de optimizar el ingreso de los valores:

...
type
TPersona=Class
private
idPersona:string;
FApellido:string;
FNombre:string;
//...
function GuardarApellido: Boolean;
function GuardarNombre: Boolean;
procedure SetApellido(const Value: string);
procedure SetNombre(const Value: string);
//
public
constructor Create(aApellido:string; aNombre:string);
//...
published
property Apellido: string read FApellido write SetApellido stored GuardarApellido;
property Nombre: string read FNombre write SetNombre stored GuardarNombre;
//...
end;

implementation

constructor TPersona.Create(aApellido: string; aNombre: string);
begin
Apellido:= aApellido;
Nombre:= aNombre;
end;

function TPersona.GuardarApellido: Boolean;
begin
Result:= FApellido <> '';
end;

function TPersona.GuardarNombre: Boolean;
begin
Result:= FApellido <> '';
end;

procedure TPersona.SetApellido(const Value: string);
begin
if Value <> FApellido then
FApellido:= Value;
end;

procedure TPersona.SetNombre(const Value: string);
begin
if Value <> FNombre then
FNombre:= Value;
end;
...


Saludos.