Fórum Consulta CNPJ #409304

10/11/2011

0

Como posso exibir no formulário apenas a imagem de segurança ao invés de exibir toda a página de consulta conforme exemplo abaixo. O Exemplo funciona belezinha mas acho que da pra melhorar com ajuda de vocês...


unit UnitCNPJ;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, OleCtrls, SHDocVw, ComCtrls, MSHTML, ActiveX;

type
  TObjectProcedure = procedure of object;

  TEventObject = class(TInterfacedObject, IDispatch)
  private
    FOnEvent: TObjectProcedure;
  protected
    function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
    function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
    function GetIDsOfNames(const IID: TGUID; Names: Pointer;  NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
    function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
  public
    constructor Create(const OnEvent: TObjectProcedure);
    property OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
  end;

  TfConsultaRF = class(TForm)
    Panel1: TPanel;
    Edit_url: TEdit;
    BitBtn_Preencher: TBitBtn;
    BitBtn_Dados: TBitBtn;
    Edit_CNPJ: TEdit;
    PageControl: TPageControl;
    TabSheet_Receita: TTabSheet;
    Panel_Cadastro: TPanel;
    Panel4: TPanel;
    WebBrowser: TWebBrowser;
    Label2: TLabel;
    BitBtn_Home: TBitBtn;
    Label1: TLabel;
    BitBtn_Codigo: TBitBtn;
    Edit_Nome: TEdit;
    Label3: TLabel;
    Edit_Inscricao: TEdit;
    Edit_Endereco: TEdit;
    Edit_Numero: TEdit;
    Edit_Complemento: TEdit;
    Edit_Cep: TEdit;
    Edit_Bairro: TEdit;
    Edit_Minicipio: TEdit;
    Edit_UF: TEdit;
    Edit_Img: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Label_end: TLabel;
    Label6: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label7: TLabel;
    Label11: TLabel;
    Panel_Carregando: TPanel;
    Shape1: TShape;
    Label12: TLabel;
    Panel2: TPanel;
    btOK: TBitBtn;
    pcDados: TPageControl;
    TabSheet1: TTabSheet;
    Memo_Codigo: TMemo;
    TabSheet2: TTabSheet;
    Memo_Dados: TMemo;
    procedure WebBrowserBeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    procedure WebBrowserDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure BitBtn_PreencherClick(Sender: TObject);
    procedure BitBtn_HomeClick(Sender: TObject);
    procedure BitBtn_DadosClick(Sender: TObject);
    procedure BitBtn_CodigoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btOKClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fConsultaRF: TfConsultaRF;
  htmlDoc : IHTMLDocument2;

implementation

uses UnitCadFornecedor, UnitFornecedor;

{$R *.dfm}
{ TEventObject }

constructor TEventObject.Create(const OnEvent: TObjectProcedure);
begin
  inherited Create;
  FOnEvent := OnEvent;
end;

function TEventObject.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.GetTypeInfoCount(out Count: Integer): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
begin
  if (DispID = DISPID_VALUE) then
  begin
    if Assigned(FOnEvent) then FOnEvent;
    Result := S_OK;
  end
  else Result := E_NOTIMPL;
end;

// -----------------------------------------------------

procedure TfConsultaRF.WebBrowserBeforeNavigate2(
  Sender: TObject; const pDisp: IDispatch; var URL, Flags, TargetFrameName,
  PostData, Headers: OleVariant; var Cancel: WordBool);
begin
   htmlDoc := nil;
   Panel_Carregando.Visible := True;
end;

procedure TfConsultaRF.WebBrowserDocumentComplete(
  Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
  if Assigned(WebBrowser.Document) then
  begin
    htmlDoc := WebBrowser.Document as IHTMLDocument2;
    // htmlDoc.onmouseover := (TEventObject.Create(Document_OnMouseOver) as IDispatch);
    // htmlDoc.onclick := (TEventObject.Create(Document_OnClick) as IDispatch);
  end;
  Panel_Carregando.Visible := False;
  Edit_url.text := url;
  If pos(Cnpjreva_Solicitacao2.asp,url) > 0 Then
    If (Edit_Img.Text <> ) then
     BitBtn_Preencher.Click;
  If pos(Cnpjreva_Comprovante.asp,url) > 0 Then
     BitBtn_Dados.Click;
  If pos(Cnpjreva_Comprovante.asp,url) > 0 then
    fConsultaRF.Height := 304
  else
  begin
    fConsultaRF.Height := 640;
    Edit_CNPJ.SetFocus;
  end;
  BitBtn_Codigo.Click;
end;

procedure TfConsultaRF.BitBtn_PreencherClick(
  Sender: TObject);
var
  i, j: Integer;
  FormItem: Variant;
//  Botao : Variant;
  //sHtml : HTMLElement;
begin
  if VarIsNull(WebBrowser.OleObject.Document) or
     VarisEmpty(WebBrowser.OleObject.Document) then
    exit;
  //count forms on document
  for i := 0 to WebBrowser.OleObject.Document.Forms.Length -1 do
  begin
    FormItem := WebBrowser.OleObject.Document.Forms.Item(I);
  try
    for j := 0 to FormItem.Length-1 do
    begin
       Memo_Dados.lines.add(FormItem.Item(j).Name+ >> +FormItem.Item(j).Value);
      if (FormItem.Item(j).Name = cnpj) then
        FormItem.Item(j).Value := Edit_CNPJ.Text;
      if (FormItem.Item(j).Name = idLetra) then
        FormItem.Item(j).Value := Edit_Img.Text;
      if (FormItem.Item(j).Name = submit1) then
         FormItem.Item(j).Click;
    end;
  Finally
    Edit_Img.Clear;
  End;
 end;

end;

procedure TfConsultaRF.BitBtn_HomeClick(
  Sender: TObject);
begin
  WebBrowser.Navigate(http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao2.asp);
  WebBrowser.Align := alNone;
  WebBrowser.Height := 90;
  WebBrowser.Width := 200;
  
end;

procedure TfConsultaRF.BitBtn_DadosClick(
  Sender: TObject);
Var
  i, y : Integer;
begin
  TRY
   Memo_Dados.lines.Text := WebBrowser.OleObject.Document.documentElement.innerText;
   For i := 0 To Memo_Dados.lines.Count-1 Do
   Begin
      For y := 0 To ComponentCount - 1 Do
         If Components[y] is TEdit Then
            If (Trim((Components[y] as TEdit).Hint)<>) And ((Components[y] as TEdit).Hint = Trim(Memo_Dados.Lines[i])) Then
              (Components[y] as TEdit).Text := Trim(Memo_Dados.Lines[i+1]);
   End;
  FINALLY
    WITH FormFornecedor DO
    begin
      sqlFornecedoresNome.AsString := Edit_Nome.Text;
      sqlFornecedoresRazaoSocial.AsString := Edit_Nome.Text;
      sqlFornecedoresCNPJ.AsString := Edit_Inscricao.Text;
      sqlFornecedoresCEP.AsString := Edit_CEP.Text;
      sqlFornecedoresEndereco.AsString := Edit_Endereco.Text;
      sqlFornecedoresNumero.AsString := Edit_Numero.Text;
      sqlFornecedoresBairro.AsString := Edit_Bairro.Text;
      sqlFornecedoresComplemento.AsString := Edit_Complemento.Text;
      sqlFornecedoresUF.AsString := Edit_UF.Text;
      sqlFornecedoresCidade.AsString := Edit_Minicipio.Text;
    end;
  btOK.Click;
  END;
end;

procedure TfConsultaRF.BitBtn_CodigoClick(
  Sender: TObject);
var
    Html : IHTMLElement;
Begin
   If Assigned(WebBrowser.Document) then
   Begin
     Html := (WebBrowser.Document As IHTMLDocument2).body;
     While Html.parentElement <> Nil do
       Html := Html.parentElement;
        Memo_Codigo.Text := Html.outerHTML;
   End;
End;

procedure TfConsultaRF.FormCreate(Sender: TObject);
begin
  fConsultaRF.Height := 304;
end;

procedure TfConsultaRF.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  fConsultaRF := NIL;
end;

procedure TfConsultaRF.btOKClick(Sender: TObject);
begin
  fConsultaRF.Close;
end;

end.
Paulo Andrade

Paulo Andrade

Responder

Posts

11/11/2011

Leonardo Xavier

Qual ferramenta de desenvolvimento você esta utilizando?
Responder

Gostei + 0

12/11/2011

Paulo Andrade

Não entendi a pergunta, mas pelo que entendi a ferramenta a o Delphi 7.



Qual ferramenta de desenvolvimento você esta utilizando?
Responder

Gostei + 0

02/04/2013

Fernando Santos

Não sei se você ainda está interessado em consultar CNPJ na receita federal. Mais mesmo assim eu vou dá a dica. Você obter a URL da imagem e depois fazer o download por esta função.

function DownloadFile(SourceFile, DestFile: string): Boolean;
const BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array[1..BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
begin
 sAppName := ExtractFileName(Application.ExeName);
 hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
 try
   hURL := InternetOpenURL(hSession,PChar(SourceFile),nil,0,0,0);
   try
     AssignFile(f, DestFile);
     Rewrite(f,1);
     repeat
       InternetReadFile(hURL, @Buffer,SizeOf(Buffer), BufferLen);
       BlockWrite(f, Buffer, BufferLen)
     until BufferLen = 0;
     CloseFile(f);
     Result := True;
   finally
     InternetCloseHandle(hURL)
   end
 finally
   InternetCloseHandle(hSession)
 end;
end;


E depois pode carregar por exemplo em Timage.

Também tenho outra dica para você.
Eu criei um DLL em Delphi que você pode fazer todo o procedimento com estas simples linhas de código.

  type
    TEmpresa = Record
      Tipo: ShortString;
      Abertua: ShortString;
      RazaoSocial: ShortString;
      Endereco: ShortString;
      Numero: ShortString;
      Complemento: ShortString;
      CEP: ShortString;
      Bairro: ShortString;
      Cidade: ShortString;
      UF: ShortString;
      Situacao: ShortString;
    End;

  function ConsultarCNPJ(CNPJ: ShortString): TEmpresa; stdcall;


implementation

function ConsultarCNPJ(CNPJ: ShortString): TEmpresa; stdcall; external 'CnpjDll.dll';

procedure TF_Principal.ButBuscarClick(Sender: TObject);
  var
    CNPJ: ShortString;
    Empresa: TEmpresa;
begin
  CNPJ:= EditCNPJ.Text;
  Empresa:= ConsultarCNPJ(CNPJ);

    EditTipo.Text:= Empresa.Tipo;
    EditAbertura.Text:= Empresa.Abertua;
    EditRazaoSocial.Text:= Empresa.RazaoSocial;
    EditEndereco.Text:= Empresa.Endereco;
    EditNumero.Text:= Empresa.Numero;
    EditComplemento.Text:= Empresa.Complemento;
    EditCEP.Text:= Empresa.CEP;
    EditBairro.Text:= Empresa.Bairro;
    EditCidade.Text:= Empresa.Cidade;
    EditUF.Text:= Empresa.UF;
    EditSituacao.Text:= Empresa.Situacao;
end;


A DLL utiliza indy que só carrega o necessário. Exemplo quando você faz isso pelo TWebBrowser do Delphi ele vai carregar imagens desnecessárias, css, javascript etc.. já pelo indy isso só acontece-se com o que você determina, e de resultado fica uma consulta mais rápida.

Para baixar a DLL com um exemplo com o código fonte em delphi veja aqui
[url]http://fsist.blogspot.com.br/2013/03/dll-consultar-cnpj-direto-da-receita.html[/url]
Responder

Gostei + 0

21/05/2013

Paulo Andrade

Obrigado FERNANDO MARCOS DOS SANTOS e desculpe por demorar para agradecer, é que estava numa correria doida.

Solução perfeita.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar