quarta-feira, 10 de julho de 2013

Pegar o destino de um atalho do Windows com Delphi

Olá, Boa Tarde Pessoal...
Depois de pesquisar muito na internet, encontrei pouco conteúdo sobre o assunto e resolvi postar aqui.
Nosso assunto hoje será como descobrir o destino de um atalho do windows.

Para que esta função rode corretamente é preciso declarar no uses as seguinte Units "ShellApi, ShlObj, ActiveX, ComObj, Registry" (sem as aspas).

1º - Declare a seguinte função:
   Function PegaDestinoAtalho(const LinkFileName:String):String;

2º - Na área de implementações, implemente-a da seguinte maneira:
   function TForm1.PegaDestinoAtalho(const LinkFileName: String): String;
   var
     psl : IShellLink;
     ppf : IPersistFile;
     Info : Array[0..MAX_PATH] of Char;
     wfs : TWin32FindData;
   begin
     CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, psl);
     if psl.QueryInterface(IPersistFile, ppf) = 0 then
     begin
       ppf.Load(PWChar(WideString(LinkFileName)), 0);
       psl.GetPath(@info, MAX_PATH, wfs, SLGP_UNCPRIORITY);
       Result := info;
     end;
   end;

3º - Para utilizar a função, chame-a da seguinte forma:
   // Declare duas variáveis do tipo String ("caminho e destino").
     // "caminho" será o caminho do atalho e 
     // "destino" receberá o destino do atalho.
   caminho := 'C:\Users\usuario\Desktop\atalho.lnk';
   destino := PegaDestinoAtalho(caminho);

    OBS. 1: Em Breve postarei como ler todos os arquivos do tipo "*.lnk" de um determinado diretório.
    OBS. 2: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

    Fonte.: Algum lugar da Internet e alterado para melhor entendimento.

Esta foi a dica de hoje, se for útil, comentem.

Se você tem uma dica interessante, pode postar nos comentários.

Atenciosamente
Dica Chave.

Nome do usuário logado no Windows com Delphi

Olá, Boa Tarde Pessoal...
Hoje vamos ver como saber o nome do usuário logado no Windows com o auxilio do Delphi.

1º - Declare a seguinte função:
   Function NomeUsuario: String;

2º - Na área de implementações, implemente-a da seguinte maneira:
   function TForm1.NomeUsuario: String;
   var
     lpBuffer : Array[0..20] of Char;
     nSize : dWord;
     mRet : boolean;
     erro : dWord;
   begin
     nSize := 120;
     mRet := GetUserName(lpBuffer, nSize);
     if mRet then
     begin
       Result := lpBuffer
     end
     else
     begin
       erro := GetLastError();
       MessageDlg('Ocorreu o erro ' + IntToStr(erro) + ' ao procurar o nome logado no computador.',
                  mtError, [mbOk], 0);
       Result := '';
     end;
   end;

3º - Para utilizar a função, chame-a da seguinte forma:
   nomeDoUsuario := NomeUsuario;

    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

    Fonte.: Algum lugar da Internet.

Esta foi a dica de hoje, se for útil, comentem.
Se você tem uma dica interessante, pode postar nos comentários.
Atenciosamente
Dica Chave.

sexta-feira, 24 de maio de 2013

Completar Uma String Até um Determinado Tamanho

Olá, Boa Tarde Pessoal...
Hoje vamos a mais uma dica simples, porem muito útil.

1º - Declare a seguinte função:
   CompletaString(str: string; tamanho: Integer; caracter: string): String;

2º - Na área de implementações, implemente-a da seguinte maneira:
   function TForm1.CompletaString(str: string; tamanho: Integer; caracter: string): String;
   begin
     // str -> Variavel a ser alterada.
     // tamanho -> Tamanho desejado para a variavel.
     // caracter -> Caracter usado para completar o tamanho da variavel.
     while (Length(str) < tamanho) do
     begin
       str := str + caracter;
     end;
     Result := str;
   end;

3º - Para utilizar a função, chame-a da seguinte forma:
   minhaVariavel := CompletaString(minhaVariavel, 20, ' ');



    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

Esta foi a dica de hoje, se for útil, comentem.
Se você tem uma dica interessante, pode postar nos comentários.
Atenciosamente
Dica Chave.

terça-feira, 21 de maio de 2013

"Modo Deus" ou GodMode do Windows 7, 8 e 10

Olá, Bom dia a Todos.

Agora vamos ver uma dica muito simples, porem bastante útil, principalmente para quem trabalha com suporte técnico.

Vamos falar sobre o "Modo Deus" para Windows nas versões 7, 8 e 10.

O que é o "Modo Deus" ?
    É uma funcionalidade do Windows 7, 8 e 10, onde encontramos uma grande relação de itens de configuração do Windows. No Windows 7 são 278 itens, no Windows 8.1 são 251 itens e no Windows 10 são 239 itens para o gerenciamento do sistema operacional.

Como criar e utilizar este recurso ?
    Crie uma pasta em um local de sua escolha (Ex.: Área de Trabalho), logo após renomeie a pasta para "Modo_Deus.{ED7BA470-8E54-465E-825C-99712043E01C}" (Sem Aspas).

A pasta ficará com um ícone parecido com este no Windows 7:

E igual a este no Windows 10:

Após abrir a pasta você terá uma janela semelhante a esta no Windows 7:

E semelhante a esta no Windows 10:



OBS. 1.: No canto superior direito, temos um campo de pesquisa, onde podemos filtrar os itens por palavra chave.

OBS. 2.: O nome da pasta "Modo_Deus" foi apenas um apelido usado para o nome do ícone criado, você pode usar qualquer outro nome para este recurso.
Ex.: Painel.{ED7BA470-8E54-465E-825C-99712043E01C}


Bom, espero ter ajudado com esta dica.


Atenciosamente
Dica Chave.



Função Para Validar Dígito Verificador de CNPJ



Olá, Bom Dia.
Conforme prometido, hoje vou publicar um função para validar o dígito verificador de CNPJs.

  1. Abra um novo projeto no Delphi;
  2. No formulário principal, insira um "Edit" e um "Button"(Guia Standard);
  3. Declare a seguinte função na seção de declarações "Public".  
          function verificaCNPJ(cnpj: String): Boolean; 

     4.  Na seção de implementação "Implementation", implemente a função descrita acima, segue código:

          function TForm1.verificaCNPJ(cnpj: String): Boolean;

    var
      numCNPJ : array[1..12] of integer;
      cont, d1, d2 : integer;
      digitado, calculado : String;
    begin
      for cont :=1 to 12 do
      begin
        numCNPJ[cont] := StrToInt(cnpj[cont]);
      end;
    
      d1 := numCNPJ[1]*5 + numCNPJ[2]*4 + numCNPJ[3]*3 + numCNPJ[4]*2 + numCNPJ[5]*9 +
      numCNPJ[6]*8 + numCNPJ[7]*7 + numCNPJ[8]*6 + numCNPJ[9]*5 + numCNPJ[10]*4 +
      numCNPJ[11]*3 + numCNPJ[12]*2;
    
      if (d1 mod 11)<2 then
        d1 := 0
      else
        d1 := 11 - (d1 mod 11);
    
      d2 := numCNPJ[1]*6 + numCNPJ[2]*5 + numCNPJ[3]*4 + numCNPJ[4]*3 + numCNPJ[5]*2 +
      numCNPJ[6]*9 + numCNPJ[7]*8 + numCNPJ[8]*7 + numCNPJ[9]*6 + numCNPJ[10]*5 +
      numCNPJ[11]*4 + numCNPJ[12]*3 + d1*2;
    
      if (d2 mod 11)<2 then
        d2 := 0
      else
        d2 := 11 - (d2 mod 11);
    
      digitado := cnpj[13] + cnpj[14];
      calculado := IntToStr(d1)+IntToStr(d2);
    
      if (digitado = calculado) then
        verificaCNPJ := True
      else
        verificaCNPJ := False
    end;

     5.  No evento "OnClick" do botão, coloque o seguinte código:

    if (verificaCNPJ(Edit1.Text) = True) then
    begin
      ShowMessage('CNPJ Válido!!!');
    end
    else
    begin
      ShowMessage('CNPJ Inválido!!!');
    end;

     6.  Salve o projeto em uma pasta de sua escolha e compile a aplicação, após compilar na janela que irá abrir, digite o número do CNPJ no Edit e clique no botão para validar o dígito.

    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

Esta foi a dica de hoje, em breve mais novidades em nosso Blog.

Atenciosamente
Dica Chave.

quinta-feira, 16 de maio de 2013

Função Para Validar Dígito Verificador de CPF


Olá, Boa Tarde.
Mais um dica chegando.
Hoje vou publicar um função para validar o dígito verificador de CPFs.

  1. Abra um novo projeto no Delphi;
  2. No formulário principal, insira um "Edit" e um "Button"(Guia Standard);
  3. Declare a seguinte função na seção de declarações "Public".  
          function verificaCPF(cpf: String): Boolean; 

     4.  Na seção de implementação "Implementation", implemente a função descrita acima, segue código:

    function TForm1.verificaCPF(cpf: String): Boolean;
    var
      numCPF : array[1..9] of integer;
      cont, d1, d2 : integer;
      digitado, calculado : String;
    begin
      for cont :=1 to 9 do
      begin
        numCPF[cont] := StrToInt(cpf[cont]);
      end;
      d1 := numCPF[1]*10 + numCPF[2]*9 + numCPF[3]*8 + numCPF[4]*7 + numCPF[5]*6 +
      numCPF[6]*5 + numCPF[7]*4 + numCPF[8]*3 + numCPF[9]*2;
      if (d1 mod 11)<2 then
        d1 := 0
      else
        d1 := 11 - (d1 mod 11);
      d2 := numCPF[1]*11 + numCPF[2]*10 + numCPF[3]*9 + numCPF[4]*8 + numCPF[5]*7 +
      numCPF[6]*6 + numCPF[7]*5 + numCPF[8]*4 + numCPF[9]*3 + d1*2;
      if (d2 mod 11)<2 then
        d2 := 0
      else
        d2 := 11 - (d2 mod 11);
      digitado := cpf[10] + cpf[11];
      calculado := IntToStr(d1)+IntToStr(d2);
      if (digitado = calculado) then
        verificaCPF := True
      else
        verificaCPF := False
    end;

     5.  No evento "OnClick" do botão, coloque o seguinte código:

    if (verificaCPF(Edit1.Text) = True) then
    begin
      ShowMessage('CPF Válido!!!');
    end
    else
    begin
      ShowMessage('CPF Inválido!!!');
    end;

     6.  Salve o projeto em uma pasta de sua escolha e compile a aplicação, após compilar na janela que irá abrir, digite o número do CPF no Edit e clique no botão para validar o dígito.

    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

Esta foi a dica de hoje, em breve postarei uma nova dica para a validação de dígito verificador de CNPJ.

Atenciosamente
Dica Chave.



quarta-feira, 15 de maio de 2013

Formatando Data e Hora em Delphi Com a Função "FormatDateTime()"

Olá, Bom dia.
Vamos a mais uma dica.

Hoje vamos falar um pouco da função "FormatDateTime", função esta que está presente na Unit "SysUtils" do Delphi. Esta função retorna uma string com o formato passado no primeiro parâmetro(string) e tendo como base a data passada no segundo parâmetro(TDateTime).

Formato da função: FormatDateTime(formato, data).

Vamos a um exemplo prático:

  1. Abra um novo projeto no Delphi;
  2. No formulário principal, insira um "Memo" e um "Button"(Guia Standard);
  3. No evento "OnClick" do botão, coloque o seguinte código:
  Memo1.Lines.Add(' ..:: Formatos Para Dia ::..');
  Memo1.Lines.Add('     d: ' + FormatDateTime('d', Now));
  Memo1.Lines.Add('    dd: ' + FormatDateTime('dd', Now));
  Memo1.Lines.Add('   ddd: ' + FormatDateTime('ddd', Now));
  Memo1.Lines.Add('  dddd: ' + FormatDateTime('dddd', Now));
  Memo1.Lines.Add(' ddddd: ' + FormatDateTime('ddddd', Now));
  Memo1.Lines.Add('dddddd: ' + FormatDateTime('dddddd', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos Para Mês ::..');
  Memo1.Lines.Add('     m: ' + FormatDateTime('m', Now));
  Memo1.Lines.Add('    mm: ' + FormatDateTime('mm', Now));
  Memo1.Lines.Add('   mmm: ' + FormatDateTime('mmm', Now));
  Memo1.Lines.Add('  mmmm: ' + FormatDateTime('mmmm', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos Para Ano ::..');
  Memo1.Lines.Add('     y: ' + FormatDateTime('y', Now));
  Memo1.Lines.Add('    yy: ' + FormatDateTime('yy', Now));
  Memo1.Lines.Add('  yyyy: ' + FormatDateTime('yyyy', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formato Para Hora ::..');
  Memo1.Lines.Add('     h: ' + FormatDateTime(' h', Now));
  Memo1.Lines.Add('    hh: ' + FormatDateTime('hh', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos Para Minuto ::..');
  Memo1.Lines.Add('     n: ' + FormatDateTime('n', Now));
  Memo1.Lines.Add('    nn: ' + FormatDateTime('nn', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos Para Segundo ::..');
  Memo1.Lines.Add('     s: ' + FormatDateTime('s', Now));
  Memo1.Lines.Add('    ss: ' + FormatDateTime('ss', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos Para Milisegundos ::..');
  Memo1.Lines.Add('     z: ' + FormatDateTime('z', Now));
  Memo1.Lines.Add('   zzz: ' + FormatDateTime('zzz', Now));
  Memo1.Lines.Add('');
  Memo1.Lines.Add(' ..:: Formatos de Personalizados ::..');
  Memo1.Lines.Add('                 dd/mm/yyyy: ' + FormatDateTime('dd/mm/yyyy', Now));
  Memo1.Lines.Add('                 yyyy/mm/dd: ' + FormatDateTime('yyyy/mm/dd', Now));
  Memo1.Lines.Add('                 mm/dd/yyyy: ' + FormatDateTime('mm/dd/yyyy', Now));
  Memo1.Lines.Add('                 yyyy/dd/mm: ' + FormatDateTime('yyyy/dd/mm', Now));
  Memo1.Lines.Add('                      dd/mm: ' + FormatDateTime('dd/mm', Now));
  Memo1.Lines.Add('                     dd/mmm: ' + FormatDateTime('dd/mmm', Now));
  Memo1.Lines.Add('                    dd/mmmm: ' + FormatDateTime('dd/mmmm', Now));
  Memo1.Lines.Add('         dd de mmmm de yyyy: ' + FormatDateTime('dd "de" mmmm "de" yyyy', Now));
  Memo1.Lines.Add('   dddd, dd de mmmm de yyyy: ' + FormatDateTime('dddd"," dd "de" mmmm "de" yyyy', Now));
  Memo1.Lines.Add('"Local", dd de mmmm de yyyy: ' + FormatDateTime('"Nome_Cidade," dd "de" mmmm "de" yyyy', Now));


    4.  Salve o projeto em uma pasta de sua escolha e compile a aplicação, após compilar na janela que irá abrir, clique no botão e veja o resultado gerado no campo "Memo".

    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

Esta foi a dica de hoje, podem comentar a vontade.
Atenciosamente
Dica Chave.

segunda-feira, 13 de maio de 2013

Trocar Vírgula Por Ponto em Delphi

Olá, Bom dia a Todos...
Como primeira dica, vamos postar algo simples, porém muito útil para desenvolvedores iniciantes com o Delphi.


function TForm1.TrocaVirgulaPPonto(Valor: string): String;
begin
  Result := trim(StringReplace(Valor,',','.',[rfReplaceall]));
end;



    OBS.: Para fins de compatibilidade, esta dica foi escrita usando Delphi XE3.

Esta foi a dica de hoje, podem comentar a vontade.
Atenciosamente
Dica Chave.