做一个表格,能拖动改变大小,可多选,可拆分。
可合并回来。
可设置边框线粗度,颜色,类型(虚线等)。
文字方向,水平,竖直。
跟Word的表格操作差不多,简单一点。
可保存,可读回来。
我的想法是定义一个结构体,记录所有表格信息。在IMAGE上画。
大家有什么好主意?希望详细一点。

解决方案 »

  1.   

    听起来很难啊,不过用IMAGE肯定不好做,用GRID之类的做应该好很多!
      

  2.   

    像StringDrid, DrawDrid 都无法实现上述功能。
    下面是我定义的结构体:
      {字体结构}
      TFontStruct = record
        fsSize           : integer;               //字体大小
        fsItalic         : byte;                  //斜体标志
        fsWeight         : byte;                  //粗体标志
        fsUnderLined     : byte;                  //下划线标志
        fsDirection      : byte;                  //文字标志
        fsReserved       : array[0..15] of byte;  //保留
        fsFaceName       : array[0..LF_FACESIZE-1] of widechar;  //字体字样名称
      end;
      {文本结构}
      TTextStruct = record
        tsFont           : TFontStruct;              //字体结构
        tsFrontColor     : longword;                 //前景颜色
        tsBackColor      : longword;                 //背景颜色
        tsAlign          : longword;                 //对齐颜色
        tsReserved       : array[0..15] of byte;     //保留
        tsText           : array[0..255] of char;    //文本内容
      end;
      {方格单元结构}
      PCellStruct = ^TCellStruct;
      TCellStruct = record
        csX                : integer;               //坐标X
        csY                : integer;               //坐标Y
        csWidth            : integer;               //该单元方格的宽度
        csHeight           : integer;               //该单元方格的高度
        csStyle            : integer;               //该单元方格的类型[1]
        csCombinedWidth    : integer;               //合并后的总宽度
        csCombinedHeight   : integer;               //合并后的总高度
        csEXistsText       : integer;               //文本是否存在
        csSlash            : integer;               //斜线标志[2]
        csReserved         : array[0..15] of byte;  //保留
        csText             : TTextStruct;           //文本结构
      end;
      {注:[1] csStyle = 0 时,为独立的方格单元。
               csStyle = 1 时,为合并后的母方格。
               csStyle = 2 时,为合并后的子方格。
       当且仅当 csStyle = 1 时 csCombinedWidth 与 csCombinedHeight 才有效。   [2] csSlash = (0:无; 1:正斜; 2:反斜)
       当 csSlash 不为 0 时,csText 无效。
      }
      {网格结构}
      TGridStruct = record
        gsFlag              : array[0..3] of char; //网格标识 'Grid'
        gsRow               : integer;             //网格行数
        gsCol               : integer;             //网格列数
        gsWidth             : integer;             //网格宽度
        gsHeight            : integer;             //网格高度
        gsBorderStyle       : integer;             //边框线类型(0:实线; 1:虚线1; 2:虚线2)
        gsBorderWeight      : integer;             //边框线粗度
        gsBorderColor       : integer;             //边框线颜色
        gsGridLineStyle     : integer;             //格子线类型
        gsGridLineWeight    : integer;             //格子线粗度
        gsGridLineColor     : integer;             //格子线颜色
        gsFixedRow          : integer;             //固定行
        gsFixedCol          : integer;             //固定列
        gsFixedRowLineStyle : integer;             //固定行的边框线类型
        gsFixedRowLineWeight: integer;             //固定行的边框线粗度
        gsFixedRowLineColor : integer;             //固定行的边框线颜色
        gsFixedColLineStyle : integer;             //固定行的边框线类型
        gsFixedColLineWeight: integer;             //固定行的边框线粗度
        gsFixedColLineColor : integer;             //固定行的边框线颜色
        gsEvenColor         : longword;            //偶数行颜色
        gsOddColor          : longword;            //奇数行颜色
        gsReserved          : array[0..15] of byte;//保留
        gsExistsTitle       : integer;             //是否存在标题
        gsTitle             : TTextStruct;         //标题结构  end;还有相关的类。但还是觉得这样做不好,应该怎样做呢?
      

  3.   

    跟word中的表格差不多,还是不会做
      

  4.   

    我就是用类来实现数据操作的,还用了链表。
    只是界面操作
    DrawText,  还有画图的API函数。
    但还是无从入手
      

  5.   

    image做起来很麻烦,建议继承现有TStringGrid或其它
      

  6.   

    继承其他控件虽然容易,但达不到像word那样操作.
      

  7.   

    使用F1Book可以达到你的要求!