Há dois anos, venho assinando e lendo a Revista ClubeDelphi e Java Magazine e, com o advento da Nota Fiscal Eletronica, oportunidade em que adotei e estudei o componente ACBrNFePCN do ACBr conciliado a era das vídeo-aulas, estou conseguindo criar algumas classes e enterder vários conceitos de OO.
Mas algumas coisas me intrigavam: além de ser muito difícil ler e entender o código da VCL, como, por exemplo, o Create do TObjetc poderia instanciar um objeto e alocar memória se esse método/procedimento não contém nenhum comando entre o bloco begin end?
Tomado por esta curiosidade comecei perguntar em fóruns e pesguisar na internet se haveria como acompanhar a depuração dentro da VCL linha por linha, ou seja, usando a tecla F7.
Para minha agradável surpresa, nesta ocasião em que estava estuando o método (procedure Free) da classe TObject e o destructor Destroy das classes TObject, TPersistent e TComponent pensei em adicionar no Library Path os caminhos C:\Arquivos de programas\Borland\Delphi7\Source\Rtl\Sys e C:\Arquivos de programas\Borland\Delphi7\Source\Rtl\Common (uso D7) para ver se iria compilar para detro da VCL. Mas não deu certo. Foi aí que pensei nas opções do projeto e lá estava na guia Compiler a última caixa de verificação: Use Debug DCUs.
Agora sim, crie uma nova aplicação, em seguida vá até Project |Options|Compiler (D7) e marque a opção: Use Debug DCUs;
Em seguida coloque um botão no form com o código abaixo:
procedure TForm1.Button1Click(Sender: TObject);
var Obj: TObject;
Pers: TPersistent;
Comp: TComponent;
begin
Obj := TObject.Create;
Obj.Free;
Pers := TPersistent.Create;
Pers.Free;
Comp := TComponent.Create(self);
Comp.Free;
end;
Marque todas as linhas entre o begin e end com Breakpoint, compile com F9, clique no botão e experimente o F7.
Agora é só acompanhar o fluxo de execução e ver tudo que está sendo compilado.
Experimente também substituir o bloco de código entre o begin e o end pelo código abaixo:
Obj := TObject.Create;
FreeAndNil(Obj);
Pers := TPersistent.Create;
FreeAndNil(Pers);
Comp := TComponent.Create(self);
FreeAndNil(Comp);
Agora é ver o que acontece por trás dos bastidores da VCL e tomar gosto ou despertar interesse pela POO.
Abraço a todos e até a próxima