Quinta-feira, Novembro 25, 2004

Adicionando os nomes dos arquivos a um menu

Às vezes, queremos adicionar o conteúdo de um diretório (arquivos e subdiretórios) a um menu, de maneira que possamos selecionar o arquivo lá. Para fazer isso, devemos pesquisar o diretório com as funções FindFirst e FindNext, adicionando os novos itens do menu. Como a pesquisa é recursiva, criamos uma função PreencheItem, que prechenche um item de menu com os arquivos encontrados no subdiretório:



procedure TForm2.PreencheItem(const Diretorio : String;
AMenuItem : TMenuItem);
var
SRec : TSearchRec;
Done : Integer;
MenuItem : TMenuItem;
begin
// Pesquisa primeiro arquivo no diretório
Done := FindFirst(Diretorio+'*.*',faAnyFile,SRec);
while Done = 0 do begin
// descarta os diretórios atual e pai
if (SRec.Name = '.') or (SRec.Name = '..') then begin
Done := FindNext(SRec);
continue;
end;
// Cria o novo item de menu com o nome do arquivo
MenuItem := TMenuItem.Create(AMenuItem);
MenuItem.Caption := SRec.Name;
// Se for diretório preenche o item de menu com o subdiretório
if (SRec.Attr and faDIRECTORY) <> 0 then begin
MenuItem.ImageIndex := 1;
PreencheItem(IncludeTrailingPathDelimiter(Diretorio+
SRec.Name),MenuItem);
end
// Se for arquivo cria evento OnClick
else begin
MenuItem.ImageIndex := 0;
MenuItem.OnClick := ItemClick;
end;
// Adiciona item de menu
AMenuItem.Add(MenuItem);
// Pesquisa próximo arquivo
Done := FindNext(SRec);
end;
FindClose(SRec);
end;

Este código pesquisa os arquivos do diretório, adicionando um novo item de menu para cada arquivo. Quando o arquivo é um subdiretório, a rotina é chamada recursivamente para preencher este novo item de menu. Colocamos uma imagem no item de menu, para difereciar os arquivos dos diretórios.

0 Comentários:

Postar um comentário

<< Home