找回密码
 立即注册

QQ登录

只需一步,快速开始

raym

初级会员

9

主题

35

帖子

285

积分

初级会员

积分
285

[已处理] print 方法

raym
初级会员   /  发表于:2018-12-19 11:30  /   查看:2680  /  回复:6
您好,我在画那个图形的时候,当我把那个单元格拉大之后,他不会按照比例变大,并且在其他单元格显示的时候会有问题。 var sheet = spread.getActiveSheet();
                var spreadNS = GC.Spread.Sheets;
                var CustomBase = spreadNS.CellTypes.Base;
                var oldPaint = spreadNS.CellTypes.Base.prototype.paint;
                // x1 相对于画布的x坐标。     y1  相对于画布的y坐标。    a1  单元格的宽度。    b1   高度   
                CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
                    if (!context) {
                        return;
                    }
                    if (this.showEffect) {
                        context.save();

                        let base = a1 > b1 ? b1 / 2 : a1 / 2;
                        context.beginPath();

                        context.moveTo((x1 + a1) / 1.05, y1 * 1.6);//zuo
                        context.lineTo((x1 + a1 - base) / 1.05, y1 * 1.6);//you
                        context.lineTo(((x1 + a1) * 2 - base) / (1.05 * 2), y1 * 2);//xia

                        context.fillStyle = 'black';
                        context.fill();
                        context.closePath();
                        context.restore();
                    }
                    oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
                };
                var myCellType = new spreadNS.CellTypes.Text();
                myCellType.showEffect = true;
               // 动态添加图形,a row, b col
                sheet.setCellType(a, b, myCellType);


ZFL)UB{F41@1MF%4J0K7Z`J.png ]1YM8_LYO)3JUVGN4[F`$T1.png ,刚开始做,对那几个x1,y1,a1,b1,还不是很熟。









6 个回复

倒序浏览
raym
初级会员   /  发表于:2018-12-19 11:33:00
沙发
因为我的理解是一个单元格就是一个画布,但是效果不出来。
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-19 12:26:51
板凳
单元格不是一个画布,整个SpreadJS才是整个画布,坐标是控制绘图的位置的。

我把我调整的代码贴出来:

  1. CustomBase.prototype.paint = function (context, value, x1, y1, a1, b1, style, ctx) {
  2.         if (!context) {
  3.             return;
  4.         }
  5.         if(this.showEffect){
  6.             context.save();
  7.             // x1, y1 分别是单元格的坐标
  8.             // a1, b1 分别是单元格的宽高
  9.             // let base = a1 > b1 ? b1 / 2 : a1 / 2;
  10.             let base = b1 / 2;
  11.             context.beginPath();

  12.             context.moveTo((x1 + a1) / 1.05, y1 * 1.2);//zuo
  13.             context.lineTo((x1 + a1 - 20) / 1.05, (y1) * 1.2);//you
  14.             context.lineTo(((x1 + a1) * 2 - 20) / (1.05 * 2), (y1+b1 - base*1.5) * 2);//xia

  15.             context.fillStyle = 'black';
  16.             context.fill();
  17.             context.closePath();
  18.             context.restore();
  19.         }
  20.         oldPaint.apply(this, [context, value, x1, y1, a1, b1, style, ctx]);
  21.     };
复制代码
回复 使用道具 举报
raym
初级会员   /  发表于:2018-12-19 13:08:52
地板
这个我只有加到0,0这个单元格大小才正常耶,
回复 使用道具 举报
raym
初级会员   /  发表于:2018-12-19 13:24:10
5#
raym 发表于 2018-12-19 13:08
这个我只有加到0,0这个单元格大小才正常耶,

你看看可以不用我的代码挑一个么,
回复 使用道具 举报
raym
初级会员   /  发表于:2018-12-19 13:29:40
6#
我懂问题杵在那儿啦,谢谢啦
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2018-12-19 14:06:18
7#
raym 发表于 2018-12-19 13:29
我懂问题杵在那儿啦,谢谢啦

不客气,很高兴能帮您解决问题,本帖我结贴了,您有新的问题欢迎发新贴交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部