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

ooolinux 2019-10-13 09:03:08
FMX的StringGrid控件的Style有人编辑过吗?就是表头那一行,每一列的标题文本如何居中对齐,该行如何设置背景颜色?
...全文
251 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
nikotin 2019-10-13
  • 打赏
  • 举报
回复
这个可以在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;
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 12 楼 nikotin 的回复:
你刚才贴的代码是找的现在的header样式,我因为之前还要加背景和其它东西,就重新定义了一个了。
明白了
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 11 楼 nikotin 的回复:
我意思是Header的样式不在Edit Custom Style出来的列表里面。
不过我9楼的代码不需要新建样式。
nikotin 2019-10-13
  • 打赏
  • 举报
回复
你刚才贴的代码是找的现在的header样式,我因为之前还要加背景和其它东西,就重新定义了一个了。
nikotin 2019-10-13
  • 打赏
  • 举报
回复
我意思是Header的样式不在Edit Custom Style出来的列表里面。
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 8 楼 nikotin 的回复:
那里面没有,要自己新建一个样式,里面包含一个stylename叫做text的Text对象就行了,其它的可以任意加。然后以编程的形式把这个样式作为header的样式。你可以看下THeader的源码,里面能找到它默认用的什么样式,然后仿照这个默认样式新建一个,根据需要再添加一些背景之类的元素就行了。
在StringGrid控件上右键菜单不是有Edit Custom Style吗?我改了一点设置貌似无效。
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 8 楼 nikotin 的回复:
那里面没有,要自己新建一个样式,里面包含一个stylename叫做text的Text对象就行了,其它的可以任意加。然后以编程的形式把这个样式作为header的样式。你可以看下THeader的源码,里面能找到它默认用的什么样式,然后仿照这个默认样式新建一个,根据需要再添加一些背景之类的元素就行了。
有点复杂,我这样搞了:
void __fastcall TForm1::StringGrid1ApplyStyleLookup(TObject *Sender)
{
	TStringGrid *sg=(TStringGrid *)Sender;
	THeader *header=(THeader *)(sg->FindStyleResource("header"));
	if(header!=NULL)
		header->Height=30;
}
nikotin 2019-10-13
  • 打赏
  • 举报
回复
那里面没有,要自己新建一个样式,里面包含一个stylename叫做text的Text对象就行了,其它的可以任意加。然后以编程的形式把这个样式作为header的样式。你可以看下THeader的源码,里面能找到它默认用的什么样式,然后仿照这个默认样式新建一个,根据需要再添加一些背景之类的元素就行了。
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 6 楼 nikotin 的回复:
就像代码里那样,动态地给header设置一个新的style就行了。
就是在编辑Style界面里面,哪个项目是Header?
nikotin 2019-10-13
  • 打赏
  • 举报
回复
就像代码里那样,动态地给header设置一个新的style就行了。
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 4 楼 nikotin 的回复:
因为我不仅要居中,还要改Header的高度,所以不能仅靠自绘。
改Header的高度,是设置的哪个项目?
nikotin 2019-10-13
  • 打赏
  • 举报
回复
因为我不仅要居中,还要改Header的高度,所以不能仅靠自绘。
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
我这样解决了:
//自绘列的表头标题
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();
}
//---------------------------------------------------------------------------
ooolinux 2019-10-13
  • 打赏
  • 举报
回复
引用 1 楼 nikotin 的回复:
这个可以在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;
你这个有点复杂,感觉还是套用StyleLookup 。

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧