Excel一直是我心目中的典范,简单好用,我现在想在delphi中实现类似于sheet.cells(1,2).text="Hello, the world",cells除开text属性外,可能还会有backcolor、formula等属性,那么怎样设计相关的类。

解决方案 »

  1.   

    对于高手而言,这个问题真的很难吗?我已经等到深更半夜了还是没有结果。我设计了两个类,类TCellValue保存单元格Cells的属性,比如Text,另外一个类TSheet保存整个工作表,表中包含许多的单元格,property Cells[Row,Col:integer]:TCellValue read GetCellValue write SetCellValue用来操作单元格。但是我把一些对Grid控件操作的代码放在procedure SetCellValue中时,这些代码看起来似乎并没有被执行。为什么呢?我在单步执行跟踪时,居然跳过了这些代码,设置的断点也变成了绿色。心苦呀。
      

  2.   

    我觉得这个好像要写好几个类.
    一个Sheet类,然后还要写几个类(像Cell类)来具体实现这个类.
    我不是高手,这个比较复杂.
      

  3.   

    这几个类我已经设计出来了,而且从类的角度来看,似乎也是成功的,因为可以读写类的属性等。但是SetCellValue中操作Grid组件的话还是不行,但是在其他不带index 参数的过程中则又完全可以。我试着把SetCellValue[row,col:byte;value:tcellvalue中的Row、Col参数传递给类中的其他过程,但是不行。Delphi对于带Index类别参数有什么特殊的规则吗?
      

  4.   

    帮你顶一下,觉得是你的property cel(x,y: integer) read xx write yyr的xx,yy没有执行,写这个的话参考一下Tstringgrid
      

  5.   

    property Cells[Row,Col:integer]:TCellValue read GetCellValue write SetCellValue里面的Get、Set都执行了,但是跟踪时发现它执行了不该执行的,在实例中设置属性时,应该执行Set,但是真正执行的却是Get。如果把这些代码放在不带index参数的普通属性中时,一切都正常。编写过程中我参考了Canvas.Pixles,大概是我的道法还没到,到现在也没有解决这个问题,无奈只好放弃,取消了TCellValue类,先对付着用,等高手们有空帮我解决。