如何让DBGridEh的宽度自动适应?
解决方案 »
- 程序进行设置屏幕分辨率的问题
- from生成DLL实例可以调用数据库初学者参考
- 请问:如何在DLL中使用线程?
- 怎么实现??
- 请问有谁知道delphi6的复活节彩蛋吗?
- 请各位加密高手帮小弟加加密,Thanks!!!
- 向真正的高手请教:如何限制上网(IE浏览、QQ、……),只有满足权限的用户才能?
- 求完整的EXCEL和OFFICE被调用的方法等的列表。
- Delphi应用程序安装设置问题???
- 死人了.....救命呀......那位大哥,大姐,大叔,大婶......帮帮忙...救救我.可怜我...
- Delphi如何实现将剪贴板中的图、文混排的内容保存成一个Word文件???
- 高手请进,关于判断字符串的问题?(难度有点大)
DBGridEh1.Columns.Items[0].Width :=80;
DBGridEh1.Columns.Items[1].Width :=100;
begin //在Tag属性中设置需要自动调整的列的最小宽度(固定值)
//这里将列宽值设为40px
Table1.FieldByName('FirstName').Tag := 40; //这里设置一个变化的值
//该值是做过运算的列标题的宽度值
Table1.FieldByName('LastName').Tag := 4 + Canvas.TextWidth( Table1.FieldByName('LastName').DisplayName);
end;Procedure FixDBGridColumnsWidth(const DBGrid: TDBGrid);
var
i : integer;
TotWidth : integer;//定义整个宽度
VarWidth : integer;//定义变化的宽度
ResizableColumnCount : integer;//定义变化宽度列的总数
AColumn : TColumn;
begin
//在重新调整前所有列的宽度
TotWidth := 0;
VarWidth := 0;
//有多少列需要自动调整
ResizableColumnCount := 0; for i := 0 to -1 + DBGrid.Columns.Count do
begin
TotWidth := TotWidth + DBGrid.Columns[i].Width;
if DBGrid.Columns[i].Field.Tag <> 0 then
Inc(ResizableColumnCount);
end; //为每个列分隔线增加1PX
if dgColLines in DBGrid.Options then
TotWidth := TotWidth + DBGrid.Columns.Count; if dgIndicator in DBGrid.Options then
TotWidth := TotWidth + IndicatorWidth; VarWidth := DBGrid.ClientWidth - TotWidth; //平均分配变化宽度的值
//给所有需要自动调整的列
if ResizableColumnCount > 0 then
VarWidth := varWidth div ResizableColumnCount; for i := 0 to -1 + DBGrid.Columns.Count do
begin
AColumn := DBGrid.Columns[i];
if AColumn.Field.Tag <> 0 then
begin
AColumn.Width := AColumn.Width + VarWidth;
if AColumn.Width < AColumn.Field.Tag then
AColumn.Width := AColumn.Field.Tag;
end;
end;
end; Procedure TForm1.FormResize(Sender: TObject);
begin
FixDBGridColumnsWidth(DBGrid1);
end;