Amigos estou trazendo um exemplo de como criar uma classe à partir de seu nome ( String ), eu já vi alguns exemplos de como fazer isso utilizando forms, mas para classes normais eu ainda não tinha visto nenhum exemplo, então segue abaixo a solução que eu criei.
1- Primeiro crie um form simples como o da figura abaixo tendo 3 edits , 1 bitbtn e 2 labels;
2- Renomeie os componentes conforme o exemplo, por favor.
3- É só clicar no botão e acompanhar ( debug ) para ver o que é feito no código, o efeito de tela nada mais é que o preenchimento dos dois edits de baixo com o valor das propriedades setadas no código.
4- No meu caso a primeira classe eu fiz descendente de TDataModule por uma necessidade minha, mas na realidade ela deve ser descendente de TPersistentImagem do form
unit UCriarClasseString;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, AdvSmoothDock, jpeg, ExtCtrls, StdCtrls, Buttons;
type
TminhaClasse = class (TDataModule)
private
FPrimeiraClasse: String;
procedure SetPrimeiraClasse(const Value: String);
published
property PrimeiraClasse:String read FPrimeiraClasse
write SetPrimeiraClasse;
end;
TMinhaSegundaClasse = class(TminhaClasse)
private
FSegundaClasse: STring;
procedure SetSegundaClasse(const Value: STring);
published
property SegundaClasse:STring read FSegundaClasse
write SetSegundaClasse;
end;
TfrmCriarClasseString = class(TForm)
btClasse: TBitBtn;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure btClasseClick(Sender: TObject);
private
{ Private declarations }
procedure InstanceClasse(AClassName: String);
public
{ Public declarations }
end;
var
frmCriarClasseString: TfrmCriarClasseString;
implementation
{$R *.dfm}
procedure TfrmCriarClasseString.btClasseClick(Sender: TObject);
begin
InstanceClasse(Edit1.Text);
end;
procedure TfrmCriarClasseString.InstanceClasse
(AClassName: String);
var
lObj: TMinhaSegundaClasse;
Pers: TPersistentClass;
begin
Pers := GetClass(AClassName);
lObj := (Pers.Create) as TMinhaSegundaClasse;
if Assigned(lObj) then
try
lObj.FPrimeiraClasse := 'Propriedade da Classe ancestral';
lObj.FSegundaClasse := 'Propriedade da Segunda Classe';
Edit2.Text :=lObj.FPrimeiraClasse;
Edit3.Text :=lObj.FSegundaClasse;
finally
lObj.Free;
end
end;
{ TminhaClasse }
procedure TminhaClasse.SetPrimeiraClasse(const Value: String);
begin
FPrimeiraClasse := Value;
end;
{ TMinhaSegundaClasse }
procedure TMinhaSegundaClasse.SetSegundaClasse(const
Value: STring);
begin
FSegundaClasse := Value;
end;
initialization
RegisterClasses([TminhaClasse, TMinhaSegundaClasse]);
end.
Link para os arquivos:
UCriarClasseString.pas
UCriarClasseString.dfm
1 comment
Mto legal, vlw
Postar um comentário