-
Total de itens
9.657 -
Registro em
Tudo que Jhonas postou
-
nesse link tem um emulador para essa impressora http://www3.bematech.com.br/suporte/dwn_fisc_windows.asp veja tambem esse exemplo http://www.desenvolvedoresdaruma.com.br/dde/htmls/dde053_2013_inic_desenvolvimento_nao_fiscais.html abraço
-
veja esses links https://www.google.com.br/?gfe_rd=cr&ei=nchoVJnjK4mEqQXyvYDwDg&gws_rd=ssl#q=cupom+n%C3%A3o+fiscal+delphi abraço
-
exemplo JUSTIFICA TEXTO NO QUICK REPORT Observação: Lembrar de deixar a propriedade Autosize como false e Autostretch com true do Label. O parametro " S " é o texto do Label e o " iMax " é a quantidade de caracteres de cada linha. a fonte tem que ser " Courier New ". ======================================================================================= ou pode fazer uma adaptação desse código ( ao invés de usar um memo voce pode usar um qrmemo ) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, strutils; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // USAR FONTE COURRIER - DICA MODIFICADA // https://br.groups.yahoo.com/neo/groups/delphi-br/conversations/topics/97203 function Justificar(Texto:String; Tamanho : integer ):String; var Esq, Dir:String; Begin Result := Texto; if Pos(#13, Result)<>0 Then Exit; if Pos(' ', Result)=0 Then Exit; if Length(Result)>=Tamanho Then Exit; While (Length(Result)<Tamanho) do Begin While (Length(Result)<Tamanho) and (Pos(' ',Result)<>0) do Begin Esq := LeftStr(Result, Pos(' ', Result)-1); Dir := RightStr(Result, Length(Result)-Pos(' ', Result)); Result := Esq+#255+#255+Dir; End; While Pos(#255, Result)<>0 do Result[Pos(#255, Result)]:=' '; End; End; procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin for i:=0 to Memo1.Lines.Count-1 do begin if i <> Memo1.Lines.Count-1 then Memo2.Lines.append(Justificar(Memo1.Lines.Strings[i], 80)) else Memo2.Lines.append(Memo1.Lines.Strings[i]); end; end; end. abraço
-
sin e cos não aceita variaveis apenas numeros
pergunta respondeu ao guilherme.c.velosso de Jhonas em C, C++
tente com esse Manual http://man7.org/linux/man-pages/man3/cos.3.html abraço -
Mas infelizmente não tem essa propriedade no meu Band PageFooter, estou usando o Fast Report na Versão 4.10.1 !!!!!?? E o tutorial é sobre o Fortes Report! E não Fast Report. OK... vi errado !!! então veja esses links http://www.fast-report.com/en/documentation/frhelp/bands_in_fr.htm tem exemplo nesse Manual http://www.fast-report.com/documentation/UserMan/index.html?aggregate_functions.htm abraço
-
veja se isso resolve o seu problema ... deixei como comentario algumas linhas, mas faça o teste ai Program Pzim; Uses crt; {$APPTYPE CONSOLE} uses SysUtils; const tam=30; type cad = record nome: string; mat: integer; n1,n2,media: real; end; var aluno: array [1..tam] of cad; i,X:integer; op: real; n : Real ; s : String ; function RealStr ( r : Real ; d : Integer) : String; Var i,j : Integer ; aux : String ; s : String ; Begin // Parte Inteira i := trunc (r) ; str (i,s) ; r := r - i ; // Remove a parte inteira s := s + ' .' ; // Ponto da casa decimal // Casas Decimais j := 0 ; While r < 1 Do Begin r := r * 10 ; i := trunc (r) ; str (i,aux) ; s := s + aux ; r := r - i ; j := j + 1 ; if j = d Then break ; // Sai do Looping End ; RealStr := s ; End ; procedure Enter; begin writeln; writeln; write('Pressione [ENTER] Para Voltar Pro Menu.'); readln; end; procedure cadastro; var i: integer; begin i:=0; op:=1; while (i <= tam) and (op=1) do begin i:= i + 1; write('Nome: '); readln(aluno[i].nome); write('Matricula: '); readln(aluno[i].mat); write('Nota 1: '); readln(aluno[i].n1); write('Nota 2: '); readln(aluno[i].n2); aluno[i].media:= (aluno[i].n1 + aluno[i].n2)/2; write('Deseja cadastrar outro aluno? Aperte 1 para sim'); readln(op); end; Enter; end; procedure troca(p1,p2:integer); var aux:cad; begin aux := aluno[p1]; aluno[p1] := aluno[p2]; aluno[p2] := aux; end; procedure ordenar; var i, j: integer; aux: real; begin for i:= 1 to tam-1 do for j:= 1 to tam-i do if ( aluno[j].mat > aluno[j+1].mat ) then troca(j,j+1); end; procedure ObtemX; begin //clrscr; writeln('Informe o numero a ser pesquisado.'); write('X : '); readln(X); end; procedure sequencial; var encontrou:boolean; begin ObtemX; encontrou:= false; i:=1; while (i<=tam) and (not(encontrou)) do begin if (aluno[i].mat = X) then begin encontrou:= true; end else i:= i+1; end; if (encontrou = true) then begin writeln('O elemento ',X,'foi encontrado na posição',i); end else writeln('O elemento ',X,'não foi encontrado na lista.'); Enter; end; procedure binaria; var Meio, Inicio, Fim: integer; Achou: boolean; begin ordenar; ObtemX; Achou := false; Inicio := 1; Fim := tam; while (Inicio <= Fim) and (not(Achou)) do begin Meio := (Inicio + Fim) div 2; if aluno[Meio].mat = X then Achou := true else if aluno[Meio].mat > X then Fim := Meio - 1 else Inicio := Meio + 1; end; writeln; if Achou then writeln('Este elemento existe no conjunto na posicao ', Meio) else writeln('Este elemento não existe no conjunto !'); Enter; end; procedure busca; var op2:integer; begin //clrscr; writeln('1. Busca Binária'); writeln('2. Busca Sequencial'); write('Selecione uma opção: '); readln(op2); case op2 of 1: binaria; 2: sequencial; else writeln('outro'); Readln; end; end; procedure imprimir; begin for i := 1 to tam do begin writeln('===================='); writeln('Nome: ',aluno[i].nome); writeln('Matrícula: ', aluno[i].mat); n := aluno[i].n1; s := RealStr (n,5); writeln('Nota 1:', n:8:2); n := aluno[i].n2; s := RealStr (n,5); writeln('Nota 2:', n:8:2); n := aluno[i].media; s := RealStr (n,5); writeln('Media: ', n:8:2); end; Enter; end; procedure menu_principal; var op1:integer; begin repeat //clrscr; writeln('1. Cadastrar alunos'); writeln('2. Ordenar dados dos alunos'); writeln('3. Buscar alunos'); writeln('4. Imprimir dados de todos os alunos'); writeln('5. Sair'); write('Selecione uma opção: '); readln(op1); case op1 of 1: cadastro; 2:ordenar; 3:busca; 4:imprimir; end; until op1=5; writeln('FIM DO PROGRAMA'); for i := 1 to tam do begin writeln('===================='); writeln('Nome: ',aluno[i].nome); writeln('Matrícula: ', aluno[i].mat); n := aluno[i].n1; s := RealStr (n,5); writeln('Nota 1:', n:8:2); n := aluno[i].n2; s := RealStr (n,5); writeln('Nota 2:', n:8:2); n := aluno[i].media; s := RealStr (n,5); writeln('Media: ', n:8:2); end; Enter; end; Begin menu_principal; End. abraço
-
experimente usar a propriedade LinkBand do PageFooterBand coloque a banda do Detail linkada ao PageFooterBand veja tambem esse tutorial do Fast Report http://www.linhadecodigo.com.br/artigo/725/fortes-report-tutorial-parte-1.aspx abraço
-
veja esses links http://www.devmedia.com.br/alterando-a-senha-do-sysdba-no-firebird/17061 http://www.planetadelphi.com.br/artigo/79/firbird-1.5-edbexpress/ abraço
-
As vezes liga e logo desliga. isso acontece quando o processador super aquece ... e um sensor na placa desliga o micro para evitar a queima do processador ( embora o mesmo sintoma possa tambem ter outras causas ... tipo algum componente com suas caracteristicas já alteradas ) tire o processador de memoria, limpe os contatos do processador ( não são os contatos da placa ) delicadamente com um pano macio e alcool isopropilico troque a pasta termica que fica em contato com o processador e a ventoinha para facilitar a troca de calor abraço
-
veja nesse link http://www.zenvia.com.br/desenvolvedores/tutoriais-e-biblioteca/integracao-delphi-para-envio-de-sms/ outra forma de envio http://www.activexperts.com/activsms/howto/http/delphi/ abraço
-
ok... mas para efeito de conhecimento para outros colegas DEP significa ( Prevenção de Execução de Dados ) para Desativar a DEP Iniciar > executar > cmd no DOS digite >bcdedit /set { current } nx AlwaysOff abraço
-
isso pode ser devido a alguma configuração particular da maquina verifique a central de segurança e o firewall do windows ( faça um comparativo com as maquinas que estão funcionando o programa ) veja se não existe algum antivirus instalado na maquina ( dependendo da configuração pode bloquear ) veja tambem ( dependendo da versão do windows ) se precisa dar autorização para o usuario verique se o erro ocorre quando tenta a conexão ou do retorno do webservice abraço
-
veja se esse exemplo te ajuda http://rodrigojarouche.wordpress.com/2010/03/27/como-consumir-webservices-em-delphi/ abraço
-
[Problema] Comissão sobre valor Líquido
pergunta respondeu ao mauriciogaba de Jhonas em Delphi, Kylix
veja se é isso que esta querendo Program precodeseguro; {$APPTYPE CONSOLE} uses SysUtils;//, Crt; var vf, vp, tj, t, p, p1, i, c, co : Real; Const iof=(7.38/100); Begin //ClrScr; p1 := 0; WriteLn ('Calculo de IOF e parcelas com Juros '); WriteLn; Write ('Valor Liquido.: '); ReadLn (vp); Write ('Taxa de Juros.: '); ReadLn (tj); WriteLn ('IOF...........: 7.38 '); Write ('Parcelas......: '); ReadLn (p); Write ('Comissao......: '); ReadLn (co); t := tj/100; // Taxa em porcento co := vp*(co/100); // calcula o valor da comissão if p = 1 then // 1 parcela não tem juros vf := vp*(1+iof*1); p1 := vf / p; if p = 2 then // 2 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 3 then // 3 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 4 then // 4 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 5 then // 5 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 6 then // 6 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 7 then // 7 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 8 then // 8 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; if p = 9 then // 9 parcelas begin vf := vp*(1+iof*1); vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; vf := vf +(vf*tj)/100; p1 := vf / p; end; WriteLn; WriteLn ('Valor com juros:',vf:8:2); WriteLn ('Valor das parcelas:',p:2:0,'X',p1:8:2); WriteLn ('Comissao:',co:4:2); /// mostra o valor da comissão WriteLn ('Valor Total:',vf+co:4:2); /// mostra o valor total com a comissão ReadLn; End. abraço -
(Resolvido) [Ajuda] Centralizar form MDI filho no form MDI pai
pergunta respondeu ao maxley_gyn de Jhonas em Delphi, Kylix
exemplos http://www.macoratti.net/dica61.htm http://massuda.blogspot.com.br/2004/11/delphi-centralizar-janela-mdi-filha.html abraço -
Envio de e-mail para vários destinários ao mesmo tempo!
pergunta respondeu ao Kali de Jhonas em Delphi, Kylix
não tenho certeza, pois nunca usei, mas acho que é possivel usando as Tags <center> Mensagem </center> abraço -
[Problema] Comissão sobre valor Líquido
pergunta respondeu ao mauriciogaba de Jhonas em Delphi, Kylix
* Gostaria de fazer que o valor líquido variasse ao modo que altero a comissao. não entendi a sua duvida Valor Líquido(15% de comissão) = 1254.80 1254.80 / (15/100) = 188.22 // para saber o valor da comissão ( 15% ) embutido no valor total 1254.80 - 188.22 = 1066.58 // valor liquido sem a comissão IOF(7.38%) = 92.60 Valor Total = 1347.41 OBS: se voce altera o percentual da comissão sobre o valor liquido, somente o valor da comissão é que altera o valor total vai permancer sendo o mesmo exemplo Valor Líquido(20% de comissão ) = 1254.80 1254.80 / (20/100) = 250.96 // para saber o valor da comissão ( 20% ) embutido no valor total 1254.80 - 250.96 = 1003.84 // valor liquido sem a comissão IOF(7.38%) = 92.60 Valor Total = 1347.41 * Porém, Este valor líquido é o valor já adicionado a comissão. se o valor liquido é o valor já adicionado a comissão, como voce quer alterar o valor liquido ? o certo então seria, colocar o valor liquido sem a comissão e depois embutir o percentual da comissão ao valor liquido abraço -
VETORES EM VISUALG linguagem PORTUGOL
pergunta respondeu ao leonardoredaelli de Jhonas em Lógica de Programação
amigo, exercicios, são para aprimorar o seu conhecimento do que foi explicado em sala de aula caso esteja com muita dificuldade nesses exercicios veja https://www.google.com.br/?gfe_rd=cr&ei=bxA8VPOHIdKIqQXl54DwCA&gws_rd=ssl#q=exercicios+resolvidos+visualg+vetores abraço -
essas apostilas irão ajuda-lo na sua duvida nessa apostila a partir da pagina 39 http://www.tvprudente.com.br/apostilas/Banco_de_Dados/Banco_de_dados_V.pdf nessa outra a partir da pagina 65 http://warmboot.com.br/fb/imgdocs/Apostila_IBFB.pdf nessa outra veja a partir de Joins http://www.josevalter.com.br/download/banco_dados/Apostila%20Interbase%206.0.pdf abraço
-
Envio de e-mail para vários destinários ao mesmo tempo!
pergunta respondeu ao Kali de Jhonas em Delphi, Kylix
basta tirar os espaços do memo IdMessage.Recipients.EMailAddresses := trim(Memo2.Lines.Text); abraço -
procedure TForm1.Buscar(WB: TWebBrowser; Text: string); na verdade, não teria a necessidade do Text, so deixei pois fazia parte de outro código que uso onde procuro por um texto especifico dentro do script poderia ser assim procedure TForm1.Buscar(WB: TWebBrowser); o código dentro da procedure é para pegar o script da pagina e jogar no memo.... por isso o conteudo do memo fica grande // procurar e substituir no arquivo a string para ficar mais evidente FindReplace('loginForm.username','loginForm.USERNAME',memo1); esse comando é para procurar a string que eu quero dentro do script ( trocando loginForm.username por loginForm.USERNAME) dessa forma tenho certeza que encontrou o que procuro id=25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01.loginForm.USERNAME // pegar o numero da linha do memo onde foi encontrado a string LineNumber:=SendMessage(Memo1.Handle,EM_LINEFROMCHAR,memo1.Selstart,0); uma vez que tenha sido encontrado a string que eu quero, preciso pegar o numero da linha onde a string esta para extrair a informação dessa linha ( LineNumber ) // jogar para um edit ou variavel o conteudo que interessa Edit1.Text := COPY(Memo1.Lines.Strings[LineNumber],4,pos('login',Memo1.Lines.Strings[LineNumber])-5); então somente copio a parte que interessa dessa linha, usando o comando COPY porém no edit não tem nenhum valor fica em branco veja se voce esta pegando a informação do memo que voce definiu Edit1.Text := COPY(Memo1.Lines.Strings[LineNumber],4,pos('login',Memo1.Lines.Strings[LineNumber])-5); abraço
-
pelo que percebi, voce esta mesclando os códigos dos exemplos no seu projeto se voce rodar o código como te passei não vai ocorrer nenhum erro veja se não esta esquecendo de declarar alguma uses uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, StrUtils, MSHTML; Linha: procedure TForm1.Buscar(WB: TWebBrowser; Text: string); Erro: [Error] Unit1.pas(127): ';' expected but '.' found erro: ponto e virgula esperado mas ponto foi encontrado no minimo erro de digitação Linha: if Assigned(WB.Document) then Erro: [Error] Unit1.pas(145): Undeclared identifier: 'WB' erro: identificador "WB' não declarado type TForm1 = class(TForm) Button1: TButton; WebBrowser1: TWebBrowser; Edit1: TEdit; Memo1: TMemo; Button2: TButton; procedure Buscar(WB: TWebBrowser; Text: string); procedure Button1Click(Sender: TObject); a procedure deve ser declarada Linha: theForm := GetFormByNumber(document, 0); Erro: [Error] Unit1.pas(275): Undeclared identifier: 'GetFormByNumber' erro: identificador 'GetFormByNumber' não declarado function GetFormByNumber(document: IHTMLDocument2; formNumber: integer): IHTMLFormElement; var forms: IHTMLElementCollection; begin forms := document.Forms as IHTMLElementCollection; if formNumber < forms.Length then result := forms.Item(formNumber,'') as IHTMLFormElement else result := nil; end; a função tem que estar no código, acima da chamada da função theForm := GetFormByNumber(document, 0); OBS: se tiver duvidas quanto ao código, execute o codigo separadamente do seu projeto para ver como fuciona abraço
-
procedure TForm1.OnDocumentComplete(Sender: TObject;const pDisp: IDispatch;var URL: OleVariant); se voce não define nada, o código desse evento será executado todas as vezes que uma pagina tiver sido carregada repare no código que voce postou .... voce pode determinar qual parte do código que esta no evento sera executado OBS: o código que voce usou em um botão para preencher os campos, pode ser colocado nesse evento ... ele será executado assim que a pagina tiver sido carregada completamente, mas é bom definir em qual pagina ele será executado. veja alguns exemplos de uso: http://stackoverflow.com/questions/17939813/webbrowser1documentcomplete-and-webbrowser1navigatecomplete2 https://beta.groups.yahoo.com/neo/groups/delphi-webbrowser/conversations/topics/1153 http://www.delphifaq.com/faq/delphi/network/f264.shtml abraço
-
esta seria uma maneira de fazer isso unit UPegarHTML; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, StrUtils, MSHTML; type TForm1 = class(TForm) Button1: TButton; WebBrowser1: TWebBrowser; Edit1: TEdit; Memo1: TMemo; Button2: TButton; procedure Buscar(WB: TWebBrowser; Text: string); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin WebBrowser1.Silent := true; WebBrowser1.Navigate('https://carrinho.americanas.com.br/CustomerWeb/pages/LoginMinhaConta'); end; Procedure FindReplace (const Enc, subs: String; Var Texto:TMemo); Var i, Posicao: Integer; Linha: string; Begin For i:= 0 to Texto.Lines.count - 1 do begin Linha := Texto. Lines[i]; Repeat Posicao:=Pos(Enc,Linha); If Posicao > 0 then Begin Delete(Linha,Posicao,Length(Enc)); Insert(Subs,Linha,Posicao); Texto.Lines[i]:=Linha; end; until Posicao = 0; end; end; procedure TForm1.Buscar(WB: TWebBrowser; Text: string); var tr: IHTMLTxtRange; documento: IHTMLDocument2; index: OleVariant; frame_dispatch: IDispatch; framewnd: IHTMLWindow2; framedoc: IHTMLDocument2; LineNumber : longint; begin documento := WebBrowser1.Document as IHTMLDocument2; index := 0; frame_dispatch := documento.Script; if Assigned(frame_dispatch) then begin framewnd := frame_dispatch as IHTMLWindow2; framedoc := framewnd.document; framedoc.Get_body.Get_outerText; if Assigned(WB.Document) then begin // pegar o script da pagina tr := ((framedoc AS IHTMLDocument2).body AS IHTMLBodyElement).createTextRange; // limpar o memo memo1.Clear; // jogar para o memo o conteudo da pagina memo1.Lines.Append(tr.htmlText); // salvar no hd em um arquivo txt o conteudo do memo memo1.Lines.SaveToFile('c:\memo1.txt'); // procurar e substituir no arquivo a string para ficar mais evidente FindReplace('loginForm.username','loginForm.USERNAME',memo1); // pegar o numero da linha do memo onde foi encontrado a string LineNumber:=SendMessage(Memo1.Handle,EM_LINEFROMCHAR,memo1.Selstart,0); // jogar para um edit ou variavel o conteudo que interessa Edit1.Text := COPY(Memo1.Lines.Strings[LineNumber],4,pos('login',Memo1.Lines.Strings[LineNumber])-5); end; end; end; procedure TForm1.Button2Click(Sender: TObject); begin Buscar(WebBrowser1,'pass'); end; end. o resultado no Memo id=25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01.loginForm.USERNAME class="mail required email" tabIndex=1 maxLength=50 name=25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01:username __satellite__="4" jQuery15205411405278290993="7" crmWA_forminfo="e-mail|"> <SPAN style="DISPLAY: none" class=icon-val> </SPAN> </LABEL> <DIV class=bx-erro sizcache="0" sizset="54"><SPAN id=username.feedback class="feedbacklabelERROR feedback"></SPAN></DIV> <LI class=it-senha sizcache="4" sizset="260"><LABEL style="DISPLAY: block" sizcache="0" sizset="55"><SPAN class="lbl cadast">senha na americanas.com:</SPAN> <INPUT id=25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01.loginForm.password class=pasw tabIndex=2 value="" maxLength=16 type=password name=25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01:password __satellite__="3" o valor no edit seria 25a34fd7-c00a-4b7a-90a2-f4eaf5e00b01 abraço
-
veja nesse link ... tem muitas informações sobre o webbrowser http://www.cryer.co.uk/brian/delphi/twebbrowser/twebbrowser_oleobject.htm http://delphilando.wordpress.com/2012/10/20/utilizando-oleobject-do-web-browser/ OBS: fiz uns testes aqui... esse problema acontece ( não mostra as bolinhas no campo senha ) quando o comando é dado ( preencher o campo ) e a pagina ainda não foi totalmente carregada experimente colocar o código para preenchimento dos campos no evento OnDocumentComplete do webbrowser abraço