专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Delphi

哪位高人帮忙把上面代码翻译成delphi,谢了

发布时间:2011-06-24 19:35:00 文章来源:www.iduyao.cn 采编人员:星星草
哪位高人帮忙把下面代码翻译成delphi,谢了
HRESULT ShowShellDocViewMenu(LPDISPATCH lpDocDisp, POINT pt, UINT nCmdID)
...{
    HRESULT hr = S_FALSE;
    IOleCommandTarget *pct;
    if ( lpDocDisp && SUCCEEDED(lpDocDisp->QueryInterface(IID_IOleCommandTarget, (void **)&pct)))
    ...{
        try
        ...{
            CComVariant vtIn;
            vtIn.vt = VT_I4;
            vtIn.lVal = MAKELONG(pt.x, pt.y);
            CComVariant vtOut;
            hr = pct->Exec(&CGID_ShellDocView, nCmdID, OLECMDEXECOPT_DONTPROMPTUSER, &vtIn, &vtOut);
        }
        catch (...) ...{
        }
        pct->Release();
    }
    return hr;
}

这个是调用IE管理加载项的代码,不知道怎么专程delphi,帮忙下,谢谢了。
------解决方案--------------------
var
  hr:HRESULT;
  pct:^IOleCommandTarget;
  vtin,vtout:TVarRec;
begin
     hr := S_FALSE; 
     
    if  (lpDocDisp<>nil) and (lpDocDisp^.QueryInterface(IID_IOleCommandTarget,@pct)=S_OK) 
   then
        try 
        
            vtIn.vt = VT_I4; 
            vtIn.lVal = pt.x+(pt.y shl 16); //MAKELONG(pt.x, pt.y); 
           
            hr := pct^.Exec(@CGID_ShellDocView, nCmdID,OLECMDEXECOPT_DONTPROMPTUSER, @vtIn, @vtOut); 
        
        finally  
        pct^.Release; 
    end; 
    result:= hr; 
end;

希望能帮到你
------解决方案--------------------
 vtIn.lVal = pt.x+(pt.y shl 16); //MAKELONG(pt.x, pt.y); 

这行应该改为  
             vtIn.lVal = pt.x or DWORD(pt.y shl 16); //MAKELONG(pt.x, pt.y); 
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: