FMX的StringGrid控件的Style有人编辑过吗?就是表头那一行,每一列的标题文本如何居中对齐,该行如何设置背景颜色?

解决方案 »

  1.   

    这个可以在GridHeader的自绘事件里动态添加:
    procedure TFrameInvoice.GridInvoiceDrawColumnHeader(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF);
    begin
      if not FHeaderStyleApplied then
      begin
        FHeaderStyleApplied := True;
        ApplyHeaderItemStyle(GridInvoice, 'rankheaderitemstyle');
      end;
    end;procedure ApplyHeaderItemStyle(Grid: TGrid; StyleNameToApply: string;
    HeaderStyleName: string);
    var
      HeaderObj: TFmxObject;
      Header: THeader;
      Item: THeaderItem;
      I: Integer;
    begin
      HeaderObj := FindFmxObj(Grid, HeaderStyleName);
      if not Assigned(HeaderObj) then
        Exit;  if HeaderObj is THeader then
      begin
        Header := THeader(HeaderObj);
        for I := 0 to Header.Count - 1 do
        begin
          Item := Header.Items[I];
          Item.StyleLookup := StyleNameToApply;
          Item.TextAlign := TTextAlign.Center;
        end;
      end;
    end;
      

  2.   


    你这个有点复杂,感觉还是套用StyleLookup 。
      

  3.   


    我这样解决了:
    //自绘列的表头标题
    void __fastcall TForm1::StringGrid1DrawColumnHeader(TObject *Sender, TCanvas * const Canvas,
              TColumn * const Column, const TRectF &Bounds)
    {
    TRectF r(Bounds);
    r.right--;
    Canvas->BeginScene();
    Canvas->ClearRect(r,claLightgray);
    Canvas->Fill->Color=claBlue;
    Canvas->FillText(Bounds,Column->Header,true,1,TFillTextFlags(),TTextAlign::taCenter,TTextAlign::taCenter);
        Canvas->EndScene();
    }
    //---------------------------------------------------------------------------
      

  4.   

    因为我不仅要居中,还要改Header的高度,所以不能仅靠自绘。
      

  5.   


    改Header的高度,是设置的哪个项目?
      

  6.   

    就像代码里那样,动态地给header设置一个新的style就行了。
      

  7.   


    就是在编辑Style界面里面,哪个项目是Header?
      

  8.   

    那里面没有,要自己新建一个样式,里面包含一个stylename叫做text的Text对象就行了,其它的可以任意加。然后以编程的形式把这个样式作为header的样式。你可以看下THeader的源码,里面能找到它默认用的什么样式,然后仿照这个默认样式新建一个,根据需要再添加一些背景之类的元素就行了。
      

  9.   


    有点复杂,我这样搞了:
    void __fastcall TForm1::StringGrid1ApplyStyleLookup(TObject *Sender)
    {
    TStringGrid *sg=(TStringGrid *)Sender;
    THeader *header=(THeader *)(sg->FindStyleResource("header"));
    if(header!=NULL)
    header->Height=30;
    }
      

  10.   


    在StringGrid控件上右键菜单不是有Edit Custom Style吗?我改了一点设置貌似无效。
      

  11.   

    我意思是Header的样式不在Edit Custom Style出来的列表里面。
      

  12.   

    你刚才贴的代码是找的现在的header样式,我因为之前还要加背景和其它东西,就重新定义了一个了。