就是使dbgrid的标题根据列名的长度自动调整宽度
解决方案 »
- 要现实一个动态列的Grid。
- 请问如何将一个QUERY中的数据增加到另一个QUERY,不用FOR循环一条一条增加,有其他简单办法吗
- 在ms-dos下这么实现进度百分比?
- 如何使用sendmessage(handle1,WM_SETTEXT,X,XX) 后两个参数如何设置?
- 请问我怎样动态的远程获得ClientDataSet的DataSetProvider?????
- 在用SQL EXPLORER时,我点了DATABASE下的IBLOCAL别名,输入用户名:SYSDBA 和口令masterkey后进不去!
- 200求软件开发文档
- 如何制作一个透明输入区域的问题?就是输入字符的地方要透明的?
- 如何控制程序在系统里只允许打开一个(不允许一个程序在系统中同时开好几个)
- 这句话那里错了呀?为什么执行不了?
- 初学菜鸟关于键盘响应问题~~100分~~~~
- 怎麼在Delphi7中,Ctrl+Z為什麼不能後退自已寫的代碼呢?
//调整dbgrid中的内容显示。
class procedure TMainForm.AdjustDbgridColWidth(objDBGrid:TDBGrid);
var
cc:integer;
i,tmpLength:integer;
aDgCLength:array of integer;
begin
cc:=objDbGrid.Columns.Count-1;
setlength(aDgCLength,cc+1);
//file://取标题字段的长度
for i:=0 to cc do
begin
aDgCLength[i]:= length(objDbGrid.Columns[i].Title.Caption);
end;
If objDBGrid.DataSource.DataSet.Active=true then
begin
objDBGrid.DataSource.DataSet.First;
while not objDBGrid.DataSource.DataSet.Eof do
begin
//file://取列中每个字段的长度
for i:=0 to cc do
begin
tmpLength:=length(objDBGrid.DataSource.DataSet.FieldList.Fields[i].DisplayText);
if tmpLength>aDgCLength[i] then
aDgCLength[i]:=tmpLength;
end;
objDBGrid.DataSource.DataSet.Next;
end;
objDBGrid.DataSource.DataSet.First;
end;
for i:=0 to cc do
begin
objDbGrid.Columns[i].Width:=aDgCLength[i]*7; //7是自已试验后的值,你可以调整它
end;
end;
标题:数据网格自动适应宽度
说明:使用DBGrid不可不看
设计:Zswang
日期:2002-03-04
//*)///////Begin Source
uses
Math;function DBGridRecordSize(mColumn: TColumn): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
Result := False;
if not Assigned(mColumn.Field) then Exit;
mColumn.Field.Tag := Max(mColumn.Field.Tag,
TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
Result := True;
end; { DBGridRecordSize }function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): 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;
mDBGrid.Refresh;
end;
Result := True;
end; { DBGridAutoSize }
///////End Source///////Begin Demo
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
DBGridRecordSize(Column);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
DBGridAutoSize(DBGrid1);
end;
///////End Demo