Cadastre-se Revistas DevMedia Cursos
  Live chat by Netwatts

Space de ADAIL MUNIZ RETAMAL
Busca Autor


Últimas 20 atualizações de ADAIL MUNIZ RETAMAL

Artigo - Você Sabia?

Você Sabia?

O Delphi que você (talvez) não conhecia

Você certamente deve ter um amigo, ou mesmo um parente, que conhece há muito tempo (dez anos ou mais) e que, mesmo convivendo freqüentemente com ele, às vezes se surpreende ao descobrir alguma característica ou história “do arco da velha”. Você pensa consigo mesmo: “Mas esse é o Fulano que eu conheço?”

Pois é... Todos nós, leitores da ClubeDelphi, temos um grande amigo em comum chamado Delphi, que já completou seus dez anos e ainda terá uma vida longa pela frente. Entretanto, nos recônditos mais escuros das diversas camadas que compõem o produto, podemos encontrar relíquias antiqüíssimas, que remontam à época pré-Windowsiana, onde reinavam os terríveis monstros verdes (não, não são dinossauros, mas os monitores CGA com a tela de fósforo verde).

Prepare-se, pois a partir deste artigo você vai conhecer alguns dos pontos mais obscuros do Delphi. Você nunca mais verá seu companheiro da mesma forma!

Nos tempos da linha de comando

O que é conhecido hoje como o “prompt de comando” , ativado no Windows NT e XP ao executar o arquivo cmd.exe (ou mesmo o antigo command.com, este também disponível nos Windows 9x), é um “emulador” do ambiente MS-DOS, que foi durante muitos anos a plataforma de trabalho de muita gente por aí (alô Clippeiros!).

Tudo era feito a partir da linha de comando: a passagem de parâmetros, a construção da interface (geralmente em modo texto), a interação com o usuário (por exemplo, pegar o código da tecla pressionada), a entrada e saída de dados, a exibição de erros etc. Alguém perguntou sobre o mouse? Isso seria coisa do futuro ainda. Calma que chegaremos lá.

Bom, comecemos pelo começo então. Quando executamos um programa, a primeira forma de interagir com ele é pela passagem de parâmetros. Mas o que são parâmetros para um programa? Certamente você sabe muito bem como passar parâmetros para um procedimento ou função, mas para um programa?

O esquema a seguir ilustra como o sistema operacional (S.O.) entende a linha de comando ao ativar um programa:

 

Figura 1.

O nome do programa executável é o parâmetro número zero e é o único obrigatório (claro, senão como o S.O. saberia o que executar, né?). O resto fica a critério do usuário.

Desde os tempos mais remotos o Turbo Pascal já fornecia uma forma bastante elegante e prática para acessar os parâmetros passados na linha de comando, através das funções ParamCount (que retorna o número de parâmetros) e ParamStr(N) (que retorna o parâmetro N).

 

Curiosidade: se os parâmetros são separados por espaços, como passar um parâmetro que precisa conter espaços? Hoje em dia é só usar as aspas (?) para delimitar o texto desejado. Mas naquela época... Tínhamos que fazer isso “na unha”...

 

A Listagem 1 mostra uma aplicação do tipo console no Delphi, mas que era o único tipo de aplicação que podíamos fazer no Turbo Pascal. Você pode testar esse exemplo em qualquer versão do Delphi (incluindo .NET) ou do Turbo (visite o museu da Borland para baixar algumas versões e se divertir).

 

Listagem 1. Trabalhando com parâmetros da linha de comando

program SuperParam;

 

{$APPTYPE CONSOLE}

 

var

  p: Integer;

 

begin

  WriteLn('Super-Param V. 1.0');

  WriteLn;

  if ParamCount = 0 then

    WriteLn('Nenhum parametro digitado.')

  else

  begin

    WriteLn('Numero de parametros: ', ParamCount);

    WriteLn;

    for p := 0 to ParamCount do

      WriteLn('Parametro ', p, ': ', ParamStr(p));

  end;

  ReadLn; // só necessário se for executar dentro do IDE

end.

 

Para brincar com o programa depois de compilado, abra um prompt de comando, mude o diretório atual para aquele onde o executável foi gerado e escreva apenas o nome do arquivo. A resposta deverá ser:

 

C:\...>SuperParam

Super-Param V. 1.0

 

Nenhum parametro digitado.

 

Agora execute-o com alguns parâmetros na frente, como por exemplo:

 

C:\...>SuperParam 123 /n:7 “Oi, tudo bem?”

Super-Param V. 1.0

 

Numero de parametros: 3

 

Parametro 0: C:\...\SuperParam.exe

Parametro 1: 123

Parametro 2: /n:7

Parametro 3: Oi, tudo bem?

 

Como disse, o parâmetro zero é o caminho completo para o arquivo executável (o que é bastante útil) e o parâmetro digitado entre aspas aparece inteiro (mas note que as aspas são eliminadas da string). Interessante: na VCL, o código para a propriedade ExeName da classe TApplication (na unit Forms) é:

 

function TApplication.GetExeName: string;

begin

  Result := ParamStr(0);

end;

 

Para executar a aplicação dentro do IDE, utilize o menu Run | Parameters... para poder especificar os parâmetros a serem passados para ela. Também é importante deixar como última linha do programa o comando ReadLn (conforme comentário na Listagem 1), senão você não verá a tela de saída. Para terminar o programa basta pressionar a tecla Enter.

Você pode trabalhar com parâmetros nas aplicações Windows “normais”. As funções são exatamente as mesmas.

Se quiser acessar a linha de comando inteira, tal como digitada pelo usuário, acesse a variável CmdLine (definida na unit System como do tipo PAnsiChar, mas que pode ser manipulada como uma string).

Canais de entrada e saída

Uma das formas de comunicação entre programas é através da utilização de certos “arquivos” especiais, chamados de padrões para entrada e saída (standard input and output). Através de um mecanismo conhecido como tubo (pipe, simbolizado pela barra vertical | ) podemos direcionar a saída de um programa para a entrada de outro.

Usando as variáveis Input e Output, definidas na unit System como sendo do tipo Text, podemos ler e escrever, respectivamente, nos arquivos padrões. A Listagem 2 mostra um pequeno exemplo.

 

Listagem 2. Arquivos padrões para entrada e saída

program SuperPipe;

 

{$APPTYPE CONSOLE}

 

var

  Linha: string;

 

begin

  WriteLn(Output, 'Super-Pipe V. 1.0');

  WriteLn(Output);

  WriteLn(Output, 'Inicio da entrada');

  WriteLn(Output, '-----------------');

  while not EOF(Input) do

  begin

    ReadLn(Input, Linha);

    WriteLn(Output, Linha);

  end;

  WriteLn(Output, '-----------------');

  WriteLn(Output, 'Fim da entrada');

end.

 

Para testar, abra um prompt de comando, mude para o diretório do executável e digite a seguinte linha (após o prompt, claro):

 

C:\...>dir | SuperPipe

Super-Pipe V. 1.0

 

Inicio da entrada

-----------------

 Volume in drive C is Adail.

 Volume Serial Number is 38B1-C70C

 

 Directory of C:\...<"> ...

Exibição do post interrompida. Para ler conteúdo completo, clique aqui
19/12/2005 11:22:00 AM





 

devmedia@devmedia.com.br

Adail Muniz Retamal (adail.retamal@borland.com) é engenheiro eletrônico por formação e engenheiro de software por opção. Começou sua carreira de desenvolvedor em 1983 e conheceu o Turbo Pascal 3.0 em 1989. Desde então foi seu ambiente de desenvolvimento preferido, usando todas as versões e, posteriormente, do Delphi também. É desenvolvedor e instrutor certificado em Delphi e em vários outros produtos Borland. Atualmente é engenheiro de sistemas na Borland Latin América.
Arquivo de atualizações
 2005

Estatísticas do Autor:
Número de posts: 16
Total de visualizações: 20209
Características dos posts deste autor:
Conteúdo:
Didática:
Utilidade:
5 0
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
2010 - Todos os Direitos Reservados a DevMedia Group