[ sojic @ 04.01.2006. 12:40 ] @
U Delphi-ju ubacio sam TBrowser (sad sam stavio Mozila). Imam stranu sa formulare. TAB, ENTER ne rade. Kad udrim TAB fokusiram se na drugi objekat koji imam u formi, a ne u sledeće polje na WEB strani.

Dali mogu da "punim" TBrowser programski (da ne učitujem fajl, nego da u delphi generišem kod i "napunim" TBrowser).

[ Passwd @ 04.01.2006. 16:52 ] @
Mozda nisam najbolje shvatio sta zelis ali formulare mozes popunit na 2 osnovna nacina:

1.Uz koristenje Indy komponenti, preciznije IdHttp
Evo ti mali primjer:
Code:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdMultipartFormData, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
M: TIdMultiPartFormDataStream;
begin
  M := TIdMultiPartFormDataStream.Create;
  M.AddFormField('username', 'neki_parametar');
  M.AddFormField('email', 'neki_parametar');
  M.AddFormField('submit', 'neki_parametar');

    IdHTTP1.Post('http://StranicaKojaSadrziGoreNavedeneFormulare.com', M);

  M.Free;

end;


end.


Ovo username, password i submit su imena objekata na stranici..


2.Uz pomoc TWebBrowser kontrole, i imas ove dvije JaHvram-ove funkcije:
Code:

 function FillForm(WebBrowser: TWebBrowser; FieldName: String; Value: String): Boolean;
 var
   I, J: Integer;
   FormItem: Variant;
 begin
   Result := False;
   for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
   begin
     FormItem := WebBrowser.OleObject.Document.forms.Item(I);
     for J := 0 to FormItem.Length - 1 do
     begin
       if FormItem.Item(J).Name = FieldName then
       begin
         FormItem.Item(J).Value := Value;
         Result := True;
         Exit;
       end;
     end;
   end;
 end;




function SubmitForm(WebBrowser: TWebBrowser; FieldString:string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
Result := False;
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
  FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      if (UpperCase(FormItem.Item(j).Type) = FieldString) then
      begin
      FormItem.Item(j).focus;
      keybd_event( Ord(' '), MapvirtualKey( Ord(' '), 0), 0, 0 );
      keybd_event( Ord(' '), MapvirtualKey( Ord(' '), 0), KEYEVENTF_KEYUP, 0 );
      Result := True;
      end;
    end;
  end;

end;


Jedna popunjava formu, druga submituje...
[ sojic @ 04.01.2006. 18:31 ] @
Nisi baš dobro razumeo. Treba da user popunuje formulare. Ne treba da se učituju od bazu ili sl. podatke, nego treba da korisnik unasa.

Radim popunjivanje prazne forulare, pa da ne popunjuju na mašinu za pisanje, nego na kompjuter, tako da popunjene podatke kasnije se štampaju.

E sad, da ne dajem 50 fajla, pa u zavisnost sta treba da popunjuje da korisnik trazi po direktoriumu "formular1.html", da napravim neki jednostavni program u delphi i da u njega učitam TBrowser.

Sve je OK, jedino kad treba da se popunuje textarea (html kontrola), ne radi enter. Isto ne mogu da se "šetam" po polja u HTML-u.

Nadam se da sam sad mnogo jasniji.
[ sojic @ 06.01.2006. 00:17 ] @
Pokusavam da izvedem nesto u stilu ove dve funkcije, ali dobijem:

Code:

Project Formulari.exe raised exception class EOleSysError with message
'Library not registred'. Process stopped. Use Step or Run to continue.


Ovo se desava u prvom pristupu do OleObject (valjda).
[ sojic @ 06.01.2006. 00:39 ] @
Mislim da sam resio problem. Problem je sto sam koristio Mozilla ActiveX komponentu. Kad sam stavio standardnu (IE) TWebBrowser komponentu radi.
[ sojic @ 12.01.2006. 11:54 ] @
Sad je skoro sve OK. Koristim TWebBrowser (IE), sve je kao sto sam ocekivao sem "textarea" i enter.

Znaci, kad imam "textarea" u HTML-u, ne prihvata enter. Znaci, ne mogu preci u novi red.

Resenje?