Delphi 中WebBrowser控件详解实例
来源:互联网 发布:win10 更改网络类型 编辑:程序博客网 时间:2024/05/20 17:24
很久都没有原创了,前几天帮朋友做了个网址发布程序,主要应用到了WebBrowser控件。
今天主要给大家演示一下过程,让大家学习一下Delphi工具。
WebBrowser功能:
1。自动加载网页
2。去除WebBrowser滚动条
3。WebBrowser自身打开页面
4。禁止右键
1。首先,新建一个FROM窗体:
2。加入一个WEBBROWSER控件
3。调整后如下:
4.这样一个webbrowser就完成了,下一步我们来让程序打开后自动加载一个网页。
核心代码:WebBrowser1.Navigate('http://v.28.la');
双击窗体灰色处,对窗体进行初始化,在代码窗口中输入(Begin 与 End间输入核心代码):
procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://v.28.la'); //窗体初始化完成WEBBROWSER加载一个网页
end;
5。下面我们来实现禁止WEBBROWSER控件的滚动条功能:
核心代码:WebBrowser1.oleobject.Document.body.Scroll:= ‘no’;
利用这个代码去掉滚动条的前提是webbrowser中必须有打开的网页,也就是在网页加载完
完毕后再去掉滚动条。所以首先要判断页面是否加载完毕,如果加载完毕,就执行上面的语句
去掉滚动条。这时就要引入一个按扭控件来触发程序
加入SPEEDBUTTEN
调整形后:
好了,现在可以实现禁止滚动条的功能了:
第一步:在WebBrowser1DocumentComplete事件中置一个标志tag:=1(代表加载完毕)
单击WEBBROWSER控件,在WebBrowser属性
的EVENS事件中找到WebBrowser1DocumentComplete (双击)
然后在代码窗口中输入:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
tag:=1; //去掉Webbrowser1滚动条的标志
end;
对SpeedButten控件操作:(双击onClick)
加入如下代码:
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
begin
tag := 0; //去掉Webbrowser1滚动条的标志
WebBrowser1.Navigate2(’http://www.baidu.com’);
while(tag=0) do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll := ‘no’;
end;
注意:使用前必须在uses中加入mshtml;
这样WebBrowser就禁止了滚动条。主要应用到了IHTMLDocument2。
6。
让Webbrowser中的链接点击时在自身窗口打开:(单击WebBrowser控件,属性中的
EVENS事件,双击NewWindow2)
代码窗口中输入:
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
begin
// 將新視窗在自身開啟
ppdisp := webBrowser1.Application;
end;
7。最后是禁用WebBrowser中的右键功能,放一个ApplicationEvents控件:
ApplicationEvents控件属性Evens事件中双击Onmessage:
在代码窗口中输入:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = wm_rbuttondown) or (Msg.message = wm_rbuttonup) or
(msg.message = WM_RBUTTONDBLCLK) then
begin
if IsChild(Webbrowser1.Handle, Msg.hwnd) then
Handled := true;
end;
end;
到此完成对程序的制作,调试
去滚动条后:
--------------------------------------------------------
===================================
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw,mshtml, AppEvnts;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
ApplicationEvents1: TApplicationEvents;
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Button1Click(Sender: TObject);
procedure ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
tag:=1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a: IHTMLDocument2;
begin
tag := 0;
WebBrowser1.Navigate('http://www.baidu.com');
while(tag=0) do Application.ProcessMessages;
WebBrowser1.oleobject.Document.body.Scroll := 'no';
a :=WebBrowser1.Document as IHTMLDocument2;
a.Get_ParentWindow.ScrollBy(0,20);
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.message = wm_rbuttondown) or (Msg.message = wm_rbuttonup) or
(msg.message = WM_RBUTTONDBLCLK) then
begin
if IsChild(Webbrowser1.Handle, Msg.hwnd) then
Handled := true;
end;
end;
end.
=================================================================================
delphi 对网页自动操作
uses mshtml,IdHTTP;
procedure TFrmmain.Act_BeginWrite;
var
myitem:Olevariant;
i:integer;
tmp:string;
TemName:String;
TemIniFile:TIniFile;
begin
Try
myitem := WebBrowser1.Document;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='TEXT' then //文本框
begin
TemName:=Act_GetName+RANDOMStr(1);
if Uppercase(myitem.all.item(i).name)='USERNAME' then
begin
myitem.all.item(i).focus;
myitem.all.item(i).value:=TemName;
TemIniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'name.ini');
TemIniFile.WriteString(FormatDateTime('YYYY-MM-DD HH:mm:ss',now),'Name',TemName);
TemIniFile.Free;
end;
end;
end;
end;
keybd_event(VK_SPACE,MapVirtualKey(VK_SPACE,0),0,0);
keybd_event(VK_SPACE,MapVirtualKey(VK_SPACE,0),KEYEVENTF_KEYUP,0);
keybd_event(VK_TAB,MapVirtualKey(VK_TAB,0),0,0);
keybd_event(VK_TAB,MapVirtualKey(VK_TAB,0),KEYEVENTF_KEYUP,0);
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
IF Uppercase(myitem.all.item(i).type)='RADIO' then //选择一个
begin
If Uppercase(myitem.all.item(i).name)='RADIOBUTTON' then
begin
myitem.all.item(i).checked :=true;
if FYX_GetRanDom(1)= 1 then
break;
end;
end;
end;
end;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'SELECT' then
begin
if Uppercase(myitem.all.item(i).id)='DRPPID' then //文本框
begin
if Uppercase(myitem.all.item(i).name)='DRPPID' then
begin
if myitem.all.item(i).tagName = 'OPTION' then
myitem.all.item(i).selected:='SELECTED';
end;
end;
end;
end;
sleep(1000);
for i:= 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='TEXT' then //文本框
begin
If Uppercase(myitem.all.item(i).name)='USERNICK' then
begin
myitem.all.item(i).value:=Act_GetName;
end;
end;
end;
end;
for i:=0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='TEXT' then //文本框
begin
If Uppercase(myitem.all.item(i).name)='TXTCHECKNUM' then
myitem.all.item(i).value:=FYX_GetCodeID;
end;
end;
end;
for i:=0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
IF Uppercase(myitem.all.item(i).type)='PASSWORD' then //文本框
begin
If Uppercase(myitem.all.item(i).name)='PASSWORD1' then
myitem.all.item(i).value:=1234567;
end;
end;
end;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
IF Uppercase(myitem.all.item(i).type)='PASSWORD' then //文本框
begin
If Uppercase(myitem.all.item(i).name)='PASSWORD_CNF' then
myitem.all.item(i).value:=1234567;
end;
end;
end;
((WebBrowser1.Document as IHTMLDocument2).all.item('selYear', 0) as
IHTMLSelectElement).selectedIndex := FYX_GetRanDomYear(35);
((WebBrowser1.Document as IHTMLDocument2).all.item('selMonth', 0) as
IHTMLSelectElement).selectedIndex := FYX_GetRanDom(13);
((WebBrowser1.Document as IHTMLDocument2).all.item('selDay', 0) as
IHTMLSelectElement).selectedIndex := FYX_GetRanDom(30);
((WebBrowser1.Document as IHTMLDocument2).all.item('drpPid', 0) as
IHTMLSelectElement).selectedIndex := FYX_GetRanDom(30);
tmp := 'GetCity(''drpPid'',''drpCity'')';
WebBrowser1.OleObject.Document.parentWindow.execScript(tmp,'JavaScript');
((WebBrowser1.Document as IHTMLDocument2).all.item('drpCity', 0) as
IHTMLSelectElement).selectedIndex := FYX_GetRanDom(5)-1;
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='CHECKBOX' then //Checkbox
begin
If Uppercase(myitem.all.item(i).name)='CHKAGREEMENT' then
myitem.all.item(i).checked :=true;
end;
end;
end;
//showmessage('OK');
for i := 0 to myitem.all.length - 1 do
begin
if myitem.all.item(i).tagName = 'INPUT' then
begin
if Uppercase(myitem.all.item(i).type)='SUBMIT' then //找按钮点击
begin
myitem.all.item(i).click;
end;
end;
end; //Tagname = Input
Except
end;
TemNum:=TemNum-1;
EdNum.Text:=IntToStr(TemNum);
SumNum:=SumNum+1;
if TemNum <= 0 then
Close;
Timer4.Enabled:=True;
end;
-------------------------------------------------------------
//获取源码
function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
var
ps: IPersistStreamInit;
ss: TStringStream;
sa: IStream;
s: string;
begin
ps := WebBrowser.Document as IPersistStreamInit;
s := '';
ss := TStringStream.Create(s);
try
sa := TStreamAdapter.Create(ss, soReference) as IStream;
Result := Succeeded(ps.Save(sa, True));
if Result then ACode.Add(ss.Datastring);
finally
ss.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.Clear;
WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
end;
- Delphi 中WebBrowser控件详解实例
- Delphi 中WebBrowser控件详解实例
- Delphi 中WebBrowser控件详解实例 转
- Delphi 中WebBrowser控件详解实例 转
- Delphi 中WebBrowser控件详解实例 转
- Delphi中代替WebBrowser控件的第三方控件
- webbrowser delphi 事件详解
- webbrowser delphi 事件详解
- DELPHI 中让嵌入窗体的 WebBrowser 控件无边框
- DELPHI中访问WEBBROWSER控件中的HTML元素
- Delphi中WebBrowser控件的3个bug及解决方案
- <总结>delphi WebBrowser控件的使用中出现的bug
- delphi中Webbrowser
- delphi中Webbrowser
- Delphi WebBrowser控件的使用
- WebBrowser控件使用详解
- VB Webbrowser控件详解
- WebBrowser控件使用详解
- delphi 用webbrowser控件登录和显示网页
- 张孝详javascript讲座笔记二
- 这些人是从哪里得到这些(非原创)想法的
- 反转单向链表
- 一个不错的CSS样式按钮
- Delphi 中WebBrowser控件详解实例
- HTTP协议详解
- 信息化失败的根源之一 甲乙双方目标不一致
- 微软,Google面试题 (1) —— 把二叉排序树转变成排序的双向链表
- GridView中DataKeyNames的应用小结
- LINUX下PHP对命名管道操作权限问题解决小记
- lianxi
- 日本的周刊称他们的总理"傻瓜"
- 2010年3月重新开启博客