quarta-feira, 18 de agosto de 2010

Traduzindo a mensagem "Delete Record ?"

Quando clicamos sobre o botão de deleção no DBNavigator (o do sinal de menos) surge uma box com a mensagem "Delete Record?" com botões Ok e Cancel.

Para fazer aparecer a mensagem em português deverá selecionar o componente Table e mudar a propriedade ConfirmDelete para False e no evento da tabela BeforeDelete colocar o seguinte:

procedure TForm1.Table1BeforeDelete(DataSet:TDataSet);
begin
if MessageDlg('Eliminar o Registro?',mtConfirmation,[mbYes,mbNo],0)<>mrYes then Abort;
end;

terça-feira, 17 de agosto de 2010

Enviar um email

 smtp.postmessage.toAddress := 'StringList (por ex uma listbox';
smtp.postmessage.FromAdreess := 'ex: meu_email@123.pt';
smtp.userid := 'ex: user@123.pt'
smtp.host := 'ex: smtp@123.pt'
smtp.postmessage.subject := 'Assunto'
smtp.postmessage.body := 'Texto da mensagem (stringlist)'

smtp.connect;
smtp.sendmail;
smtp.disconnect;
Contribuição:
O Anonymous.nick enviou um complemento explicando melhor o procedimento para enviar um e-mail usando o Delphi.

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

  { Seu servidor SMTP }
  NMSMTP1.Host := 'smtp.servidor.com.br';

  { Porta SMTP, **NÃO MUDE ISTO** }
  NMSMTP1.Port := 25;

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

  { Conecta ao servidor }
  NMSMTP1.Connect;

  { Se ocorrer algum erro durante a conexão com o servidor, avise! }
  if not NMSMTP1.Connected then
  raise Exception.Create('Erro de conexão');

  with NMSMTP1.PostMessage do begin
  { Seu e-mail }
  FromAddress := 'meuemail@meuserver.com.br';

  { Seu nome }
  FromName := 'Meu Nome';

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

  { Assunto da mensagem }
  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(Se não quiser anexar arquivos, apague as 3 linhas seguintes) }

  Attachments.Clear;

  { Endereço do anexo }
  Attachments.Add('c:\diretorio\arquivo.ext');

  end;

 { Manda o e-mail }
  NMSMTP1.SendMail;
 { Disconecta do servidor }
  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

Como saber se estou conectado à internet

interface
uses
Windows, SysUtils, Registry, WinSock, WinInet;

type
TConnectionType = (ctNone, ctProxy, ctDialup);

function ConnectedToInternet : TConnectionType;
function RasConnectionCount : Integer;


implementation

const
cERROR_BUFFER_TOO_SMALL = 603;
cRAS_MaxEntryName = 256;
cRAS_MaxDeviceName = 128;
cRAS_MaxDeviceType = 16;
type
ERasError = class(Exception);

HRASConn = DWord;
PRASConn = ^TRASConn;
TRASConn = record
dwSize: DWORD;
rasConn: HRASConn;
szEntryName: Array[0..cRAS_MaxEntryName] Of Char;
szDeviceType : Array[0..cRAS_MaxDeviceType] Of Char;
szDeviceName : Array [0..cRAS_MaxDeviceName] of char;
end;

TRasEnumConnections =
function (RASConn: PrasConn; { buffer para receber dados da conexao}
var BufSize: DWord; { tamanho em bytes do buffer }
var Connections: DWord { numero de conexoes escritas no buffer }
): LongInt; stdcall;


function ConnectedToInternet: TConnectionType;
var
    Reg : TRegistry;
    bUseProxy : Boolean;
    UseProxy : LongWord;
begin
    Result := ctNone;
    Reg := TRegistry.Create;
    with REG do
    try
    try
        RootKey := HKEY_CURRENT_USER;
        if OpenKey('\Software\Microsoft\Windows\CurrentVersion\Internet settings',False) then begin
            //I just try to read it, and trap an exception
            if GetDataType('ProxyEnable') = rdBinary then
                ReadBinaryData('ProxyEnable', UseProxy, SizeOf(LongWord) )
        else begin
            bUseProxy := ReadBool('ProxyEnable');
            if bUseProxy then
                UseProxy := 1
            else
                UseProxy := 0;
        end;
        if (UseProxy <> 0) and ( ReadString('ProxyServer') <> '' ) then Result := ctProxy;
    end;
    except
        //Nao conectado com proxy
    end;
    finally
    Free;
end;

    if Result = ctNone then begin
    if RasConnectionCount > 0 then Result := ctDialup;
    end;
    end;

function RasConnectionCount : Integer;
var
    RasDLL : HInst;
    Conns : Array[1..4] of TRasConn;
    RasEnums : TRasEnumConnections;
    BufSize : DWord;
    NumConns : DWord;
    RasResult : Longint;
begin
    Result := 0;

    //Load the RAS DLL
    RasDLL := LoadLibrary('rasapi32.dll');
    if RasDLL = 0 then exit;

    try
        RasEnums := GetProcAddress(RasDLL,'RasEnumConnectionsA');
        if @RasEnums = nil then
        raise ERasError.Create('RasEnumConnectionsA not found in rasapi32.dll');

        Conns[1].dwSize := Sizeof (Conns[1]);
        BufSize := SizeOf(Conns);

        RasResult := RasEnums(@Conns, BufSize, NumConns);

        If (RasResult = 0) or (Result = cERROR_BUFFER_TOO_SMALL) then Result := NumConns;
    finally
    FreeLibrary(RasDLL);
end;
end;

segunda-feira, 16 de agosto de 2010

Como pegar a URL ativa no Browser

Uses ddeman;

function GetURL(Service: string): String;
var
    ClDDE: TDDEClientConv;
    temp:PChar;
begin
    Result := '';
    //create a new DDE Client object
    ClDDE:= TDDEClientConv.Create( nil );
    with ClDDE do
    begin
        SetLink(Service,'WWW_GetWindowInfo');
        temp := RequestData('0xFFFFFFFF');
        Result := StrPas(temp);
        StrDispose(temp);
        CloseLink;
    end;
    ClDDE.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    ShowMessage(GetURL('IExplore'));
end;

Como descobrir se você esta conectado com a Internet?

1º) Você deve acrescentar um componente NMFTP (da paleta FastNet).
2º) Insira o seguinte código no evento OnShow do formulário.
If (NMFtp1.GetLocalAddress <> '0,0,0,0') Then ShowMessage('Você não está conectado!') Else ShowMessage('Você está conectado!');
3º) Execute o programa e veja o resultado.

By Carlos Naves - http://www.carlosnaves.hpg.com.br/

Como conectar uma unidade de rede

procedure TForm1.Button1Click(Sender: TObject);
var
  NRW: TNetResource;
begin
  with NRW do
  begin
  dwType := RESOURCETYPE_ANY;
  lpLocalName := 'G:';
  lpRemoteName := '\\servidor\c';
  lpProvider := '';
  end;
  WNetAddConnection2(NRW, 'MyPassword', 'MyUserName', CONNECT_UPDATE_PROFILE);
end;

Como compartilhar uma pasta de um outro micro e mapear com uma letra

var
err : DWord;
PServer, PSenha, PLetra : PChar;
Begin
PServer := '\\Caminho\Caminho' + #0;
PLetra := 'L:';
PSenha := '';

ERR := WNetAddConnection ( PServer , PSenha , PLetra );

CASE ERR of
ERROR_ACCESS_DENIED : ShowMessage ( 'Acesso negado.' );
ERROR_ALREADY_ASSIGNED : ShowMessage ( 'A letra do drive especificada já está conectada.' );
ERROR_BAD_DEV_TYPE : ShowMessage ( 'O tipo de dispositivo e o tipo de recurso não são compatíveis.' );
ERROR_BAD_DEVICE : ShowMessage ( 'Letra inválida.' );
ERROR_BAD_NET_NAME : ShowMessage ( 'Nome do servidor não é válido ou não pode ser localizado.' );
ERROR_BAD_PROFILE : ShowMessage ( 'Formato incorreto de parâmetros.' );
ERROR_CANNOT_OPEN_PROFILE : ShowMessage ( 'Conexão permanente não disponível.' );
ERROR_DEVICE_ALREADY_REMEMBERED : ShowMessage ( 'Uma entrada para o dispositivo especificado já está no perfil do usuário.' );
ERROR_EXTENDED_ERROR : ShowMessage ( 'Erro de rede.' );
ERROR_INVALID_PASSWORD : ShowMessage ( 'Senha especificada inválida.' );
ERROR_NO_NET_OR_BAD_PATH : ShowMessage ( 'A operação não foi concluída porque a rede não foi inicializada ou caminho é inválido.' );
ERROR_NO_NETWORK : ShowMessage ( 'A rede não está presente.' );
else if Err > 0 then
ShowMessage (IntToStr(Err));
end;
end;

Obs.:Se "PLetra" for deixada em branco, o acesso será liberado sem ser criada uma unidade lógica.

Chamar um site utilizando o seu browse padrão

Uses UrlMon;

Procedure TForm1.Button1Click(Sender: TObject);
Begin
    HlinkNavigateString(nil,'http://www.lloydsoft.hpg.ig.com.br');
End;

Chamar um e-mail pelo Delphi

procedure TForm1.Button1Click(Sender: TObject);
var
    Mail : String;
begin
    Mail := 'mailto:rudineirosa@gmail.com';
    ShellExecute(GetDesktopWindow,'open',pchar(Mail),nil,nil,sw_ShowNormal);
end;

Bloqueando um arquivo em ambiente de rede

Quando você programar visando uma rede e quiser bloquear um arquivo, é só chamar o metodo "Edit" da Tabela que estiver usando.

Exemplo:

Table1.edit;
Se o registro já estiver bloqueado, ocorrerá um erro, então você deve fazer o seguinte :

try { para verificar o erro }
Table1.edit;
exception on TDBEngineError do { o erro..}
MensageDlg('Registro ja esta sendo usado...!',mtInformation,[ mbOk ],0 );
end;
Nao use o DBNavigation