论是开发什么样的程序,数据输入是不可缺少的。快速地生成一个美观的输入界面无疑会大大提高程序开发的效率。
作者:李晓平 来源:yesky 2007年11月1日
关键字:
{ 创建各字段的数据输入控件的方法}
procedure TDBPanel.CreateEditors;//(DS: TDataSource; ColCount: Integer);
var
i, n, RowCount: Integer;
TextHeight: Integer;
begin
if DataSource.DataSet.Active then begin
n := DataSource.DataSet.FieldCount;
{ 计算最大的标题长度及显示长度}
DataSource.DataSet.First;
{ 计算高度}
TextHeight := Canvas.TextHeight(D Source.DataSet.Fields[0].DisplayLabel) + FLineHeight; //10;
{ 计算行列数}
RowCount := n div Columns;
if n mod Columns $#@60;$#@62; 0 then inc(RowCount);
{ 分配内存}
FreeEditors;
SetLength(Editors, n);
SetLength(Labels, n);
{ 创建滚动盒}
FScrollBox := TScrollBox.Create(Owner);
FScrollBox.Parent := Self;
FScrollBox.Align := alClient;
{ 创建编辑}
for i:=0 to n-1 do begin
{ 创建标题}
Labels[i] := TLabel.Create(Owner);
Labels[i].Parent := FScrollBox; //Self;
Labels[i].Caption := DataSource.DataSet.Fields[i].DisplayLabel;
Labels[i].Left := FLeft + (maxLabelLen + maxTextLen + 10) * (i div RowCount);
Labels[i].Width := maxLabelLen;
Labels[i].Top := FTop + (i mod RowCount) * TextHeight + 5;
{ 创建编辑对象}
Editors[i] := TDBComboBox.Create(Owner);
Editors[i].Parent := FScrollBox; //Self;
Editors[i].Left := Labels[i].Left + Labels[i].Width;
Editors[i].Width := maxTextLen;
Editors[i].Top := FTop + (i mod RowCount) * TextHeight;
Editors[i].DataSource := DataSource;
Editors[i].DataField := DataSource.DataSet.Fields[i].FieldName;
Editors[i].OnKeyPress := AKeyPress;
Editors[i].OnKeyDown := AKeyDown;
end;