| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1885 人关注过本帖
标题:求助解决在VFP的FORM中运行excel时不能编辑的问题
只看楼主 加入收藏
yangmz
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2013-4-2
结帖率:52%
收藏
已结贴  问题点数:20 回复次数:4 
求助解决在VFP的FORM中运行excel时不能编辑的问题
本人尝试在vfp的form中显示excel表格,按照在网上搜索的方法,是用api的语句SetParent通过句柄把运行中的excel放置在form中,但有个缺点,就是excel界面把整个form都占满了,想加点其它控件都不太好看。
因为SetParent是通过控制句柄的方式来实现功能的,VFP控件中除了form有句柄外,其它控件都没有,所以我觉得除了在表单上占满显示excel外,无法在form中实现局部显示。为此,我试着学习VB6制作了一个控件,计划用来在form中局部显示excel(我认为也可以显示word,其它的应用程序),
在VB6中是这样建立的:
1、新建一个activeX控件
2、在通用中添加如下代码:
Public Property Get hwnd() As long
hwnd = UserControl.hwnd
End Property
目的是获得该控件的窗口句柄,然后生成ocx文件,注册后,再添加到VFP 的form中,该form添加一个属性excelobj,改该控件的name为ole2,再运行如下语句:

Declare integer SetParent IN user32.dll as  SetParent Long, Long
thisform.excelobj = CreateObject("Excel.application")    &&建立excel应用程序
thisform.excelobj.workbooks.add()
thisform.excelobj.Visible = .t.
SetParent(thisform.excelobj.Hwnd, excelinform.ole2.hwnd)  &&把excel应用程序放在ole2 的窗口中。
即可显示excel在该控件中,

但运行过程中有一个问题:
如果thisform.excelobj.Visible = .t. 放在SetParent(thisform.excelobj.Hwnd, excelinform.ole2.hwnd)前,则会出现excel的窗口一闪而过,然后放置在该控件中,但是能编辑excel表格内容。

如果thisform.excelobj.Visible = .t. 放在SetParent(thisform.excelobj.Hwnd, excelinform.ole2.hwnd)后,则所显示的excel不能编辑表格内容,这是怎么回事啊?请高手帮忙解决一下。
以下是附件
 
gethwndtest.rar (6.04 KB)



该附件中有一个ocx,自行注册,再重新添加到VFP的FORM中,即可。
搜索更多相关主题的帖子: FORM excel 控件 hwnd thisform 
2018-07-27 09:53
gs2536785678
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:45
帖 子:601
专家分:1770
注 册:2017-7-16
收藏
得分:0 
深刻了。
2018-07-27 11:16
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10538
专家分:42927
注 册:2014-5-20
收藏
得分:20 
可以调整 excel 的 top、left、width、height 属性确定excel在form的位置和大小。
如:
** form 的 Activate 事件:
IF VARTYPE(this.excel) != "O"
    this.width = 800
    this.height = 600
    DECLARE LONG SetParent IN User32 LONG, LONG
    this.excel = CREATEOBJECT("Excel.application")
    this.excel.top = 10
    this.excel.left = 10
    this.excel.width = 500
    this.excel.height = 300
    this.excel.workbooks.add()
    **this.LockScreen = .T.
    this.excel.Visible = .T.
    SetParent(this.excel.hWnd, this.hWnd)
    **this.LockScreen = .F.
ENDIF


2018-07-27 14:40
yangmz
Rank: 2
等 级:论坛游民
帖 子:95
专家分:20
注 册:2013-4-2
收藏
得分:0 
谢谢版主解答,但是可能版主没有清楚我的问题,是这样的:
  
this.excel.Visible = .T.
SetParent(this.excel.hWnd, this.hWnd)
是显示在整个form中的,我希望的结果是局部显示在form中,留出其它版面来放置一些功能的控件,再说它在执行时,也是excel一闪然后再放置到form中。

不过,我想到了办法,就是在之后,使之最小化,如下:
this.excel = CREATEOBJECT("Excel.application")
this.excel.WindowState=-4140 &&最小化
......
this.excel.Visible = .T.
SetParent(this.excel.hWnd, this.hWnd)
this.excel.WindowState=-4137 &&最大化
就不会出现excel一闪然后再到form中的情况
2018-07-30 09:58
butong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-7-11
收藏
得分:0 
请问楼主
我在(2017)API 的这个函数setparent将excel嵌入窗体中,excel不能编辑,请问是如何解决的。我用你说的之前之后没有差别吗?这个问题困扰我一年了。
2019-07-11 06:22
快速回复:求助解决在VFP的FORM中运行excel时不能编辑的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015707 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved