Avatar billede nca Juniormester
31. oktober 2007 - 20:24 Der er 2 kommentarer og
2 løsninger

Aflæse værdi fra webside i TWebbrowser

Jeg har lavet en hjemmeside, som generer nogle værdier i en inputboks, som jeg altså kender ID'en af.
Denne webside viser jeg i en TWebbrowser.
Er det muligt fra Delphiprogrammet at aflæse den pågældede værdi fra websiden?
Avatar billede pidgeot Nybegynder
03. november 2007 - 00:15 #1
Det er det faktisk - hvis du typecaster WebBrowser.Document til enten IHTMLDocument2 eller IHTMLDocument3 kan du få fat på dine elementer. 3'eren giver dig, så vidt jeg kan se, nærmest kontrol som med JavaScript, så den var måske et godt valg.

Andre alternativer går på at hive HTML'en ud og parse den, hvis det vel og mærke er den value felterne har når siden loades.
Avatar billede nca Juniormester
03. november 2007 - 09:36 #2
Hej pidgeot
Jeg fandt hjælp på denne side:
http://www.cryer.co.uk/brian/delphi/twebbrowser/read_write_form_elements.htm

og her er hvad jeg har brugt af kode (måske andre kan få glæde af det)

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;


function GetFieldValue(fromForm: IHTMLFormElement;
    const fieldName: string): string;
var
  field: IHTMLElement;
  inputField: IHTMLInputElement;
  selectField: IHTMLSelectElement;
  textField: IHTMLTextAreaElement;
begin
  field := fromForm.Item(fieldName,'') as IHTMLElement;
  if not Assigned(field) then
    result := ''
  else
  begin
    if field.tagName = 'INPUT' then
    begin
      inputField := field as IHTMLInputElement;
      result := inputField.value
    end
    else if field.tagName = 'SELECT' then
    begin
      selectField := field as IHTMLSelectElement;
      result := selectField.value
    end
    else if field.tagName = 'TEXTAREA' then
    begin
      textField := field as IHTMLTextAreaElement;
      result := textField.value;
    end;
  end
end;
and to call it:

procedure TMyForm.Button1Click(Sender: TObject);
var
  document: IHTMLDocument2;
  theForm: IHTMLFormElement;
  index: integer;
begin
  document := TWebBrowser.Document as IHTMLDocument2;
  theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0);
  ShowMessage('Field "name" has value ' + GetFieldValue(theForm,'name'));

Smid et svar, hvis du vil ha' nogle point, ellers ta'r jeg dem selv ;-)
Avatar billede pidgeot Nybegynder
03. november 2007 - 11:04 #3
Det kan jeg da godt gøre, så ^-)
Avatar billede nca Juniormester
03. november 2007 - 14:03 #4
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester