domingo, 7 de outubro de 2012

Ping Delphi7 com IdIcmpClient

Estamos aqui novamente com uma dica utilizando-se somente do componente, sem sua ação visual:
Pingando com IdIcmpClient - Delphi 7

Siga as instruções abaixo:

// declare na seção uses:
IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdIcmpClient // Uses para IdIcmpClient

// caso queira publicar esta função não se esqueça de inclui-la na seção
// private ou na seção public, ou diretamente na parte de procedures e function da unit
// e em caso de um formulario visual, colocar a classe do formulário, ex:
//Function TForm1.Ping(HostName: String): boolean;

Function Ping(HostName: String): boolean;
var
 i, Soma, BytesRecebidos : Integer;
 PckEntregue : Array[1..3] of Integer;
 ICMP : TIdIcmpClient;
begin
try
 ICMP := TIdIcmpClient.Create(nil);
  try
   ICMP.Host := HostName;
   ICMP.ReceiveTimeout := 500;
   ICMP.Ping;
    if ICMP.ReplyStatus.BytesReceived > 0 then
     result := true
     else
      result := false;
  except
   result := false;
  end;

finally
 ICMP.Destroy;
end;

end;

Pesquisando em banco Firebird desconsiderando acentos - case insensitive

Se você já tem um banco dados Firebird em uso e não quer Mudar a estrutura do banco ou tabela (não quer usar Character set e não quer usar collate) , pode usar o seguinte comando para fazer pesquisas case-insensitive (ou seja, localizar dados estando gravados em minúsculas ou maiúsculas)

Exemplo:
select nomecampo from NOMETABELA
where nomecampo containing 'ALIENAÇÃO'
or nomecampo containing 'alienação'

Nesta caso ele irá localizar se no campo da tabela estiver gravado uma das seguintes opções:
alienação
ALIENAÇÃO
Alienação
AliEnação
AlieNação

Atenção - NÃO Irá Achar:
alienaÇão  (Ç maiúscula e resto minusculo)

ParaSe você já tem um banco dados Firebird em uso e não quer Mudar a estrutura do banco ou tabela (não quer usar Character set e não quer usar collate) , pode usar o seguinte comando para fazer pesquisas case-insensitive:

Exemplo:
select nomecampo from NOMETABELA
where nomecampo containing 'ALIENAÇÃO'
or nomecampo containing 'alienação'

Nesta caso ele irá localizar se no campo da tabela estiver gravado uma das seguintes opções:
alienação
ALIENAÇÃO
Alienação
AliEnação
AlieNação

Atenção - NÃO Irá Achar:
alienaÇão  (Ç maiúscula e resto minusculo)

Faixa de Notícias

Essa função tem com o intuito ter uma faixa de notícias, passando na tela.

Primeiro, precisaremos de um label, que colocarei o nome de lblNoticias e um timer que colocarei o nome TimerNoticia;

No TimerNoticia coloque o valor de "interval" para 100, mas caso ache muito rápido é só aumentar esse valor;

Você pode colocar o valor da opção "visible" do HorzScrollBar para "false";

Caso você utilize uma image como fundo e está esteja com o Align colocado para alClient, então você deverá colocar a seguinte linha de código no procedimento OnResize do Form:
    
   Image1.Constraints.MaxWidth := Self.Width - 8;


Agora vamos ao que interessa, o código está preparado para rodar no caso de você pegar o que quer deixar como notícia no banco de dados, e então caso não tenha nada irá procurar no banco de 30 em 30 segundos, esse é o código para rodar a faixa de notícias:

procedure TForm1.TimerNoticiaTimer(Sender: TObject);
begin
   DoubleBuffered := True;

   if lblNoticias.Visible then
   begin
      lblNoticias.Left := lblNoticias.Left - 30;
   end;

   If ((lblNoticias.Left + lblNoticias.Width) <= 15) then
   begin
      lblNoticias.Caption := 'TESTE DE NOTÍCIAS';

      if (lblNoticias.Caption <> EmptyStr) then
      begin
         lblNoticias.Left := Self.Width + 1;
         lblNoticias.Caption := trim(lblNoticias.Caption) + ' *';
         TimerNoticia.Enabled := True;
         lblNoticias.Visible := True;
         TimerNoticia.Interval := 100;
      end
      else
      begin
         lblNoticias.Visible := False;
         TimerNoticia.Interval := 30000;
      end;
   end;
end;

Retorna IP de conexão com a Internet ( IP do Roteador )

Funciona perfeitamente, mas requer que você tenha instalado os componentes Indy em seu Delphi.

Detalhe: Essa função pode pausar o processo do seu aplicativo até que ela receba resposta ou acabe o tempo limite

Function TIPreal : String;
var
  IP : TIdHTTP;
  Temporario : String;
  Endereco : String;
  X : Integer;
begin
  try IP := TIdHTTP.Create(nil);
    with IP do begin
      Host := 'checkip.dyndns.org';
      Temporario := Get('checkip.dyndns.org');
      For X := 1 to Length(Temporario) do
        if (Temporario[X] in ['0'..'9']) or (Temporario[X] = '.') then
          Endereco := Endereco + Temporario[X];
    end;
      Result := Trim(Endereco); IP.Free;
  except
    Result := 'ERRO';
  end;
end;