当用户选择网格标题时,我想粗体网格的列标题。
我使用以下代码来实现此目的:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var I: Integer;
begin
//Prevent multiple clicks!
if fsBold in Column.Title.Font.Style then
Exit;
for I:= 0 to Column.Collection.Count-1 do
(Column.Collection.Items[I] as TColumn)
.Title.Font.Style := [];
Column.Title.Font.Style := [fsBold];
end;
此代码工作正常。
在OnFormCreate
我定义了以下标题高度:
type
DBGridHack = class(TDBGrid);
procedure TForm1.FormCreate(Sender: TObject);
begin
DBGridHack(DBGrid1).RowHeights[0] := 45;
end;
当我点击标题时,程序InternalLayout.MeasureTitleHeights
会将尺寸更改回原始尺寸。
因此,每次我更改字体样式时,我都需要重新定义RowHeight[0]
的值。
代码如下所示:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var I: Integer;
begin
//Prevent multiple clicks!
if fsBold in Column.Title.Font.Style then
Exit;
for I:= 0 to Column.Collection.Count-1 do
(Column.Collection.Items[I] as TColumn)
.Title.Font.Style := [];
Column.Title.Font.Style := [fsBold];
//Every time!!
DBGridHack(DBGrid1).RowHeights[0] := 45;
end;
当用户重新定义Column的宽度时,还有另一个问题,在这种情况下,RowHeight[0]
也会返回原始值。我想要解决这个问题的唯一方法是继承DBGrid并覆盖ColWidthsChanged
,但我还需要覆盖多少方法?
为什么会这样?
这是一个错误,还是我的代码被窃听?
有办法解决这个问题吗?
在一个简单的问题中。
如何 FIX 一个值到DBGrid的标题高度?
答案 0 :(得分:0)
似乎如果我覆盖Paint
过程,它将按预期工作。
我不知道这个解决方案是否有副作用。
这是自定义DBGrid的代码。如果这不是一个好的解决方案,如果你这样说,我将不胜感激。
TDBGrid1 = class(TDBGrid)
private
FTitleFixedHeight: Integer;
function CheckHeaderFixed: Boolean;
protected
procedure Paint; override;
public
{ Public declarations }
published
property TitleFixedHeight: Integer read FTitleFixedHeight write FTitleFixedHeight;
end;
function TDBGrid1.CheckHeaderFixed: Boolean;
begin
Result := (TitleFixedHeight <> 0) and (RowHeights[0] <> TitleFixedHeight);
end;
procedure TDBGrid1.Paint;
begin
if CheckHeaderFixed then
begin
RowHeights[0] := TitleFixedHeight;
end;
inherited;
end;