sexta-feira, 30 de setembro de 2016

DELPHI - Como lêr funções/procedures na DLL - How to read function/procedure in the DLL

Segue abaixo uma das formas para ler DLLs no Delphi.
A dll tem que estar na mesma pasta do executavel.
var
  DLLHandle :THandle;
  NomeDaFuncaoOuProcedure :function(Parametro1:String; Parametro2 :Integer):String; stdcall;
  Retorno :String;
begin
  try
    try
      DLLHandle := LoadLibrary('NomeDaDLL.dll');

   if DLLHandle > 0 then
   begin
    NomeDaFuncaoOuProcedure := GetProcAddress(DLLHandle, 'NomeDaFuncaoOuProcedure');

    Retorno := NomeDaFuncaoOuProcedure(Parametro1, Parametro2);
   end
  raise Exception.Create('DLL não encontrada.');
    finally
      FreeLibrary(DLLHandle);
    end;
  except on E: Exception do
    ShowMessage(E.Message);
  end;
end;

segunda-feira, 26 de setembro de 2016

DELPHI - Criptografar e Decriptografar String (AES-256) - Encrypt and Decrypt String (AES-256)

Segue Unit para Encriptar ou Decriptar String.

unit uCriptografia;

interface

uses
  uTPLb_CryptographicLibrary, uTPLb_Codec, //Componentes LockBox
  System.SysUtils //FreeAndNil
  ;

const
  Key = 'ValorChave'; //Valor chave para Encriptar e Decriptar(Use um seu)


  function encriptar(const Valor :String):String;
  function decriptar(const Valor :String):String;

implementation

function encriptar(const Valor :String):String;
var
  CryptoLib: TCryptographicLibrary;
  Codec: TCodec;
begin
  Result := '';
  CryptoLib := TCryptographicLibrary.Create(nil);
  Codec := TCodec.Create(nil);
  try
    Codec.CryptoLibrary := CryptoLib;
    Codec.StreamCipherId := 'native.StreamToBlock';
    Codec.BlockCipherId := 'native.AES-256'; //Encriptação AES 256 bits
    Codec.ChainModeId := 'native.CBC';

    Codec.Reset;
    Codec.Password := Key; //Atribuindo a chave para a Criptografia
    Codec.EncryptString(Valor, Result, TEncoding.UTF8);
  finally
    FreeAndNil(CryptoLib);
    FreeAndNil(Codec);
  end;
end;

function decriptar(const Valor :String):String;
var
  CryptoLib: TCryptographicLibrary;
  Codec: TCodec;
begin
  Result := '';
  CryptoLib := TCryptographicLibrary.Create(nil);
  Codec := TCodec.Create(nil);
  try
    Codec.CryptoLibrary := CryptoLib;
    Codec.StreamCipherId := 'native.StreamToBlock';
    Codec.BlockCipherId := 'native.AES-256'; //Encriptação AES 256 bits
    Codec.ChainModeId := 'native.CBC';

    Codec.Reset;
    Codec.Password := Key; //Atribuindo a chave para Decriptografia
    Codec.DecryptString(Result, Valor, TEncoding.UTF8);
  finally
    FreeAndNil(CryptoLib);
    FreeAndNil(Codec);
  end;
end;

end.

Para usar é só declarar a Unit(uCriptografia) nas Uses do projeto e chamar as funções diretamente.

sábado, 24 de setembro de 2016

DELPHI - Download Delphi and C++Builder 10.1 Berlin ISO (includes Update 1)

Site oficial: http://cc.embarcadero.com/item/30615
ID: 30615, Delphi and C++Builder 10.1 Berlin ISO (includes Update 1)
v24.0.24468.8770
Size=7,332,845,568 bytes
MD5: A85A0FBA4F8BAB121312184CDA85C198
SHA-1=3BBEE42F83054D1D3A4FD4E2E19B30C68DA9E04C

Download Aqui

segunda-feira, 19 de setembro de 2016

DELPHI - Mensagem de dialogo no centro da aplicação - Dialog message center application

Estava procurando alguma caixa de dialogo que exibe no centro da minha aplicação. Não encontrei nenhuma com alguma propriedade nesse sentido.

Ao vasculhar pela Unit dos dialogos "Vcl.Dialogs", encontrei uma função interessante que cria a caixa de dialogo e retorna um TForm, e assim me foi permitido posicionar no centro do form PAI.

Função: CreateMessageDialog

Estou compartilhando aqui com vocês.

unit uCustomMessage;

interface

uses
  Vcl.Dialogs, Vcl.Forms, System.SysUtils;

const
  mbOK = [mbOK];

type
  TCustomMessage = class
  public
    class procedure ShowCustomDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons);
  end;

implementation

{ TFrmMessage }

class procedure TCustomMessage.ShowCustomDlg(const Msg: string;
  DlgType: TMsgDlgType; Buttons: TMsgDlgButtons);
var
  FCustomMessage :TForm;
begin
  FCustomMessage := CreateMessageDialog(Msg, DlgType, Buttons);
  try
    FCustomMessage.Position := poMainFormCenter;
    FCustomMessage.ShowModal;
  finally
    FreeAndNil(FCustomMessage);
  end;
end;
end.


Exemplo de uso:
 TCustomMessage.ShowCustomDlg('Sua mensagem aqui', mtError, mbOK);

ou
 TCustomMessage.ShowCustomDlg('Sua mensagem aqui', mtInformation, mbOK)

e etc.

quarta-feira, 7 de setembro de 2016

DELPHI - Quebra de linha - Line break

Comando para quebrar linha do Delphi.
sLineBreak;

DELPHI - Função para retornar a versão do aplicativo(Version Info) - Function to return the application version (Version Info)

Essa função retorna a versão do aplicativo configurado no projeto do Delphi.

class function VersaoExe: String;
type
  PFFI = ^vs_FixedFileInfo;
var
  F : PFFI;
  Handle : Dword;
  Len : Longint;
  Data : Pchar;
  Buffer : Pointer;
  Tamanho : Dword;
  Parquivo: Pchar;
  Arquivo : String;
begin
  Arquivo := Application.ExeName;
  Parquivo := StrAlloc(Length(Arquivo) + 1);
  StrPcopy(Parquivo, Arquivo);
  Len := GetFileVersionInfoSize(Parquivo, Handle);
  Result := '';

  if Len > 0 then
  begin
    Data:=StrAlloc(Len+1);
    if GetFileVersionInfo(Parquivo,Handle,Len,Data) then
    begin
      VerQueryValue(Data, '\',Buffer,Tamanho);
      F := PFFI(Buffer);
      Result := Format('%d.%d.%d.%d',
        [HiWord(F^.dwFileVersionMs),
        LoWord(F^.dwFileVersionMs),
        HiWord(F^.dwFileVersionLs),
        Loword(F^.dwFileVersionLs)]
      );
    end;
    StrDispose(Data);
  end;
  StrDispose(Parquivo);
end;

DELPHI - Erro ao conectar no banco sqlite - Failed: "Sqlite3.dll not found"

Este erro estava acontecendo no delphi XE5 e 6 após tentar conectar num banco SQLITE.

Baixei a DLL em questão de vários lugares da internet e coloquei na pasta C:\Windows\System32\ para tentar resolver o problema, mas não consegui, o erro persiste.

Pesquisei no meu computador se alguma das aplicações instalada tinha essa DLL e encontrei. Realizei a cópia para System32 e SysWOW64 e obtive sucesso.

DLL utilizada: SQLite3.rar