找回密码
 立即注册

QQ登录

只需一步,快速开始

mindrayguowei

中级会员

122

主题

274

帖子

986

积分

中级会员

积分
986

活字格认证

QQ
mindrayguowei
中级会员   /  发表于:2017-2-13 11:04  /   查看:5955  /  回复:11
如题

11 个回复

倒序浏览
gw0506
超级版主   /  发表于:2017-2-13 18:23:31
沙发
现在是有什么问题吗?
直接掉Image的insert给start参数就好了。
回复 使用道具 举报
mindrayguowei
中级会员   /  发表于:2017-2-14 08:47:09
板凳
我们目前的插入图片的方式是这样的, 用一个配置文件配置每一幅图在textcontrol里面的绝对坐标, 然后在插入图片时根据绝对坐标插入到相应的位置. 但是textcontrol模板有好多种, 不同的模板, 插入图片的坐标是不一样的, 这就要求一个模板对应一个配置文件,

而且设置坐标没法以所见即所得的方式来完成, 需要一点一点的微调, 并且模板调整一下, 坐标就要相应的微调.这就导致了大量重复而没意义的工作量,

所以我们的想法是可不可以在模板上加一个table,插入图片时直接插入到table的cell里面. 这个table的行和列随着图片数量的变化自动调整. 这样就不需要配置坐标了.

你说的直接调Image的insert给start参数是怎么调的, 能不能给个例子?

回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-2-14 16:48:14
地板
textControl1.Images.Add(new Image(), HorizontalAlignment.Left, p.Start-1, ImageInsertionMode.DisplaceText);

这里p.Start 用 tablecell.Start代替就行了。你试试吧。
回复 使用道具 举报
mindrayguowei
中级会员   /  发表于:2017-2-16 16:36:55
5#
今天尝试了一下你说的方法, 可以插入图片到cell所在的位置, 但是只能调用

textControl1.Images.Add(new Image(), cell.Start - 1)

这个方法. 用你说的这个方法有个问题, 就是当我新加一行之后,上面一行最后一列所在的图片会自动跑到新加的行里面去,.
不知道为什么会这样, 这个算Bug吗?
回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-2-17 09:18:51
6#
让我看一下你这个cell是怎么拿到的代码。以及新加行的代码。
回复 使用道具 举报
mindrayguowei
中级会员   /  发表于:2017-2-20 09:01:24
7#
本帖最后由 mindrayguowei 于 2017-2-20 09:06 编辑
  1. //这个方法响应菜单事件, table id 100是我手动设置的, 为了方便测试
  2.         private void tableImageToolStripMenuItem_Click(object sender, EventArgs e)
  3.         {
  4.             try
  5.             {
  6.                 TXTextControl.Table table = this._textControl.Tables.GetItem(100);
  7.                  
  8.                 int row = (imageList.Count / table.Columns.Count) + 1;
  9.                 int column = (imageList.Count % table.Columns.Count) + 1;

  10.                 if (row > table.Rows.Count)
  11.                 {
  12.                     TXTextControl.TableCell lastCell = table.Cells.GetItem(table.Rows.Count, table.Columns.Count);
  13.                     _textControl.InputPosition = new TXTextControl.InputPosition(lastCell.Start - 1);

  14.                     if (table.Rows.CanAdd)
  15.                     {
  16.                         bool flag = table.Rows.Add(TXTextControl.TableAddPosition.After, 1);
  17.                         if (flag == true)
  18.                         {
  19.                             TXTextControl.TableRow newRow = table.Rows.GetItem(row);
  20.                             newRow.MinimumHeight = 1134;
  21.                         }
  22.                         else
  23.                         {
  24.                             return;
  25.                         }
  26.                     }
  27.                     else
  28.                     {
  29.                         return;
  30.                     }
  31.                 }

  32.                 TXTextControl.TableRow tableRow = table.Rows.GetItem(row);

  33.                 if (table != null)
  34.                 {
  35.                     TXTextControl.TableCell cell = table.Cells.GetItem(row, column);
  36.                     if (cell != null)
  37.                     {
  38.                         TXTextControl.Image imageNew = GetInsertImage(cell.Width, tableRow.MinimumHeight);
  39.                         if (imageNew == null) return;

  40.                         imageList.Add(imageNew);
  41.                         //_textControl.Images.Add(imageNew, TXTextControl.HorizontalAlignment.Left, cell.Start - 1, TXTextControl.ImageInsertionMode.DisplaceCompleteLines);
  42.                         _textControl.Images.Add(imageNew, cell.Start - 1);
  43.                     }
  44.                 }

  45.             }
  46.             catch (Exception exc)
  47.             {
  48.                 MessageBox.Show(exc.Message, ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
  49.             }
  50.         }

  51.         //这个方法打开一张硬盘上的图片, 长和宽需要自适应table的长宽
  52.         private TXTextControl.Image GetInsertImage(int width, int height)
  53.         {
  54.              Graphics g = _textControl.CreateGraphics();
  55.              int iTwipsPerPixel = (int)(1440 / g.DpiX);

  56.             OpenFileDialog dlgOpen = new OpenFileDialog();
  57.             if (dlgOpen.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  58.             {
  59.                 Image tmp = Image.FromFile(dlgOpen.FileName);

  60.                 TXTextControl.Image image = new TXTextControl.Image(tmp);

  61.                 image.HorizontalScaling = width * 100 / (tmp.Width * iTwipsPerPixel);
  62.                 image.VerticalScaling = height * 100 / (tmp.Height * iTwipsPerPixel);

  63.                 image.ID = imageList.Count;
  64.                 return image;
  65.             }

  66.             return null;
  67.         }
复制代码
回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-2-20 19:10:15
8#
你看一下你的代码逻辑,你是先加的row,后插的图。
回复 使用道具 举报
mindrayguowei
中级会员   /  发表于:2017-2-20 19:32:53
9#
是啊, 我在插入图片之前, 肯定要去判断下cell是不是已经插满了, 如果插满了, 必须要先加row,在插入图片啊.
回复 使用道具 举报
gw0506
超级版主   /  发表于:2017-2-21 22:14:56
10#
你先加的row,然后插入图片,那图片不就是应该在最后一行吗?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部