如何把主档和明细档的内容加载到一个Memo中显示的美观些?
明细档的内容字符个数不一样,所以显示不对称。
大家有什么的方法?
明细档的内容字符个数不一样,所以显示不对称。
大家有什么的方法?
解决方案 »
- 在dbgrideh的列中怎样按需显示数据?
- 通过query查询后得到的数据,怎么样在dbgrid1指定的单元格中显示出来?
- 如何设置按钮的底色及如何在按钮上加图片,并使按钮上的字显示在图片上。高手请帮忙。
- 请教一个释放内存的问题
- 过年了,散分之6----半小时后结帖
- (100分)关于不同数据库表的嵌套查询问题。小弟真是个急!急!急!急!啊!
- 高份相赠!!!有人用DELPHI做过GIS吗?????
- 关于查询条件的问题
- 在sql语句中怎样取得前n条记录,后n条记录?
- 解释SendMessage
- DBNavigator hints 属性改为中文,为什么在程序运行时还是默认英文得呢?
- 文本文件(txt)的查找问题?
数据库为ACCESS NORTHWIND,
主表: 雇员
明细表: 订单
(其中照片和备注字段不显示)TFormDBMemo = class(TForm)
DBMemo: TMemo;
DataSourceMaster: TDataSource;
ADOTableMaster: TADOTable;
DataSourceDetail: TDataSource;
ADOTableDetail: TADOTable;
Panel: TPanel;
DBGridMaster: TDBGrid;
DBGridDetail: TDBGrid;
ButtonExport: TButton;
procedure ButtonExportClick(Sender: TObject);
private
procedure ExportMaster;
procedure ExportDetail;
function AlignCenter(Str: string; Wid: Integer): string;
public
{ Public declarations }
end;var
FormDBMemo: TFormDBMemo;implementation{$R *.dfm}{ TFormDBMemo }
function Dash(Num: Integer): string;
var
Idx: Integer;
begin
Result := '';
for Idx := 1 to Num do
Result := Result+'-';
end;function Space(Num: Integer): string;
var
Idx: Integer;
begin
Result := '';
for Idx := 1 to Num do
Result := Result+' ';
end;function TFormDBMemo.AlignCenter(Str: string; Wid: Integer): string;
var
iSpace: Integer;
begin
iSpace := (Wid - Length(Str)) div 2;
if Length(Str) mod 2 = 0 then
Result := '|'+Space(iSpace+1)+Str+Space(iSpace+1)+'|'
else
Result := '|'+Space(iSpace+1)+Str+Space(iSpace+2)+'|';
end;procedure TFormDBMemo.ExportMaster;
var
Row: Integer;
Col: Integer;
Rows: Integer;
Cols: Integer;
MaxWidth: Integer;
sLine: string;
sItem: string;
begin
MaxWidth := 0;
Cols := DBGridMaster.Columns.Count;
for Col := 0 to Pred(Cols) do
begin
sItem := DBGridMaster.Fields[Col].DisplayLabel;
if Length(sItem) > MaxWidth then
MaxWidth := Length(sItem)
end; Rows := DBGridMaster.DataSource.DataSet.RecordCount;
for Row := 0 to Pred(Rows) do
begin
for Col := 0 to Pred(Cols) do
begin
if DBGridMaster.DataSource.DataSet.Fields[Col].Value <> Null then
if DBGridMaster.Fields[Col].DisplayLabel <> '照片' then
if DBGridMaster.Fields[Col].DisplayLabel <> '备注' then
begin
sItem := Trim(DBGridMaster.DataSource.DataSet.FieldByName(DBGridMaster.Fields[Col].DisplayLabel).AsString);
if Length(sItem) > MaxWidth then
MaxWidth := Length(sItem);
end;
end;
DBGridMaster.DataSource.DataSet.Next;
end; sLine := '';
DBGridMaster.DataSource.DataSet.First;
for Col := 0 to Pred(Cols) do
begin
sItem := Trim(DBGridMaster.Fields[Col].DisplayLabel);
sLine := sLine+AlignCenter(sItem, MaxWidth);
end;
DBMemo.Lines.Add(Dash(length(sLine)));
DBMemo.Lines.Add(sLine); Rows := DBGridMaster.DataSource.DataSet.RecordCount;
for Row := 0 to Pred(Rows) do
begin
sLine := '';
for Col := 0 to Pred(Cols) do
begin
if (DBGridMaster.Fields[Col].DisplayLabel = '照片') or
(DBGridMaster.Fields[Col].DisplayLabel = '备注') or
(DBGridMaster.DataSource.DataSet.Fields[Col].Value = Null) then
sItem := ''
else
sItem := Trim(DBGridMaster.DataSource.DataSet.FieldByName(DBGridMaster.Fields[Col].DisplayLabel).AsString);
sLine := sLine+AlignCenter(sItem, MaxWidth);
end;
DBMemo.Lines.Add(Dash(length(sLine)));
DBMemo.Lines.Add(sLine);
DBMemo.Lines.Add(Dash(length(sLine)));
ExportDetail;
DBGridMaster.DataSource.DataSet.Next;
end;end;procedure TFormDBMemo.ExportDetail;
var
Row: Integer;
Col: Integer;
Rows: Integer;
Cols: Integer;
MaxWidth: Integer;
sLine: string;
sItem: string;
begin
MaxWidth := 0;
Cols := DBGridDetail.Columns.Count;
for Col := 0 to Pred(Cols) do
begin
sItem := DBGridDetail.Fields[Col].DisplayLabel;
if Length(sItem) > MaxWidth then
MaxWidth := Length(sItem)
end; Rows := DBGridDetail.DataSource.DataSet.RecordCount;
for Row := 0 to Pred(Rows) do
begin
for Col := 0 to Pred(Cols) do
begin
if DBGridDetail.DataSource.DataSet.Fields[Col].Value <> Null then
if DBGridDetail.Fields[Col].DisplayLabel <> '照片' then
if DBGridDetail.Fields[Col].DisplayLabel <> '备注' then
begin
sItem := Trim(DBGridDetail.DataSource.DataSet.FieldByName(DBGridDetail.Fields[Col].DisplayLabel).AsString);
if Length(sItem) > MaxWidth then
MaxWidth := Length(sItem);
end;
end;
DBGridDetail.DataSource.DataSet.Next;
end; sLine := '';
DBGridDetail.DataSource.DataSet.First; for Col := 0 to Pred(Cols) do
begin
sItem := Trim(DBGridDetail.Fields[Col].DisplayLabel);
sLine := sLine+AlignCenter(sItem, MaxWidth);
end;
DBMemo.Lines.Add(sLine); Rows := DBGridDetail.DataSource.DataSet.RecordCount;
for Row := 0 to Pred(Rows) do
begin
sLine := '';
for Col := 0 to Pred(Cols) do
begin
if (DBGridDetail.Fields[Col].DisplayLabel = '照片') or
(DBGridDetail.Fields[Col].DisplayLabel = '备注') or
(DBGridDetail.DataSource.DataSet.Fields[Col].Value = Null) then
sItem := ''
else
sItem := Trim(DBGridDetail.DataSource.DataSet.FieldByName(DBGridDetail.Fields[Col].DisplayLabel).AsString);
sLine := sLine+AlignCenter(sItem, MaxWidth);
end;
DBMemo.Lines.Add(sLine);
DBGridDetail.DataSource.DataSet.Next;
end;end;
procedure TFormDBMemo.ButtonExportClick(Sender: TObject);
begin
ExportMaster;
end;
如果是字母加汉字组合长度有点差距.
比如:length('abcbefghijklmn') = 14
length('我的未来不是梦') = 14
长度相同,但在Memo中显示的长度有差距.
有个求字符显示的宽度的函数,比如 w 比 i 宽些,有谁提醒一下.
length('我的未来不是梦') = 14
长度相同,但在Memo中显示的长度有差距.------------------------------------------------在汉字字体方式下是对齐应该没有问题的.
var
iSpace: Integer;
begin
iSpace := (Wid - Length(Str)) div 2;
if Length(Str) mod 2 = 0 then
Result := '|'+Space(iSpace+1)+Str+Space(iSpace+1)+'|'
else
Result := '|'+Space(iSpace+1)+Str+Space(iSpace+2)+'|';
end;
-----------------------------------------------------------------------
修改一下
function AlignCenter_1(Str: string; Wid: Integer): string;
var iSpaceL,iSpaceR: Integer;
begin
iSpaceL := (Wid - Length(Str)) div 2;
iSpaceR := (Wid - Length(Str)) - iSpaceL;
Result := '|'+Space(iSpaceL+1)+Str+Space(iSpaceR+1);
end;
===========================================================谢谢各位,结账!