Instalei o delphi 2009 e o erro continua. No debug deu a seguinet mensagem: Invalid Address specified to RtlFreeHeap
unit Principal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls, ToolWin, ImgList,
Menus,Registry,mshtml, ExtCtrls, ExtDlgs, DB, ADODB, Mask, DBCtrls,
Buttons, DBTables, AppEvnts, Clipbrd, Grids, DBGrids, Shellapi;
type
TMainform = class(TForm)
MainMenu1: TMainMenu;
Arquivo1: TMenuItem;
Editar1: TMenuItem;
MNovaJanela: TMenuItem;
MAbrir: TMenuItem;
MSalvar: TMenuItem;
N1: TMenuItem;
MImprimir: TMenuItem;
MVisualizar: TMenuItem;
MConfigurar: TMenuItem;
N2: TMenuItem;
MPropriedades: TMenuItem;
N3: TMenuItem;
MSair: TMenuItem;
MRecortar: TMenuItem;
MCopiar: TMenuItem;
MColar: TMenuItem;
N4: TMenuItem;
MLocalizar: TMenuItem;
ImageList1: TImageList;
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
btnVoltar: TToolButton;
btnAvancar: TToolButton;
btnParar: TToolButton;
btnAtualizar: TToolButton;
ToolButton1: TToolButton;
StatusBar1: TStatusBar;
OpenDialog1: TOpenDialog;
ComboBox1: TComboBox;
OpenPictureDialog1: TOpenPictureDialog;
PageControl1: TPageControl;
TabSheet3: TTabSheet;
PageControl_Principal: TPageControl;
Panel1: TPanel;
WebBrowser1: TWebBrowser;
Cadastros1: TMenuItem;
PessoaFsica1: TMenuItem;
PF: TTabSheet;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Sexo: TLabel;
PF_bt_capturar: TButton;
PF_EditNome: TDBEdit;
PF_EditCPF: TDBEdit;
PF_EditEleitor: TDBEdit;
PF_EditMae: TDBEdit;
PF_EditUnidAdm: TDBEdit;
PF_EditNasc: TDBEdit;
PF_EditSituacao: TDBEdit;
PF_EditSexo: TDBEdit;
PF_EditObito: TDBEdit;
PF_EditEndereco: TDBMemo;
PF_bt_salvar: TBitBtn;
PF_bt_cancelar: TBitBtn;
GroupBox2: TGroupBox;
PF_bt_novo_voltar: TButton;
PF_bt_novo: TButton;
Timer1: TTimer;
ProgressBar1: TProgressBar;
Label32: TLabel;
Label66: TLabel;
tsDados: TTabSheet;
GroupBox7: TGroupBox;
Panel2: TPanel;
Label28: TLabel;
rb_type: TRadioButton;
Panel3: TPanel;
Label29: TLabel;
rbCPF: TRadioButton;
rbNome: TRadioButton;
rbNomeMae: TRadioButton;
rbTitulo: TRadioButton;
rbDataNascimento: TRadioButton;
rbObito: TRadioButton;
GroupBox8: TGroupBox;
btnConsultarBase: TButton;
BitBtn1: TBitBtn;
Memo1: TMemo;
Edit1: TEdit;
Label30: TLabel;
Label12: TLabel;
edtContador: TEdit;
Bevel1: TBevel;
Button1: TButton;
procedure btnVoltarClick(Sender: TObject);
procedure btnAvancarClick(Sender: TObject);
procedure btnPararClick(Sender: TObject);
procedure btnAtualizarClick(Sender: TObject);
procedure btnHomeClick(Sender: TObject);
procedure btnPesquisaClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WebBrowser1CommandStateChange(Sender: TObject;
Command: Integer; Enable: WordBool);
procedure WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure WebBrowser1StatusTextChange(Sender: TObject;
const Text: WideString);
procedure MNovaJanelaClick(Sender: TObject);
procedure MAbrirClick(Sender: TObject);
procedure MSairClick(Sender: TObject);
procedure PF_bt_capturarClick(Sender: TObject);
procedure PF_bt_salvarClick(Sender: TObject);
procedure PF_bt_cancelarClick(Sender: TObject);
procedure ApplicationEvents1Exception(Sender: TObject; E: Exception);
procedure PF_bt_novoClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure PF_bt_novo_voltarClick(Sender: TObject);
procedure WebBrowser1TitleChange(Sender: TObject;
const Text: WideString);
procedure Timer1Timer(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
procedure BitBtn1Click(Sender: TObject);
procedure btnConsultarBaseClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Procedure ExibirURLsVisitadas(Urls: TStrings);
function ParteTexto(Frase: string; Parte: string): string;
function SelecaoTexto(RefInicial, RefFinal:string;NumCaracter:integer;WB: TWebBrowser): string;
function TextoExato(Texto, RefIni: string; salto,NumCaract:integer): string;
procedure Delay(MSec: Cardinal);
procedure imgSalvaImagem(sArq: String);
procedure FillInGMXForms(WB: ShDocVW.IWebbrowser2; IDoc1: IHTMLDocument2;Document: Variant; P_CNPJ : string);
end;
var
Mainform: TMainform;
AndrewLinoDispach:TWEBBROWSER;
ppDisp:IDispatch;
sql_dados : string;
implementation
uses DateUtils, DM, ActiveX, jpeg;
{$R *.dfm}
procedure TMainform.btnVoltarClick(Sender: TObject);
begin
webbrowser1.GoBack;
end;
procedure TMainform.btnAvancarClick(Sender: TObject);
begin
WebBrowser1.GoForward;
end;
procedure TMainform.btnPararClick(Sender: TObject);
begin
WebBrowser1.Stop;
end;
procedure TMainform.btnAtualizarClick(Sender: TObject);
begin
WebBrowser1.Refresh;
end;
procedure TMainform.btnHomeClick(Sender: TObject);
begin
WebBrowser1.GoHome;
end;
procedure TMainform.btnPesquisaClick(Sender: TObject);
begin
WebBrowser1.GoSearch;
end;
procedure TMainform.ExibirURLsVisitadas(Urls: TStrings);
{
Exibe as urls vistadas no combobox de endereço
}
var
Reg: TRegistry;
S: TStringList;
i: Integer;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('Software\Microsoft\Internet '+
'Explorer\TypedURLs', False) then
begin
S := TStringList.Create;
try
reg.GetValueNames(S);
for i := 0 to S.Count - 1 do
begin
Urls.Add(reg.ReadString(S.Strings[i]));
end;
finally
S.Free;
end;
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;
procedure TMainform.FormCreate(Sender: TObject);
begin
// Abrir no webbrowser a página do infoseg
webbrowser1.Navigate('
www.mp.pb.gov.br');
end;
procedure TMainform.WebBrowser1CommandStateChange(Sender: TObject;
Command: Integer; Enable: WordBool);
begin
case Command of
CSC_NAVIGATEBACK: begin
//Ativa e Desativa Automaticamente o Botão Voltar,
//Caso tenha alguma página para voltar
BtnVoltar.Enabled := Enable;
end;
CSC_NAVIGATEFORWARD: begin
//Ativa e Desativa Automaticamente o Botão Avançar,
//Caso tenha alguma página para avançar
BtnAvancar.Enabled := Enable;
end;
end;
end;
procedure TMainform.WebBrowser1BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
{Ao Nevagar uma página, ele coloca automaticamente
o endereço dela no combobox, para sabermos que página
estamos entrando, o endereço da mesma}
combobox1.Text:=url;
end;
procedure TMainform.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
//Se a tecla pressionada for Enter, então navegue até a página tal.
if (key=#13) then
begin
webbrowser1.Navigate(combobox1.Text);
end;
end;
procedure TMainform.WebBrowser1StatusTextChange(Sender: TObject;
const Text: WideString);
begin
StatusBar1.Panels[0].Text:=text;
end;
procedure TMainform.MNovaJanelaClick(Sender: TObject);
begin
// WinExec(pchar(application.exename),SW_MAXIMIZE);
end;
procedure TMainform.MAbrirClick(Sender: TObject);
begin
if OpenDialog1.Execute then
webbrowser1.Navigate(OpenDialog1.FileName)
else
exit;
end;
procedure TMainform.MSairClick(Sender: TObject);
begin
application.Terminate;
end;
function TMainform.SelecaoTexto(RefInicial, RefFinal:string;NumCaracter:integer;WB: TWebBrowser): string;
{
RefInicial: texto inicial do refinamento
RefFinal: texto final do refinamento
NumCaracter: quantidade aproximada de caracter que contem a refinicial e reffinal
wb: webbrower que será copiada as informações(strings)
}
var
iall : IHTMLElement;
texto,selecao: String;
ColonPosIni,ColonPosFinal:integer;
begin
if Assigned(WB.Document) then
begin
iall := (WB.Document AS IHTMLDocument2).body;
while iall.parentElement <> nil do
begin
iall := iall.parentElement;
end;
texto:=iall.outerHTML;
ColonPosIni := Pos(RefInicial,texto);
Selecao := Copy(texto,ColonPosIni,NumCaracter);
Result:= ParteTexto(Copy(texto,ColonPosIni,NumCaracter),RefFinal);
end;
end;
function TMainform.ParteTexto(Frase, Parte: string): string;
//
// Retorna uma parte de um texto antes de um caractere especificado
//
var
i,max: integer;
buff: string;
begin
i := 1;
buff := '';
max := length(parte);
while (i <= length(Frase)) and (buff <> parte) do
begin
buff := buff + Frase[i];
if length(buff) > max then
begin
buff := copy(buff,2,max);
end;
inc(i);
end;
if buff = Parte then
begin
Result := copy(Frase,1,i - max -1);
Frase := copy(Frase,i,length(Frase)+1 -i);
end
else
begin
Result := Frase;
Frase := '';
end;
end;
function TMainform.TextoExato(Texto, RefIni: string; salto,NumCaract:integer): string;
{
Recebe o texto com a parte inicial definida e remete o texto do inicio até o caracter '<'
Texto: é o texto que será localizado a string
Refini: é minha referencia inicial
salto: é o numero de caracteres que deve saltar para chegar o inicio do texto desejado
numcaract: é a quantidade maxima de caracter que desejamos que seja copiado
}
var
PosicaoInicial : integer;
comando,ComandoPos:string;
begin
PosicaoInicial := Pos(RefIni,texto);
Comando := Copy(texto,PosicaoInicial+salto,NumCaract);
Result := ParteTexto(Comando,'<');
end;
procedure TMainform.PF_bt_capturarClick(Sender: TObject);
var
cpf,nome,referencia, ver_pag: string;
num: integer;
begin
ver_pag := SelecaoTexto('Pesquisa Pessoa Fisica - Detalhes','<',100,WebBrowser1); //verifica se se está no form pessoa fisica
if ver_pag = 'Pesquisa Pessoa Fisica - Detalhes' then
begin
referencia:= SelecaoTexto('Nome','Pesquisar Relacionamentos',2000,WebBrowser1);
// tratamento do campo cpf
cpf := TextoExato(referencia,'CPF',49,12);
num:= length(cpf);
if num < 11 then
begin
case num of
10: cpf := '0' + cpf;
9: cpf := '00' + cpf;
8: cpf := '000' + cpf;
7: cpf := '0000' + cpf;
6: cpf := '00000' + cpf;
end;
end;
nome := TextoExato(referencia,'Nome',63,200);
PF_EditCPF.Text:= cpf;
PF_EditNome.Text:= nome;
PF_EditNasc.Text:= TextoExato(referencia,'Data Nasc',65,10);
PF_EditMae.Text:= TextoExato(referencia,'Mãe',42,200);
PF_EditEleitor.Text:= TextoExato(referencia,'Eleitor:',43,20);
PF_EditSexo.Text:= TextoExato(referencia,'Sexo',40,12);
PF_EditUnidAdm.Text:= TextoExato(referencia,'Administrativa:',50,100);
PF_EditSituacao.Text:= TextoExato(referencia,'Cadastral:',55,30);
PF_EditObito.Text:= TextoExato(referencia,'Obito',51,10);
PF_EditEndereco.Text:= TextoExato(referencia,'Endere',54,300);
end
else
begin
ShowMessage('Selecione a Página de dados de Pessoa Física');
exit;
end;
end;
procedure TMainform.PF_bt_salvarClick(Sender: TObject);
begin
end
else
ShowMessage('A tabela não está em modo de Inserção de dados');
end;
procedure TMainform.PF_bt_cancelarClick(Sender: TObject);
begin
DataModule1.Tb_PessoaFisica.Cancel;
end;
procedure TMainform.ApplicationEvents1Exception(Sender: TObject;
E: Exception);
var mensagem: string;
Pos1, Pos2: integer;
begin
If Pos(UpperCase('is not a valid date'), UpperCase(E.Message)) <> 0 then
showmessage('Data inválida, proceda a correção.')
else
if Pos(UpperCase('must have a value'), UpperCase(E.Message)) <> 0 then
begin
Pos1:=Pos('''', E.Message);
mensagem:=E.Message;
Delete(mensagem, Pos1, 1);
Pos2:=Pos('''', mensagem);
mensagem:=copy(E.Message, Pos1 + 1, Pos2 - Pos1);
showmessage('É obrigatório o preenchimento do campo '+ mensagem + '.');
end
else
If Pos(UpperCase('key violation'), UpperCase(E.Message)) <> 0 then
showmessage('Houve violação de Chave. Registro já incluido.')
else
If Pos(UpperCase('Input value'), UpperCase(E.Message)) <> 0 then
showmessage('Campo preenchido com valor não válido. Proceda correção.')
else
If Pos(UpperCase('is not a valid time'), UpperCase(E.Message)) <> 0 then
showmessage('Hora inválida, proceda a correção.')
else
showmessage('Ocorreu o seguinte erro: '+UpperCase(E.Message));
end;
procedure TMainform.PF_bt_novoClick(Sender: TObject);
var
ver_pag: string;
begin
ver_pag := SelecaoTexto('Pesquisa Pessoa Fisica - Detalhes','<',100,WebBrowser1); //verifica se se está no form pessoa fisica
if ver_pag = 'Pesquisa Pessoa Fisica - Detalhes' then
begin
DataModule1.Tb_PessoaFisica.close;
DataModule1.Tb_PessoaFisica.Open;
DataModule1.Tb_PessoaFisica.Append;
end
else
ShowMessage('Selecione a aba Pessoa Física');
end;
procedure TMainform.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if DataModule1.Tb_PessoaFisica.State in [dsinsert, dsedit] then
begin
ShowMessage('Cancele ou Salve o Cadastro de Pessoa Física');
Action:= caNone;
exit;
end;
end;
procedure TMainform.PF_bt_novo_voltarClick(Sender: TObject);
var
ver_pag: string;
begin
ver_pag := SelecaoTexto('Pesquisa Pessoa Fisica - Detalhes','<',100,WebBrowser1); //verifica se se está no form pessoa fisica
if ver_pag = 'Pesquisa Pessoa Fisica - Detalhes' then
WebBrowser1.GoBack
else
begin
ShowMessage('Selecione a aba Pessoa Física');
exit;
end;
DataModule1.Tb_PessoaFisica.close;
DataModule1.Tb_PessoaFisica.Open;
DataModule1.Tb_PessoaFisica.Append;
end;
procedure TMainform.WebBrowser1TitleChange(Sender: TObject;
const Text: WideString);
begin
{Colocar o nome da página + ' dados que te interessar}
MainForm.Caption:=text + ' - CAPTURA DE DADOS PESSOA FISICA';
end;
procedure TMainform.Timer1Timer(Sender: TObject);
var
DateTime : TDateTime;
str : string;
begin
DateTime := Time;
str := TimeToStr(DateTime);
StatusBar1.Panels[2].Text := str;
end;
procedure TMainform.Delay(MSec: Cardinal);
var
Start: Cardinal;
begin
Start := GetTickCount;
repeat
Application.ProcessMessages;
until (GetTickCount - Start) >= MSec;
end;
procedure TMainform.FormResize(Sender: TObject);
var
r: TRect;
const
SB_GETRECT = WM_USER + 10;
begin
// Definindo onde ficará a progressbar, neste caso será
//Na barra de Status, no painel 1
Statusbar1.Perform(SB_GETRECT, 1, Integer(@R));
ProgressBar1.Parent := Statusbar1;
ProgressBar1.SetBounds(r.Left, r.Top,
r.Right - r.Left - 5, r.Bottom - r.Top);
end;
procedure TMainform.WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
{Ele faz um rotina para saber se o valor Maximo do
Progressbar é maior que 1 e o valor minimo tambem
se for, então ele faz a rotina}
If (Progress>=1) and (ProgressMax>1)
then
begin
//Ele tira uma valor percentual para colocar
//no Progressbar
ProgressBar1.Position := Round((Progress * 100)
Div ProgressMax);
ProgressBar1.Visible := True;
end
else
begin
ProgressBar1.Position := 1;
ProgressBar1.Visible := False;
end;
end;
procedure TMainform.imgSalvaImagem(sArq: String);
var
ViewObject: IViewObject;
sourceDrawRect: TRect;
imgImagem: TImage;
{ chamar a função
imgSalvaImagem(´C:\teste.bmp´);
}
begin
if webBrowser1.Document <> nil then
try
imgImagem := TImage.Create(Self);
imgImagem.Width := WebBrowser1.Width;
imgImagem.Height := WebBrowser1.Height;
webBrowser1.Document.QueryInterface(IViewObject, ViewObject);
if ViewObject <> nil then
try
sourceDrawRect := Rect(0, 0, imgImagem.Width, imgImagem.Height);
ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Self.Handle,
imgImagem.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
finally
ViewObject._Release;
end;
imgImagem.Picture.Bitmap.SaveToFile(sArq);
except
end;
end;
procedure TMainform.BitBtn1Click(Sender: TObject);
var
IDoc1: IHTMLDocument2;
Web: ShDocVW.IWebBrowser2;
i : integer;
ver_pag : string;
document: IHTMLDocument2;
tempo,contador: integer;
begin
contador := 0;
for i:=0 TO Memo1.Lines.Count -1 do
begin
Edit1.Text := Memo1.Lines.Strings[i];
Webbrowser1.Navigate('http:\\10.128.0.29\dados.htm');
// aguarda até a página ser carregada
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
Webbrowser1.Document.QueryInterface(IHTMLDocument2, iDoc1);
Web := WebBrowser1.ControlInterface;
FillInGMXForms(Web, iDoc1, Webbrowser1.Document, Edit1.Text);
delay(2000);
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
//botão de pesquisa
WebBrowser1.Navigate('javascript:enviarForm()');
// WebBrowser1.Navigate('http:\\10.128.0.29\resultado.htm');
while Webbrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages;
ver_pag := SelecaoTexto('Error','<',100,WebBrowser1); //verifica se esta na pagina de erro
if ver_pag <> 'Error' then
begin
delay(3000);
PF_bt_novo.Click;
PF_bt_capturar.Click;
delay(1000);
PF_bt_salvar.Click;
delay(3000);
inc(contador);
edtContador.Text := inttostr(contador);
end;
end;
for i:= 1 to 10 do
begin
Beep;
Delay(9000);
end;
end;
function ExecuteScript(doc: IHTMLDocument2; script: string; language: string): Boolean;
var
win: IHTMLWindow2;
Olelanguage: Olevariant;
begin
if doc <> nil then
begin
try
win := doc.parentWindow;
if win <> nil then
begin
try
Olelanguage := language;
win.ExecScript(script, Olelanguage);
finally
win := nil;
end;
end;
finally
doc := nil;
end;
end;
end;
procedure TMainform.FillInGMXForms(WB: ShDocVW.IWebbrowser2; IDoc1: IHTMLDocument2;Document: Variant; P_CNPJ : string);
const
IEFields: array[1..2] of string = ('INPUT', 'text');
var
IEFieldsCounter: Integer;
m: Integer;
ovElements: OleVariant;
elemento: integer;
begin
if Pos('Pessoa Fisica', Document.Title) <> 0 then
while WB.ReadyState <> READYSTATE_COMPLETE do
Application.ProcessMessages;
if rbCPF.Checked then elemento := 0
else
if rbTitulo.Checked then elemento := 1
else
if rbNome.Checked then elemento := 3;
// contar os elementos e interagir por suas formas
IEFieldsCounter := 0;
for m := 0 to Document.forms.Length - 1 do
begin
ovElements := Document.forms.Item(m).elements;
// interagir por elemento
try
// preencher os campos
if (ovElements.item(elemento).tagName = IEFields[1]) and (ovElements.item(elemento).type = IEFields[2]) then
begin
ovElements.item(elemento).Value := P_CNPJ;
Inc(IEFieldsCounter);
end;
except
// falha...
end;
end;
// se o campo estiver preenchido.
if IEFieldsCounter = 3 then ExecuteScript(iDoc1,'','JavaScript');
end;
procedure TMainform.btnConsultarBaseClick(Sender: TObject);
begin
Memo1.PasteFromClipboard;
end;
procedure TMainform.Button1Click(Sender: TObject);
begin
Memo1.Clear;
edtContador.Clear;
Edit1.Clear;
end;
end.
________
unit DM;
interface
uses
SysUtils, Classes, DB, ADODB, DBTables;
type
TDataModule1 = class(TDataModule)
ADOConnection1: TADOConnection;
Tb_PessoaFisica: TADOTable;
DS_Pessoa_Fisica: TDataSource;
Tb_PessoaFisicapf_id: TAutoIncField;
Tb_PessoaFisicacpf: TStringField;
Tb_PessoaFisicanome_pf: TStringField;
Tb_PessoaFisicadata_nasc: TStringField;
Tb_PessoaFisicanome_mae: TStringField;
Tb_PessoaFisicatitulo_eleitor: TStringField;
Tb_PessoaFisicasexo: TStringField;
Tb_PessoaFisicaano_obito: TStringField;
Tb_PessoaFisicaunid_admin: TStringField;
Tb_PessoaFisicasituacao: TStringField;
Tb_PessoaFisicaend_pf: TStringField;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule1: TDataModule1;
implementation
{$R *.dfm}
end.