IE Webbrowser ActiveX 不支持热键?300分求解!!(300分)

H

heman

Unregistered / Unconfirmed
GUEST, unregistred user!
我的软件form上有一个tab control, 分两页, 第一页是memo, 第二页是IE的WebBrowser,
当选择第二页后,memo设为visible=false, 此时显示webbrowser并且读入html文件,
完成后,可以使用右键菜单进行copy,但是用热键Ctrl-C 却不起作用, 另外Ctrl-A,
Ctrl-F全部不起作用乐,这是为何,如何解决,俺试了好多办法都解决不了,
那位高手拔刀相助,300分供手送上,谢谢!
 
我的主页上有我写的TWebBrowser编程的详细资料,不清楚的可以问我。
eagleboost.myrice.com
 
看看我回答的这个贴子吧,答案全在里面了,并且还有解决方法,
注意,这是AvtiveX的"通病"。
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=284904

希望你说的"俺试了好多办法都解决不了"还没有包含上面的方法 :)
 
谢谢你的回复,看了你的贴子后,马上去买了一张bcb 5.0,想在bcb 5.0下编译来解决问题,
但是不知为什么,一运行bcb就死机,有时能够进入界面乐,但是一编译又死机,甚至打开
文件夹都死寂,我的配置是cyrix 166+, 256m内存,S3 3d Virge 2m
显卡,现在真是后悔选了bcb, 曾经用过bcb 4.0,结果编译出现n条错误,而bcb3.0一点问
题都没有。唉...
我明后两天会试试您的程序,到时候在给分
 
CathyEagle, 今天刚刚能联接到你的页面,找到了需要的东西,等明天我试试。
 
谁能把CathyEagle主页上的Delphi程序翻译成bcb?
6、使WebBrowser获得焦点

  TWebBrowser非常特殊,它从父类继承来的SetFocus方法并不能使得它所包含的文档获得焦点,从而不能立即使用Internet Explorer本身具有得快捷键,解决方法如下:

  procedure TForm1.SetFocusToDoc;
  begin
   if WebBrowser1.Document <> nil then
    with WebBrowser1.Application as IOleobject do
     DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);
  end

我不太懂delphi,不清楚with as do 中的as是什么意思。
 
老兄,你找错地方了,那段程序没用的:

这个问题的“终极解决之道”:

1.在包含webbrowser的form中加入:
initialization
OleInitialize(nil);
finalization
OleUninitialize;

如果你用Delphi5/BCB5,问题就已经解决了,不需要再作任何工作,
你现在用BCB4?不知道能否解决,请试验一下。

2.如果不行,(例如Delphi 4)

再使用我那个贴子中的方法或者使用EmbeddedWB中的方法
后者内容如下,但经过我的修改,才能在Form中使用,

(CathyEagle主页上也是用的这一段,但是从EmbeddedWB.pas中copy的,不能直接使用):
procedure TForm1.IEMessageHandler(var Msg: TMsg
var Handled: Boolean);
{ fixes the malfunction of some keys within webbrowser control }
const
StdKeys = [VK_TAB, VK_RETURN]
{ standard keys }
ExtKeys = [VK_DELETE, VK_BACK, VK_LEFT, VK_RIGHT]
{ extended keys }
fExtended = $01000000
{ extended key flag }
begin
Handled := False;
with Msg do
if ((Message >= WM_KEYFIRST) and (Message <= WM_KEYLAST)) and
((wParam in StdKeys) or {$IFDEF VER120}(GetKeyState(VK_CONTROL) < 0) or {$ENDIF}
(wParam in ExtKeys) and ((lParam and fExtended) = fExtended)) then
try
if IsChild(WebBrowser1.Handle, hWnd) then
{ handles all browser related messages }
begin
with webbrowser1.Application as IOleInPlaceActiveObject do
Handled := TranslateAccelerator(Msg) = S_OK;
if not Handled then
begin
Handled := True;
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
except end;
end
// IEMessageHandler

使用方法与我那篇贴子中方法一样,不再贴了。
注意,第二种方法同样需要添加第一种方法的语句。

 
网页内容复制的热键问题这样解决:(BCB5.0+Win98)
在窗体的FormCreate事件中加入一句
OleInitialize(NULL);
在窗体的FormClose事件中加入一句
OleUninitialize;
这样就行了.
Ctrl-C和Ctrl-V都可以起作用.
但我也有问题:
当我在Webbrowser内的输入框中输入F或E时,输入框中并不显示出来,
而我用Alt-F,Alt-E等设置的热键菜单却弹了出来,回车键也失效,
真不知道怎么回事?
 
提交页面还是我的第一种方法简单,只不过需要Sndkey32.pas单元。
 
不好意思,这段时间一直登陆不上来,程序我只试过abedon的方法,在bcb 3.0上不行,
其他两位的还没有是过,实在是没有时间把程序翻译过来。先把钱分了吧,我在找个人翻译
成bcb。
 
多人接受答案了。
 
各位总是对我如此厚爱,问题没解决就给分,实在不妥,
其实你应该让人把上面的delphi代码翻译成bcb,300分给他 :)

当然,考虑到bcb3.0与delphi4接近,估计用我上面的方法可以。
 
你没调试成功是因为有关的头文件你没加上,我的那段代码在BCB的任何版本上都能用.
你居然只给这么点分,太不公平了!真是气死我了!我找到了在WebBrowser中使用热键
问题的答案,能够解决我在上文中提到的问题,本来这次是打算告诉大家,顺便赚一点积分
的,哪知你却这样对我,我决定:以后决不回答heman的问题.
 
to abendon:

老兄,没必要发这么大火吧,你说的那个办法我在前面早说了呀,
并且也说明在D5/BCB5上可以解决问题,你仔细看看吧。
并且这个方法我们大家已经知道好久了,也不是拜您所赐呀。

我前面已经说的了,这个方法在D4上不行,BCB 3.0和D4在这方面
有类似的缺陷,不成功也是可以理解的吧。加上我说的第二种方法
是否能成功,也得看情况,您怎么那么有把握一种方法就成功呢?

当然,如果你有BCB3.0,并且只需要你说的那一种方法就成功,
可以告诉heman,让他加在这个贴子上,我愿意出300分给你,决不食言。
 
对不起,这几天忙着软件推广,没时间来这里发贴子。
abedon你可别生气,我是按照你贴子里写的做的,的确不行,在那个贴子里你也没有写
要加什么头文件呀?要不这样子好吗:你把东西贴出来,我试过如果可以的话,我再给你
300分。
温柔一刀老兄,你那么客气干吗?你这么详细把东西贴出来,小弟谢都来不及呐!
 

Similar threads

回复
0
查看
860
不得闲
D
回复
0
查看
735
DelphiTeacher的专栏
D
D
回复
0
查看
710
DelphiTeacher的专栏
D
D
回复
0
查看
681
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部