难题:做一个表格。可拖动改变大小,可设置其属性。内容如下。大家有好的主意吗? ( 积分: 100 )

  • 主题发起人 主题发起人 bill_anson
  • 开始时间 开始时间
B

bill_anson

Unregistered / Unconfirmed
GUEST, unregistred user!
做一个表格,能拖动改变大小,可多选,可拆分。
可合并回来。
可设置边框线粗度,颜色,类型(虚线等)。
文字方向,水平,竖直。
跟Word的表格操作差不多,简单一点。

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

我的想法是定义一个结构体,记录所有表格信息。在IMAGE上画。
大家有什么好主意?希望详细一点。
 
像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;

还有相关的类。但还是觉得这样做不好,应该怎样做呢?
 
用EasyGrid可以实现!EasyGrid有源代码
 
接受答案了.
 
后退
顶部