stringgrid 设置了两列为固定列(方便水平滚动时显示标题),现在我想让这两列跟普通cell一样可编辑,请问怎么实现?
最好,风格也跟普通cell一样,没有3D效果

解决方案 »

  1.   

    非3d效果可用stringgrid.ctrl3d:=false;
      

  2.   

    fixedcol列是不可编辑的(除了用代码)……
    要是有简单办法可实现你要的效果,同求……
    复杂的办法就是滚动条水平滚动时不断的重绘……
    难看点的办法是点击固定列的cell时,放个Edit进去,动态显示/隐藏……我猜你想这么实现是因为新增了一行,然后标题Cell为空,要填内容是吧?何不在新增时弄个inputbox什么的让用户输入标题呢?
      

  3.   

    自己写个控件吧。。要不你可以用ListView代替。。
      

  4.   

    TStringGrid就不要折腾了,刚看了下源码,要想实现你这要求会比较困难,MouseDown、MouseToCell、CellRect、UpdateEdit等函数逻辑都需要调整,而且大部分函数在子类中无法重写(没有声明virtual),还不如像2楼说的,找第三方控件吧
      

  5.   

    不要显示标题,把FixedCols、FixedRows设置为0其它列做标题
      

  6.   

    谢谢楼上所有大神有个新问题我有个其他控件在stringgrid之上拖动,当拖动很快时,stringgrid 会有时来不及重绘有什么办法让我在stringgrid之上移动其他控件时,不会在stringgrid之上留下痕迹(注:拖动时不停完全重绘的方法是不对的,会造成不停闪烁)
      

  7.   

    重绘事件增加2个bool变量
    bdrawing,bneedagain:boolean;都初始化为false
    重绘事件
    begin
      if bdrawing then
      begin
        bneedagain:=true;
        exit;
      end;
      bdrawing:=true;
      try
    ...
      finally
        bdrawing:=false;
      end;
    end;另外,注意根据bneedagain觉得是否要再重绘一次(以前的重绘,并不是最后结果)
      

  8.   


    没有效果啊,拖动那个控件后,还是在stringgrid之上留下来不及重绘的区域