Dicas de Delphi - Comunicação e Internet


Desativar PopupMenu do TWebBrowser

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure AppMsg(var Msg: TMsg; var Handled: Boolean);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function NomeClasse(const Janela: HWND): string;
var
  Buffer: array[0..250] of Char;
begin
  if GetClassName(Janela, Buffer, SizeOf(Buffer)) > 0 then
    Result := string(Buffer)
  else
    Result := '';
end;

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
var
  P: TPoint;
  Janela: HWND;
begin
  case Msg.Message of
    WM_RBUTTONDOWN, WM_RBUTTONUP:
      if GetCursorPos(P) then
        Handled := NomeClasse(WindowFromPoint(P)) = 'Internet Explorer_Server';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMsg;
  WebBrowser1.Navigate('http://www.tecnobyte.com.br');
end;

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br

Início


Verificar se está conectado à Internet

A função abaixo retorna true se estiver conectado e false 
caso contrário.

function RemoteConnection: boolean;
const
  Key = '\System\CurrentControlSet\Services\RemoteAccess';
  Value = 'Remote Connection';
var
  Reg: TRegistry;
  Buffer: DWord;
begin
  Result := false;

  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKey(Key, false) then
    begin
      Reg.ReadBinaryData(Value, Buffer, SizeOf(Buffer));
      Result := Buffer = 1;
    end;
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;

Exemplo de uso

Para testar a função coloquei um Timer e um Label no 
formulário. No evento OnTimer do Timer escrevi o 
código abaixo.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if RemoteConnection() then
    Label1.Caption := 'Conectado'
  else
    Label1.Caption := 'Desconectado';
end;

Observações

Encontrei outras dicas com o mesmo propósito na Internet, no entanto apenas esta funcionou corretamente nos testes que realizei.

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br

Início


Enviando e-mail com Delphi5

Fazer um aplicativo completo para manipulação de e-mails é um
tanto trabalhoso e não é o assunto desta dica. Muitas vezes,
porém, queremos apenas dar ao nosso software a capacidade de 
enviar simples e-mails. Isto é fácil, especialmente porque o 
Delphi5 nos oferece o componente TNMSMTP (paleta FastNet) que 
faz praticamente todo o trabalho para nós. Precisamos apenas
alterar algumas propriedades e chamar alguns métodos para que
a mensagem seja enviada. Vamos para a prática:

1. Coloque um componente TNMSMTP no form.
2. Coloque um botão e no evento OnClick deste botão escreva:

procedure TForm1.Button1Click(Sender: TObject);
begin
  { Host do servidor de e-mail }
  NMSMTP1.Host := 'mail.servidor.com.br';

  NMSMTP1.Port := 25;

  { Nome de login do usuário }
  NMSMTP1.UserID := 'nome-do-usuario';

  NMSMTP1.Connect;

  if not NMSMTP1.Connected then
    raise Exception.Create('Erro de conexão');

  with NMSMTP1.PostMessage do begin
    { E-mail do remetente }
    FromAddress := 'fulano@servidor.com.br';

    { Nome do remetente }
    FromName := 'Fulano de Tal';

    { E-mail do destinatário }
    ToAddress.Clear;
    ToAddress.Add('beltrano@servidor.com.br');

    Subject := 'Assunto da mensagem';

    { Corpo da mensagem }
    Body.Clear;
    Body.Add('Primeira linha da mensagem');
    Body.Add('Segunda linha da mensagem');
    Body.Add(''); { Linha em branco }
    Body.Add('Última linha da mensagem');

    { Anexar arquivos }
    Attachments.Clear;
    Attachments.Add('c:\diretorio\arquivo.ext');
  end;

  NMSMTP1.SendMail;
  NMSMTP1.Disconnect;
end;

Pronto! É só fazer as adaptações necessárias e você terá envio 
de e-mails em sua aplicação.

Observações

Para enviar o mesmo e-mail para vários destinatário de uma só vez basta adicionar os endereços de e-mails de todos os destinatários em NMSMTP1.PostMessage.ToAddress.

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br

Início


Abrir uma conecção Dial-Up

Inclua na seção uses: Windows
{ A função abaixo abre a caixa de diálogo de conexão 
  com a rede Dial-Up. O parâmetro "name" é o nome da
  conexão previamente configurada.
}

procedure DialUpConnect(const Name: string);
begin
  WinExec(PChar('rundll32.exe rnaui.dll,RnaDial ' + Name), SW_SHOW);
end;

{ Exemplo de uso: }

procedure TForm1.Button1Click(Sender: TObject);
begin
  DialUpConnect('NomeDaConexão');
end;

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br

Início


Obter o endereço IP do Dial-Up

Inclua na seção uses: WinSock
{ Esta função retorna o endereço IP do Dial-Up. }

function GetLocalIP : string;
type
  TaPInAddr = array [0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe  : PHostEnt;
  pptr : PaPInAddr;
  Buffer : array [0..63] of char;
  I    : Integer;
  GInitData      : TWSADATA;
begin
  WSAStartup($101, GInitData);
  Result := '';
  GetHostName(Buffer, SizeOf(Buffer));
  phe :=GetHostByName(buffer);
  if phe = nil then Exit;
  pptr := PaPInAddr(Phe^.h_addr_list);
  I := 0;
  while pptr^[I] <> nil do begin
    result:=StrPas(inet_ntoa(pptr^[I]^));
    result := StrPas(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;

Observações

Se o endereço IP for designado pelo servidor, a cada conexão teremos um endereço IP diferente e, obviamente, se não estivermos conectados, não conseguiremos obtê-lo.

Início


Preparando e-mail via programação

Inclua na seção uses: ShellApi
Problema:

Desejo que meu programa prepare e-mail e abra o Outlook Express 
para enviá-lo.

Solução:

A solução apresentada abaixo deve funcionar com a maioria dos 
programas de correio eletrônico.

procedure PrepararEmail(Para, Assunto, Msg: string);
var
  S: string;
begin
  S := 'mailto:' + Para + '?subject=' + Assunto + 
    '&body=' + Msg;
  ShellExecute(0, 'open', PChar(S), nil, nil, SW_SHOW);
end;

=== Exemplo de uso: ===

PrepararEmail('fulano@servidor.com.br',
 'Teste de e-mail', 'Esta é a mensagem do e-mail de teste.');

Observações

Outra alternativa é o programa preparar e também enviar o e-mail.

Autor: Daniel P. Guimarães
Home-page: www.tecnobyte.com.br

Início


Página atualizada em 23 de janeiro de 2012
Todos os direitos reservados
www.tecnobyte.com.br