Sexta-feira, Novembro 26, 2004

Adicionando os nomes dos arquivos a um menu em .NET

Após terminar o programa da postagem anterior, pensei em portá-lo para .NET usando o Delphi 2005. Usando a VCL.NET não tem nenhum problema, praticamente não devem ser feitas modificações. O que qeria é mudar para WinForms, sem usar as rotinas da VCL ou da RTL do Delphi, apenas o Framework .NET.
Para isso, o programa deve ser inteiramente refeito, inclusive sua interface. A principal mudança está na função PreencheItem que, reescrita, fica assim:



procedure TWinForm.PreencheItem(const Diretorio : String;
AMenuItem : System.Windows.Forms.MenuItem);
var
DirInfo : System.IO.DirectoryInfo;
AFileInfo : Array of System.IO.FileInfo;
FilInfo : System.IO.FileInfo;
ADirInfo : Array of System.IO.DirectoryInfo;
DirecInfo : System.IO.DirectoryInfo;
MenuItem : System.Windows.Forms.MenuItem;
begin
// guarda arquivos no diretório
DirInfo := System.IO.DirectoryInfo.Create(Diretorio);
// AFileInfo tem os arquivos do diretório
AFileInfo := DirInfo.GetFiles('*.*');
// ADirInfo tem os subdiretórios
ADirInfo := DirInfo.GetDirectories;
for DirecInfo in ADirInfo do
// Processa os subdiretórios
if (DirecInfo.Name <> '.') and (DirecInfo.Name <> '..')
then begin
MenuItem := System.Windows.Forms.MenuItem.Create(
DirecInfo.Name);
AMenuItem.MenuItems.Add(MenuItem);
PreencheItem(direcInfo.Name,MenuItem);
end;
for FilInfo in AFileInfo do begin
// Processa os arquivos
MenuItem := System.Windows.Forms.MenuItem.Create(
FilInfo.Name);
Include(MenuItem.Click, MenuItemClick);
AMenuItem.MenuItems.Add(MenuItem);
end;
end;

Aqui o processamento é muito mais simples. Os métodos GetDirectories e GetFiles da classe DirectoryInfo guardam os arquivos e diretórios em matrizes. Então, com o novo for ... in ... do Delphi, processamos estas matrizes, adicionando os novos itens de menu. Para os diretórios, chamamos a função PreencheItem recursivamente.
Aqui, uma observação: os menus em WinForms não tem imagens. Como colocar imagens nos menus? Isto é tema para uma outra postagem :-). Só para efeito de comparação, o programa resultante (com mesma funcionalidade do anterior) tem apenas 30Kb.


0 Comentários:

Postar um comentário

<< Home