• 8288阅读
  • 1回复

用Delphi和C++ Builder设置WEB页中的元素值 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
下面是Delphi中的实现:(页面URL:http://xchinux.kmip.net/article/post.php

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
  Doc : IHTMLDocument2;
  inputAuthor : IHTMLInputTextElement;
  inputEmail : IHTMLInputTextElement;
  inputSubject: IHTMLInputTextElement;
  inputContent: IHTMLTextAreaElement;
begin
  ComboBox1.Text := URL;
  if ComboBox1.Text = 'http://xchinux.kmip.net/article/post.php' then
  begin
      Doc := IHTMLDocument2(WebBrowser1.Document);
      if nil <> Doc then
      begin
          inputAuthor := Doc.all.Item('author', 0) as IHTMLInputTextElement;
          inputEmail := Doc.all.Item('email', 0) as IHTMLInputTextElement;
          inputSubject := Doc.all.Item('subject', 0) as IHTMLInputTextElement;
          inputContent := Doc.all.Item('content', 0) as IHTMLTextAreaElement;
          inputAuthor.value := EditAuthor.Text;
          inputEmail.value := EditEmail.Text;
          inputSubject.value := EditSubject.Text;
          inputContent.value := MemoContent.Text;
      end;
  end;
end;

procedure TForm1.ButtonSubmitClick(Sender: TObject);
var
  Doc : IHTMLDocument2;
  formPost : IHTMLFormElement;
begin
  Doc := IHTMLDocument2(WebBrowser1.Document);
  if nil <> Doc then
  begin
    formPost := Doc.all.Item('post', 0) as IHTMLFormElement;
    formPost.submit;
  end;
end;
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 1楼 发表于: 2005-07-30
这是C++ Builder代码
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "mshtml.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  ComboBox1->Text = "http://xchinux.kmip.net/article/post.php";
  LabeledEditAuthor->Text = "XChinux";
  LabeledEditEmail->Text = "hakusan@sohu.com";
  LabeledEditSubject->Text = "测试标题";
  MemoContent->Text = "测试内容这是";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  CppWebBrowser1->Navigate(WideString(ComboBox1->Text));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
  LPDISPATCH pDisp, Variant *URL)
{
  ComboBox1->Text = AnsiString(*URL);
  if (ComboBox1->Text == "http://xchinux.kmip.net/article/post.php")
  {
      SetElement();
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SetElement()
{
  IHTMLDocument2 *pHTMLDoc = NULL;
  LPDISPATCH pDisp = static_cast<LPDISPATCH>(CppWebBrowser1->Document);
  if (pDisp == NULL) return;
  if (false == SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2, (void **)&pHTMLDoc)))
      return;

  pDisp->Release();
  IHTMLElementCollection *pElementColl;
  if(pHTMLDoc->get_forms(&pElementColl) != S_OK)
  {
      pHTMLDoc->Release();
      pDisp->Release();
      pElementColl->Release();
      return;
  }
  // get Form element first
  pDisp->Release();
  TVariant vName = "post"; // form's name
  TVariant vIndex = 0;
  if (pElementColl->item(vName, vIndex, &pDisp) != S_OK)
  {
      pHTMLDoc->Release();
      pDisp->Release();
      pElementColl->Release();
      return;
  }

  pElementColl->Release();
  IHTMLFormElement *pFormElem=NULL;

  if (pDisp == NULL) return;
  if (false == SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,(LPVOID*)&pFormElem)))
  {
      pFormElem->Release();
      pDisp->Release();
      return;
  }
  pDisp->Release();
  LPDISPATCH pAuthor = NULL;
  LPDISPATCH pEmail   = NULL;
  LPDISPATCH pSubject = NULL;
  LPDISPATCH pContent = NULL;

  TVariant vInputTextAuthor = "author";
  TVariant vInputTextEmail   = "email";
  TVariant vInputTextSubject = "subject";
  TVariant vTextAreaContent = "content";
  TVariant vEmpty = 0;

  if ((pFormElem->item(vInputTextAuthor, vEmpty, &pAuthor) != S_OK)
      || (pFormElem->item(vInputTextEmail, vEmpty, &pEmail) != S_OK)
      || (pFormElem->item(vInputTextSubject, vEmpty, &pSubject) != S_OK)
      || (pFormElem->item(vTextAreaContent, vEmpty, &pContent) != S_OK))
  {
      pFormElem->Release();
      if (pDisp) pDisp->Release();
      if (pAuthor) pAuthor->Release();
      if (pEmail) pEmail->Release();
      if (pSubject) pSubject->Release();
      if (pContent) pContent->Release();
  }

  IHTMLInputTextElement *pAuthorElem = NULL;
  IHTMLInputTextElement *pEmailElem   = NULL;
  IHTMLInputTextElement *pSubjectElem = NULL;
  IHTMLTextAreaElement *pContentElem = NULL;
  if (!pDisp || !pAuthor || !pEmail || !pSubject || !pContent) return;
  // get interface
  if (!SUCCEEDED(pAuthor->QueryInterface(IID_IHTMLInputTextElement, (void **)&pAuthorElem))
      || !SUCCEEDED(pEmail->QueryInterface(IID_IHTMLInputTextElement, (void **)&pEmailElem))
      || !SUCCEEDED(pSubject->QueryInterface(IID_IHTMLInputTextElement, (void **)&pSubjectElem))
      || !SUCCEEDED(pContent->QueryInterface(IID_IHTMLTextAreaElement, (void **)&pContentElem)))
  {
      if (pAuthorElem) pAuthorElem->Release();
      if (pEmailElem) pEmailElem->Release();
      if (pSubjectElem) pSubjectElem->Release();
      if (pContentElem) pContentElem->Release();
      if (pDisp) pDisp->Release();
      return;
  }
  // set the values
  WideString wstrAuthor = LabeledEditAuthor->Text;
  WideString wstrEmail = LabeledEditEmail->Text;
  WideString wstrSubject = LabeledEditSubject->Text;
  WideString wstrContent = MemoContent->Text;
  pAuthorElem->put_value(wstrAuthor.c_bstr());
  pEmailElem->put_value(wstrEmail.c_bstr());
  pSubjectElem->put_value(wstrSubject.c_bstr());
  pContentElem->put_value(wstrContent.c_bstr());

  // submit the form data
  pFormElem->submit();

  pAuthorElem->Release();
  pEmailElem->Release();
  pSubjectElem->Release();
  pContent->Release();
  pDisp->Release();
  pFormElem->Release();

  return;
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个