在Delphi中使用FDMemtable时,如何正确对齐DBGrid标题?
在使用FDMemtable时,我似乎无法使DBGrid中的固定行标题右对齐。每当我将字段对齐设置为taRightJustify时,它都会正确对齐数据单元格。但是,DBGrid标题总是左对齐 更令人沮丧的是,我可以将相应的DBGrid列标题对齐设置为taRightJustify,并且它在IDE中看起来非常好。但当我运行程序时,列标题显示为左对齐 是否有人找到了一种方法,使DBGrid列标题在使用FDMemtable时保持右对齐 顺便说一句,taCenter也会出现这种情况。数据单元格居中对齐,但标题保持左对齐 PEBKAC在Delphi中使用FDMemtable时,如何正确对齐DBGrid标题?,delphi,dbgrid,fdmemtable,Delphi,Dbgrid,Fdmemtable,在使用FDMemtable时,我似乎无法使DBGrid中的固定行标题右对齐。每当我将字段对齐设置为taRightJustify时,它都会正确对齐数据单元格。但是,DBGrid标题总是左对齐 更令人沮丧的是,我可以将相应的DBGrid列标题对齐设置为taRightJustify,并且它在IDE中看起来非常好。但当我运行程序时,列标题显示为左对齐 是否有人找到了一种方法,使DBGrid列标题在使用FDMemtable时保持右对齐 顺便说一句,taCenter也会出现这种情况。数据单元格居中对齐,但标
这个问题是我自己造成的。我没有调用DBGrid列编辑器并添加所有字段。相反,我使用的是“结构”窗格,并以这种方式访问DBGrid列。虽然“结构”窗格允许我修改列标题,但这只是临时的,在程序运行时不会持久。下面的代码在西雅图对我有效。我使用的是TClientDataSet而不是TFDMemTable,但我看不出这会有什么不同 如果在DBGrid上定义了持久列,还可以通过对象检查器设置列的标题对齐方式-使用它选择列,然后展开其标题节点,然后在那里设置标题对齐方式
procedure TForm1.CDS1AfterOpen(DataSet: TDataSet);
var
i : Integer;
begin
for i := 0 to DBGrid1.Columns.Count - 1 do
DBGrid1.Columns[i].Title.Alignment := taRightJustify;
end;
顺便说一句,如果您认为您正在OI中设置对齐,但它被忽略,请查看是否可以找出原因,如下所示:
- 确保您的表单已保存,然后右键单击它并选择
。然后,在IDE编辑器窗口中,您可以看到对齐属性是否按照在OI中指定的方式保存。使用编辑器关联菜单返回以表单形式查看表单查看为文本
- 如我在注释中所述,添加对表单加载方法的重写。使用
s正文中Loaded
上的断点,可以在调用inherited
之前和之后检查对齐值inherited
为什么我建议查看加载的
?嗯,它是在从DFM流式导入表单后调用的,是运行时系统完成表单设置的例程。有时,无可否认,另一个组件(通常是第三方组件)会出现异常行为,并导致其他组件的属性出现异常行为。我也无法使用TFDMemTable重现该问题
我在一个新的VCL应用程序的主窗体上放置了一个TFDMemTable
、TDataSource
和TDBGrid
,像往常一样将它们连接起来(网格的数据源设置为DataSource1
,数据源的DataSet
设置为FDMemTable1
),然后将以下代码添加到表单的OnCreate
事件中:
procedure TForm3.FormCreate(Sender: TObject);
begin
FDMemTable1.FieldDefs.Add('ID', ftInteger, 0, True);
FDMemTable1.FieldDefs.Add('LastName', ftString, 20);
FDMemTable1.FieldDefs.Add('FirstName', ftString, 20);
FDMemTable1.FieldDefs.Add('Salary', ftCurrency);
FDMemTable1.CreateDataSet;
FDMemTable1.Active := True;
FDMemTable1.AppendRecord([1, 'Smith', 'John', 30000]);
FDMemTable1.AppendRecord([2, 'Jones', 'Jane', 40000]);
FDMemTable1.AppendRecord([3, 'Doe', 'David', 2500]);
DBGrid1.Columns[3].Alignment := TAlignment.taRightJustify;
DBGrid1.Columns[3].Title.Alignment := TAlignment.taRightJustify;
end;
如果我在设计时设置所有内容,它也可以正常工作。重复我上面使用的相同设置步骤,但不要使用代码,而是使用以下步骤:
taRightJustify
设置DBGrid1.Columns[3]。Title.Alignment:=TAlignment.taRightJustify;Indeed有用吗,谢谢。你知道为什么使用对象检查器设置相同的值不起作用吗?@MichaelRiley AKAGunny:对不起,迈克。我还没有机会调查这件事;我将在本周末尝试查看它。重写窗体的Loaded方法并调用其中继承的方法。调用inherited后,在其中放置一个断点,然后可以查看列[].Title.Alignment是否已设置为taRightJustify。@MartynA我很想尝试一下,但我不知道如何执行您的建议。你能给我一个资源的链接,描述你在说什么吗?@MichaelRiley AKAGunny:刚刚做了一个新的测试。使用与上述相同的设置,但删除FieldDefs和AddRecord代码除外。相反,使用Samples anivers.FDS文件(从C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Data文件夹)从文件加载FDMemTable。添加所有列,然后使用列编辑器在对象检查器中将大小列标题的对齐方式更改为taRightJustify,然后运行应用程序。正如您所期望的那样,标题看起来是右对齐的。顺便说一句,鉴于您得到的答案,您是否检查过该问题是否特定于使用FDMemTable?如果有,结果如何?