找回密码
 立即注册

QQ登录

只需一步,快速开始

gdrle

初级会员

6

主题

30

帖子

380

积分

初级会员

积分
380

活字格认证圣诞拼拼乐

gdrle
初级会员   /  发表于:2014-12-25 15:52  /   查看:7282  /  回复:7
版主你好,

我的需求是在Spead表格中添加透明图片(比如印章),让其透明显示,请参考下图:
Spread透明图片.jpg (24.01 KB, 下载次数: 481)

7 个回复

倒序浏览
gdrle
初级会员   /  发表于:2014-12-25 17:51:00
沙发
版主,背景设置问题解决了:
  1. Dim image As Bitmap = System.Drawing.Image.FromFile(Application.StartupPath & "\img\nb.gif")
  2.             Dim rShape As New FarPoint.Win.Spread.DrawingSpace.RectangleShape()
  3. ''设置背景及边线透明
  4.            rShape.BackColor = Color.Transparent
  5.             rShape.ShapeOutlineColor = Color.Transparent

  6.             rShape.Picture = image
  7.             rShape.Location = New Point(20, 60)
  8.             rShape.Name = "myRect1"
  9.             rShape.PictureTransparencyColor = Color.FromArgb(0, 255, 255, 255)
  10.             vass.ActiveSheet.RemoveShape("myRect1")
  11.             vass.ActiveSheet.AddShape(rShape)
复制代码

还有一个问题:
我如何设置这个图片的位置呢,如何将其放置在制定单元格内(比如 A列18行对应的表格为制表人,我要把这个印章放到A列18行位置),并且位置不可拖动?还请帮忙解决。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-25 18:33:00
板凳
回复 2楼gdrle的帖子

抱歉让你久等了,2# 问题测试代码如下:

  1.             //添加Shape
  2.             FarPoint.Win.Spread.DrawingSpace.RectangleShape rShape = new FarPoint.Win.Spread.DrawingSpace.RectangleShape();
  3.             rShape.Name = "myRect1";
  4.             rShape.BackColor = Color.Blue;
  5.             //锁定 Shape
  6.             rShape.Locked = true;
  7.             //获取单元格位置及大小
  8.             Rectangle cellrec = this.fpSpread1.GetCellRectangle(0, 0, 17, 1);

  9.             rShape.Width = cellrec.Width;
  10.             rShape.Height = cellrec.Height;
  11.             rShape.Left = cellrec.Left-(int)this.fpSpread1.ActiveSheet.SheetCorner.Columns[0].Width;
  12.             rShape.Top = cellrec.Top - (int)this.fpSpread1.ActiveSheet.SheetCorner.Rows[0].Height;

  13.             this.fpSpread1.Sheets[0].AddShape(rShape);
复制代码
回复 使用道具 举报
gdrle
初级会员   /  发表于:2014-12-26 10:51:00
地板
谢谢版主回复,现在还是有点问题,我用的是VS2010+VB.NET+SPREAD.NET 6,
使用你给的方法获取不到指定单元格的坐标,请参考下图:

GetCellRectangle.jpg (68.34 KB, 下载次数: 436)
回复 使用道具 举报
gdrle
初级会员   /  发表于:2014-12-26 13:10:00
5#
取不到的值的问题解决了。

不要在shape处理的时候调用函数取值:

  1.         Dim p As Point = getSpreadCellRect(FpSpread1, FpSpread1.ActiveSheet.ActiveRowIndex, FpSpread1.ActiveSheet.ActiveColumnIndex)
  2.         Dim image As Bitmap = System.Drawing.Image.FromFile(Application.StartupPath & "\img\nb.gif")
  3.         Dim rShape As New FarPoint.Win.Spread.DrawingSpace.RectangleShape()
  4.         rShape.BackColor = Color.Transparent
  5.         rShape.ShapeOutlineColor = Color.Transparent
  6.         rShape.Picture = image
  7.         rShape.Location = p
  8.         rShape.Name = "myRect1"
  9.         rShape.Locked = True
  10.         FpSpread1.ActiveSheet.RemoveShape("myRect1")
  11.         FpSpread1.ActiveSheet.AddShape(rShape)

  12.         MessageBox.Show("X:" & p.X & ",Y:" & p.Y)
复制代码


不过这样取的结果只能是可见单元格的坐标,如果取的单元格位于不可见区域(通过拖动滚动条选取)则取到的值跟我想要的不一样,看来是通过for循环累加行高和列宽吧,不知道版主有没有更好的方法。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-26 13:41:00
6#
回复 5楼gdrle的帖子

你好,
不可见区域,是需要通过 for循环累加行高和列宽 来获取,注意要考虑边框的高度"1px"。
回复 使用道具 举报
gdrle
初级会员   /  发表于:2014-12-26 13:52:00
7#
上传个Demo Mark一下,以备后用(VS 2010 + VB.NET +SPREAD.NET 6):

SpreadSeal.zip (110.13 KB, 下载次数: 535)

评分

参与人数 1金币 +500 收起 理由
iceman + 500 上传 Demo 到论坛

查看全部评分

回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-12-26 14:22:00
8#
回复 7楼gdrle的帖子

感谢上传demo,给您分发 500 金币。可以用于兑换论坛奖品。
金币规则:点击进入
礼品列表:点击进入
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部