Cell插件在Web开发中的应用

 

一.用Cell插件实现Java界面的打印简介

(1) 在HTML页面上嵌入华表的Cell插件;

为了在Applet界面中调用华表的Cell插件,我们首先在HTML页面上隐藏了一个Cell插件:

&ltOBJECT id=c style="LEFT: 0px; WIDTH: 828px; TOP: 0px; HEIGHT: 509px"

classid="clsid:3F166327-8030-4881-8BD2-EA25350E574A" VIEWASTEXT>

&ltPARAM NAME="_Version" VALUE="65536">

&ltPARAM NAME="_ExtentX" VALUE="17526">

&ltPARAM NAME="_ExtentY" VALUE="10774">

&ltPARAM NAME="_StockProps" VALUE="0"></OBJECT>


通过style="HEIGHT: 0px; WIDTH: 0px"指定Cell插件的高度和宽度都为0,从而达到隐藏Cell插件的目的。

(2) 在Applet中提供两个调用接口方法;

下面是一个Applet的代码实例,其中提供了callCellMethod()和callJavaScriptMethod()两个接口方法,分别可用来调用Cell插件的方法和JavaScript的方法:

public class MyApplet extends javax.swing.JApplet {

private JSObject win = null;

private JSObject cell = null;

public Object callCellMethod(String name, Object[] params) {

return getCell().call(name, params);}

public Object callJavaScript(String name, Object[] params) {

return getJSwin().call(name, params);}

private JSObject getCell() {

if (cell == null) {

try {

JSObject doc = (JSObject)getJSwin().getMember("document");

JSObject all = (JSObject)doc.getMember("all");

cell = (JSObject)all.call("item", new Object[]{"DCellWeb1"});}

catch (Exception e) {

e.printStackTrace();} }

return cell;}

private netscape.javascript.JSObject getJSwin() {

if (win == null) {

win = netscape.javascript.JSObject.getWindow(this);}

return win;}}

通过getCell()这个方法,可以在Java Applet中直接获得用JSObject表示的Cell插件,从而可以直接调用它的方法。例如,在Java Applet中向Cell插件的一个单元格写入数据,可以如下调用:

Integer row = new Integer(1);

Integer column = new Integer(1);

Integer page = new Integer(0);

callCellMethod("SetCellString", new Object[]{column, row, page, “str”});

其中SetCellString是Cell插件提供的接口方法。这样就实现了从Java Applet到华表的Cell插件的调用。

二.Cell插件如何实现客户端与服务端的数据交换:

(1) 添加CELL插件至网页中:

具体方法请参阅一

(2) 从服务器端读取数据:

A.    打开报表模板:

在这里之所以在请求XML数据前要先有打开报表模板,是因为如果将报表样式都存放在XML数据中,势必会增加XML数据量,一方面影响网页的运行速度;另一方面,一旦更改报表样式后,就得修改程序代码,从而增加程序开发和代码维护的工作量;而在模板中存放报表格式,查询报表时先打开模板,上传数据和下传数 据时只需传送实际的报表数据,从而大大减少传送数据量和工作量;模板文件可以通过外部程序(可以使用CELL自带的报表设计器)设计,模板文件存放至服务器端的某个虚拟目录下,使用CELL的OpenFile方法打开,文件路径可以是相对路径。

B. 服务器端生成XML数据并发送给客户端:

      客户端打开模板后,根据查询要求向服务器端发送请求,服务器端接收到请求后,组织XML数据,再发送给客户端;

B.    客户端接收XML数据,分析、填充至CELL中:

 (3) 保存数据到服务器端:

 

四:Cell插件如何分发

分发 Cell 插件需要分发2个 OCX 文件,1个 DLL 文件, 可以通过Cab包的形式供客户端下载安装。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使 iOS 瀑布流的 cell 完全展示在屏幕,您需要做到以下几点: 1. 设置 UICollectionView 的 contentInset 属性,以便 cell 与屏幕边缘之间有足够的间距。 2. 在 UICollectionViewDelegateFlowLayout 协议的方法,设置每个 section 的 inset。 3. 在 UICollectionViewDelegateFlowLayout 协议的方法,确定每个 cell 的大小。 4. 在 UICollectionViewDelegate 协议的方法,使用 indexPathsForVisibleItems 属性获取当前可见的 cell。 5. 对于每个可见的 cell,使用 rectForItem(at:) 方法获取其在 UICollectionView 的 frame。 6. 使用 CGRectContainsRect() 方法检查 cell 的 frame 是否完全包含在屏幕。如果是,则 cell 完全展示在屏幕;如果不是,则需要调整 UICollectionView 的 contentOffset 属性以确保 cell 完全展示在屏幕。 以下是代码示例: ```swift func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) { let visibleCells = collectionView.indexPathsForVisibleItems for visibleIndexPath in visibleCells { if let visibleCell = collectionView.cellForItem(at: visibleIndexPath) { let cellFrame = collectionView.convert(visibleCell.frame, to: collectionView.superview) let screenFrame = UIScreen.main.bounds if !CGRectContainsRect(screenFrame, cellFrame) { let offsetY = max(0, cellFrame.maxY - screenFrame.maxY) collectionView.setContentOffset(CGPoint(x: 0, y: collectionView.contentOffset.y + offsetY), animated: true) } } } } ``` 注意,这只是一个示例代码,具体实现可能因您的需求而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值