var
lpTimerProc: Pointer;begin
lpTimerProc := Pointer(@Self.OnScrollTimer);
end;错误如下:[Error] _Bxxxxx.pas(865): Variable required
lpTimerProc: Pointer;begin
lpTimerProc := Pointer(@Self.OnScrollTimer);
end;错误如下:[Error] _Bxxxxx.pas(865): Variable required
解决方案 »
- DelphiXE 安装时发生严重错误
- 看到.NET版有人发诗,为配合,弱弱地学习一下,提前祝大家圣蛋元蛋双蛋Happy!
- 做过套打的兄弟进来看看!
- 奇怪的问题
- 怎么向paradox数据库中导入excel表格中的数据呢?
- 一个关于报表的.....
- 怎么判断maskedit的内容为空?急!
- D7中为什么在TForm1.FormCreate不能获得系统进程:
- Quick Report中寫sql語句的問題????大家都過來看看,急盼回貼,我一定給分!!!
- 如何用程序调出“文件夹选项”及IE工具栏里的“Internet 选项”??HELP ME!!
- 请教两个问题!
- 怎么样把一个ADO记录集复制给另外一个ADO记录集???
lpTimerProc := Pointer(@Self.OnScrollTimer);
nIDTimer := SetTimer(hwndWB, IDT_SCROLL_TIMER, SCROLL_INTERVAL_TIME, lpTimerProc);
if nIDTimer <> 0 then
begin
....
end;
[Error] _BrowserHelp.pas(865): Not enough actual parameters也许我知道怎么做了,申明一个函数指针类型
P : Pointer;
begin
P := TMethod(Self.OnScrollTimer).Code;
end;
[Error] _BrowserHelp.pas(899): Invalid typecast
var
P : Pointer;
begin
P := TMethod(Self.OnMouseMove).Code;
end;你的OnScrollTimer是个什么样子的过程?
TOnScrollTimerEvent=Procedure (Value:Integer) of object;TTest_Obj=Class
procedure OnScrollTimer(Value:Integer);
end;
vea
AOnScrollTimer:TOnScrollTimerEvent;
begin
AOnScrollTimer:=Self.OnScrollTimer;
end;
TComEventProc = Procedure(uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
TCOMOBJ_Test = Class(TComObject)
private
F : TComEventProc;
public
property OnEvent : TComEventProc read F Write F;
published
end;var
Obj : TCOMOBJ_Test;
P1 : Pointer;
begin
//OBJ := TCOMOBJ_Test.Create;//这样直接创建要出错。^_^
P1 := @OBJ.OnEvent;
if P1 = NIL then exit;
end;
直接就可以编译,我不知道你是不是这个意思?
像你那样可以,但是一样没有Self指针to kiboisme(蓝色光芒):
var
Obj : TCOMOBJ_Test;
P1 : Pointer;
begin
//OBJ := TCOMOBJ_Test.Create;//这样直接创建要出错。^_^
P1 := @OBJ.OnEvent; // *** 估计这里跟 P1 := @TCOMOBJ_Test.OnEvent; 是一样的
if P1 = NIL then exit;
end;另……问题已经解决,我已经可以把hwnd转换成相应的IWebBrowser2,代码如下:function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
hInst: HWND;
lRes: Cardinal;
MSG: Integer;
pDoc: IHTMLDocument2;
ObjectFromLresult: TObjectFromLresult;
begin
Result := S_FALSE;
hInst := LoadLibrary('Oleacc.dll');
if hInst <> 0 then
begin
@ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
if @ObjectFromLresult <> nil then
begin
try
MSG := RegisterWindowMessage('WM_HTML_GETOBJECT'); SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 50, lRes); // 这里用50ms会不会太短了?我程序好像有点慢,所以我改为这个值,一帮用1000ms
Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
if Result = S_OK then
begin
(pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
end;
finally
// do nothing
end;
end;
FreeLibrary(hInst);
end;
end;function GetIEFromWBHWND(hwndWB: HWND; var IE: IWebbrowser2): HRESULT;
var
WndChild: Integer;
begin
Result := S_FALSE;
// walk Shell DocObject View->Internet Explorer_Server
WndChild := FindWindowEX(hwndWB, 0, 'Shell DocObject View', nil);
if WndChild <> 0 then
begin
WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);
if WndChild <> 0 then
Result := GetIEFromHWND(WndChild, IE); // Get Iwebbrowser2 from Handle
end;
end;