//---------------------------------------------------------------------------
#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;
}