dbgrideh自适应列宽
2015-08-20 15:24
369 查看
DBGridEH自适应宽度
1.设AutoFitColWidths=true;它的列宽会跟据整个Grid的宽度自动调整且每一列(TColumnEh)都有AutoFitColWidth属性,设为true,该列宽度自动调整,经测试,这种自适应不能满足要求。
2.OptionsEh中有dghDblClickOptimizeColWidth,当双击表缝时,前一列按当前数据宽度自动调整宽度,这种方式基本上能满足要求,但很不方便。
3.
[delphi] view plaincopydbgrdh1.AutoFitColWidths:=True;
for ii:=0 to dbgrdh1.Columns.Count-1 do
with dbgrdh1.Columns[ii] do
OptimizeWidth;
这种方式感觉不错!应该能满足要求。
4.另外写过程
[delphi] view plaincopyfunction DBGridRecordSize(mColumn: TColumnEh): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
Result := False;
if not Assigned(mColumn.Field) then Exit;
mColumn.Field.Tag := Max(mColumn.Field.Tag,
TDBGridEh(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
Result := True;
end; { DBGridRecordSize }
function DBGridAutoSize(mDBGrid: TDBGridEh; mOffset: Integer =20): Boolean;
{ 返回数据网格自动适应宽度是否成功 }
var
I: Integer;
begin
Result := False;
if not Assigned(mDBGrid) then Exit;
if not Assigned(mDBGrid.DataSource) then Exit;
if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
if not mDBGrid.DataSource.DataSet.Active then Exit;
for I := 0 to mDBGrid.Columns.Count - 1 do begin
if not mDBGrid.Columns[i].Visible then Continue;
if Assigned(mDBGrid.Columns[i].Field) then
mDBGrid.Columns[i].Width := Max(mDBGrid.Columns[i].Field.Tag,
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)) + mOffset
else mDBGrid.Columns[i].Width :=
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)+ mOffset;
// ShowMsg(IntToStr(mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption))+'_'+IntToStr( mDBGrid.Columns[i].Width)+mDBGrid.Columns[i].Title.Caption);
mDBGrid.Refresh;
end;
Result := True;
end; { DBGridAutoSize }
在DrawColumnCell过程中添加
DBGridRecordSize(Column) ;
在button的click事件中
BGridAutoSize(dbgrdh1);即可
来源: <http://blog.csdn.net/n29882942/article/details/6070129>
来自为知笔记(Wiz)
1.设AutoFitColWidths=true;它的列宽会跟据整个Grid的宽度自动调整且每一列(TColumnEh)都有AutoFitColWidth属性,设为true,该列宽度自动调整,经测试,这种自适应不能满足要求。
2.OptionsEh中有dghDblClickOptimizeColWidth,当双击表缝时,前一列按当前数据宽度自动调整宽度,这种方式基本上能满足要求,但很不方便。
3.
[delphi] view plaincopydbgrdh1.AutoFitColWidths:=True;
for ii:=0 to dbgrdh1.Columns.Count-1 do
with dbgrdh1.Columns[ii] do
OptimizeWidth;
这种方式感觉不错!应该能满足要求。
4.另外写过程
[delphi] view plaincopyfunction DBGridRecordSize(mColumn: TColumnEh): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
Result := False;
if not Assigned(mColumn.Field) then Exit;
mColumn.Field.Tag := Max(mColumn.Field.Tag,
TDBGridEh(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
Result := True;
end; { DBGridRecordSize }
function DBGridAutoSize(mDBGrid: TDBGridEh; mOffset: Integer =20): Boolean;
{ 返回数据网格自动适应宽度是否成功 }
var
I: Integer;
begin
Result := False;
if not Assigned(mDBGrid) then Exit;
if not Assigned(mDBGrid.DataSource) then Exit;
if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
if not mDBGrid.DataSource.DataSet.Active then Exit;
for I := 0 to mDBGrid.Columns.Count - 1 do begin
if not mDBGrid.Columns[i].Visible then Continue;
if Assigned(mDBGrid.Columns[i].Field) then
mDBGrid.Columns[i].Width := Max(mDBGrid.Columns[i].Field.Tag,
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)) + mOffset
else mDBGrid.Columns[i].Width :=
mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption)+ mOffset;
// ShowMsg(IntToStr(mDBGrid.Canvas.TextWidth(mDBGrid.Columns[i].Title.Caption))+'_'+IntToStr( mDBGrid.Columns[i].Width)+mDBGrid.Columns[i].Title.Caption);
mDBGrid.Refresh;
end;
Result := True;
end; { DBGridAutoSize }
在DrawColumnCell过程中添加
DBGridRecordSize(Column) ;
在button的click事件中
BGridAutoSize(dbgrdh1);即可
来源: <http://blog.csdn.net/n29882942/article/details/6070129>
来自为知笔记(Wiz)
相关文章推荐
- HDU 5025 Saving Tang Monk
- 验证签名机制——java示例
- 大小端模式
- vector的使用方法
- 数字游戏
- Ext.Net ComboBox用法
- hust A Digital Satire of Digital Age
- android控件的测量
- 图片保存数据库
- scoket基础
- POJ1845------Sumdiv
- 自定义ListView显示项
- 求前缀表达式的值(25)
- Proguard语法及常用proguard.cfg代码段
- 深度-first遍历图--邻接表实现
- input中用中文输入法下的全角·替换英文输入法下的句号.
- ViewDragHelper 使用
- 设置vmware与主机IP同网段
- Android学习JNI,使用JNI实现字符串加密
- windows远程登录全屏