Artigo Clube Delphi 60 - 60 dicas e soluções em Delphi

Artigo da Revista Clube Delphi Edição 60.

Esse artigo faz parte da revista Clube Delphi Edição 60. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler esse artigo em PDF.

60 Dicas e Soluções em Delphi!

Para comemorar a edição 60 da ClubeDelphi, reunimos neste “super” artigo nada mais nada menos que 60 dicas para incrementar suas aplicações Delphi. São segredos, curiosidades, FAQs e exemplos de utilização das principais tecnologias relacionadas ao Delphi: ClientDataSet, dbExpress, BDP, ADO.NET, ASP.NET, Indy, DBGrid, InterBase/Firebird, Quick Report e muito mais! Com certeza você encontrará dicas valiosas para adaptar em suas aplicações! Todos os exemplos e códigos também podem ser encontrados para download no endereço deste artigo. As dicas foram construídas por Guinther Pauli (GP), Luciano Pimenta (LP) e Carlos Cantu (CC).

 

1.Capturando a imagem da tela (screen-shot) e salvando-a para um arquivo

GP - A rotina mostrada na Listagem 1 captura a imagem do desktop, retornando um objeto do tipo TBitmap. A partir dele, é possível salvar a imagem para um arquivo ou apresentar o resultado em um formulário, através de um componente Image. Por exemplo, use esse recurso para criar um relatório de erros, que salve o estado atual da tela do usuário quando uma exceção não tratada ocorrer (uma dica é enviar a imagem por e-mail para o desenvolvedor responsável).

 

Listagem 1. Capturando a imagem da tela

function CapturaTela: TBitmap;

var

  dc:hdc;

  cv:TCanvas;

begin

  result := TBitmap.Create;

  result.Width := Screen.Width;

  result.Height := Screen.Height;

  dc := GetDc(0);

  cv := TCanvas.Create;

  cv.Handle := DC;

  result.Canvas.CopyRect(Rect(

0, 0,Screen.Width,Screen.Height),

cv,Rect(0,0,Screen.Width, Screen.Height));

   cv.Free;

   ReleaseDC (0, DC);

end;

{ Exemplos de utilização }

{ Captura a tela e salva para o disco }

CapturaTela.SaveToFile('tela.bmp');

{ Exibe a tela em um componente Image }

Image1.Picture.Assign(CapturaTela);

 

2.Capturando a imagem da tela (screen-shot) de uma máquina da rede

GP - Esse recurso é bastante utilizado por aplicações estilo “trojan”, permitindo que o intruso possa observar o que a pessoa na outra máquina está fazendo. Deixando o hackerismo de lado, um exemplo prático da técnica é monitorar remotamente a ação de usuários na sua aplicação. Por exemplo, é muito comum utilizar esse recurso em programas que controlam lan-houses, ou aplicações estilo PcAnywhere ou Terminal Services. A idéia é simples, construímos duas aplicações que trocam imagens através de sockets, usando streams.

O primeiro passo é construir a aplicação servidora, que deve ficar em execução em todas as máquinas a serem monitoradas. Em uma nova aplicação VCL, coloque no formulário um IdTCPServer da Indy. Configure seu DefaultPort para 8090 e Active para True. No seu evento OnExecute digite o código da Listagem 2. Observe que fazemos uso da rotina CapturaTela, mostrada no exemplo anterior. Na aplicação cliente, coloque um IdTCPClient da Indy e defina a propriedade Port como 8090. Coloque um Image, um Edit e um Button. No evento OnClick do Button digite o código da Listagem 3. Você pode colocar um Timer e chamar o mesmo código, se quiser que a imagem seja atualizada constantemente. Ao clicar no botão, a imagem mostrará a tela do computador indicado no Edit (digite o endereço IP ou o nome da máquina).

 

Listagem 2. Servidor captura tela da máquina e envia pela rede

procedure TForm1.IdTCPServerExecute(

  AThread: TIdPeerThread);

var

  Stm : TStream;

  Tela: TBitmap;

  cmd: string;

  fn: string;

  r: integer;

begin

  randomize;

  r := Random(MaxInt);

  fn := Format('tela%d.bmp',[r]);

  cmd := AThread.Connection.ReadLn;

  if pos('TELA',cmd) > 0 then

  begin

Tela := CapturaTela;

Tela.SaveToFile(fn);

Tela.Free;

Stm := TFileStream.Create(fn,

fmOpenRead + fmShareDenyNone);

AThread.Connection.OpenWriteBuffer;

AThread.Connection.WriteStream(Stm);

AThread.Connection.CloseWriteBuffer;

FreeAndNil(Stm);

  end;

AThread.Connection.Disconnect;

end;

 

Listagem 3. Aplicação monitora terminais remotamente

procedure TForm1.Button1Click(Sender: TObject);

var

  Stm: TStream;

begin

  IdTCPClient1.Host := Edit1.Text;

  IdTCPClient1.Connect;

  WriteLn('TELA');

  Stm := TFileStream.Create('tela.bmp',fmCreate);

  try

while IdTCPClient1.Connected do

IdTCPClient1.ReadStream(Stm,-1,true);

  except

  end;

FreeAndNil(Stm);

Image1.Picture.LoadFromFile('tela.bmp');

end;

 

3.Obtendo dados da Web a partir de uma aplicação Delphi

GP - Hoje em dia, é muito comum sua aplicação precisar de informações ou utilizar serviços disponibilizados por outra aplicação. Não é para menos que surgiram os Web Services. Com essa tecnologia, podemos incluir em nossas aplicações serviços oferecidos por outras empresas. Por exemplo, você pode ter um sistema de controle de estoque que, dada a falta de um determinado produto, conecta-se automaticamente aos fornecedores através de Web Services e pesquisa pela disponibilidade do produto, pelo melhor preço e já faz a encomenda automaticamente.

Porém, a realidade nos mostra que, muitos serviços na Web estão somente disponíveis para acesso via browser. Ou seja, para usar o serviço, é preciso abrir um browser, conectar no site da empresa e usar seu serviço (exemplos: envio de mensagem para celular, consulta à lista telefônica, consulta ao CPF etc.). Uma saída é fazer a requisição “no braço”.

É justamente o que mostrarei aqui. A idéia é simples: montamos uma requisição HTTP (como se nossa aplicação fosse um browser), enviamos a solicitação ao site desejado, obtemos a página de retorno e fazemos o parse do HTML a procura da informação desejada. Vamos a um exemplo simples: em uma nova aplicação, coloque um IdHTTP, um Label e um Button. No evento OnClick do Button digite:

 

var s: string;

begin

  s := IdHTTP1.Get('http://br.invertia.com');

  Label1.Caption := copy(s,pos('Compra',s) + 115,7);

end;

 

O código anterior mostra em um Label a cotação on-line do dólar, obtida através da consulta HTTP ao site indicado no código. Recebido o retorno, procuramos por uma palavra-chave no HTML (de preferência que seja sempre fixa) e fazemos a captura do valor pela posição relativa.

 

4." [...] continue lendo...

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados