Peca em mdf e pintado a mao Em algumas situacoes precisamos passar uma matriz para uma procedure ou function (funcao). Nesta dica eu mostro como isso pode ser feito. Veja que a procedure exibirMatriz(matriz: array of Integer) possui uma matriz aberta (open array) como parametro. Esta e a forma correta de declarar matrizes em parametros de metodos, pois permite que passemos matrizes de tamanhos arbitrarios. Veja o codigo:procedure TForm3.exibirMatriz(matriz: array of Integer);var i: Integer;begin for i := Low(matriz) to High(matriz) do begin Memo1.Lines.Add(IntToStr(matriz[i])); end;end;procedure TForm3.Button1Click(Sender: TObject);var // vamos declarar uma matriz de 10 inteiros valores: array[1..10] of Integer; i: Integer;begin // vamos inicializar a matriz com os numeros pares de 2 ate 20 for i := Low(valores) to High(valores) do begin valores[i] := i * 2; end; // vamos fornecer a matriz para uma procedure que exibira seus valores exibirMatriz(valores);end;No evento Click do botao nos criamos uma matriz de 10 inteiros, inicializamos os valores dos elementos e a fornecemos a procedure exibirMatriz() para que esta exiba os valores em um TMemo.Importante: Quando passamos uma matriz para uma funcao ou procedure, alteracoes nos valores dos elementos da matriz por parte da procedure ou funcao que a recebe nao afetam a matriz original. Para que isso aconteca devemos usar a palavra-chave Var antes do parametro para indicar que estamos passando a matriz por referencia. Veja:procedure TForm3.exibirMatriz(var matriz: array of Integer); O trecho de codigo nesta dica mostra como podemos usar Delphi e a API do Windows para habilitar ou desabilitar o Gerenciador de Tarefas. O Gerenciador de Tarefas e invocado quando usamos a combinacao Ctrl+Alt+Del e permite ao usuario visualizar os aplicativos e processos sendo executados no momento. Alem disso, o usuario pode selecionar um determinado processo e finaliza-lo.Em algumas situacoes gostariamos que o usuario nao tivesse acesso ao Gerenciador de Tarefas. Veja como podemos desabilita-lo no evento Click de um botao:procedure TForm3.Button5Click(Sender: TObject);var reg: TRegistry;begin // uses Registry // vamos criar uma instancia da classe TRegistry reg := TRegistry.Create; // vamos abrir a chave que contem a entrada DisableTaskMgr reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Policies\system', True); // vamos desabilitar o Gerenciador de Tarefas // se o valor fornecido for 1, o gerenciador sera desabilitado reg.WriteString('DisableTaskMgr', '1'); reg.CloseKey; // para habilitar basta excluir o valor da entrada //reg.DeleteValue('DisableTaskMgr'); //reg.CloseKey; // vamos liberar o registro reg.Free;end;Agora, quando o usuario pressionar Ctrl+Alt+Del ele vera a mensagem "O 'Gerenciador de tarefas' foi desabilitado pelo administrador". E importante observar que, no Windows XP, o usuario pode habilitar ou desabilitar o Gerenciador de tarefas simplesmente abrindo uma janela de terminal e digitando "gpedit.msc". Este comando abrira o Editor de Diretivas de Grupo e permitira ao usuario habilitar ou desabilitar o gerenciador de tarefas novamente.Note que para habilitar o Gerenciador de Tarefas novamente so precisamos remover os comentarios do trecho:// para habilitar basta excluir o valor da entrada//reg.DeleteValue('DisableTaskMgr');//reg.CloseKey; Por carregamento dinamico (Dynamic loading) entendemos a tecnica de carregar e liberar uma DLL (Dynamic Link Library) sempre que quisermos sem a necessidade da criacao de uma unit de importacao (como fazemos com o carregamento estatico).O processo de carregar uma DLL dinamicamente envolve os seguintes passos:a) Devemos