2
A
回答
2
數據感知控件從DataSource屬性獲取它們的數據,使用它。您必須手動遍歷它,不可能立即(沒有第三方庫/組件)。
0
您可以循環進入您的網格並手動將它們全部放入您的RichEdit中。 但爲什麼要重新發明輪子。只需使用報告組件。 在delphi 7 - delphi2010上安裝了rave組件。
1
你需要能夠沿着這些路線制定出合適的打印寬度爲每個字段,東西:
function PrintFieldWidth(Field: TField): Integer;
var
CharWidth: Integer; // an average character width
TitleWidth: Integer; // the width of the field title
FieldWidth: Integer; // the width of the field content
begin
CharWidth := Printer.Canvas.TextWidth('0');
TitleWidth := Printer.Canvas.TextWidth(Field.DisplayName);
FieldWidth := Field.DisplayWidth*CharWidth;
if TitleWidth > FieldWidth then
Result := TitleWidth+CharWidth
else
Result := FieldWidth+CharWidth;
end;
通過所有的記錄然後循環,循環遍歷每個字段進行打印。
procedure PrintText(S: String; X, Y, W, H: Integer);
begin
Printer.Canvas.TextRect(Rect(X,Y,X+W,Y+H),S);
end;
procedure PrintHeader(DataSet: TDataSet; X, Y, H: Integer);
var
I: Integer; // record loop
W: Integer; // field width
begin
for I := 0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[I].Visible then
begin
W := PrintFieldWidth(DataSet.Fields[I]);
PrintText(DataSet.Fields[I].FieldName, X, Y, W, H);
X := X + W;
end;
end;
end;
procedure PrintRecord(DataSet: TDataSet; X, Y, H: Integer);
var
I: Integer; // record loop
W: Integer; // field width
begin
for I := 0 to DataSet.FieldCount-1 do
begin
if DataSet.Fields[I].Visible then
begin
W := PrintFieldWidth(DataSet.Fields[I]);
PrintText(DataSet.Fields[I].AsString, X, Y, W, H);
X := X + W;
end;
end;
end;
procedure PrintDataSet(DataSet: TDataSet; X, Y: Integer);
var
OldPos: TBookmark;
H: Integer; // line height
begin
if DataSet <> nil then
begin
H := Printer.Canvas.TextHeight('0');
SaveAfterScroll := DataSet.AfterScroll;
DataSet.AfterScroll := nil;
try
DataSet.DisableControls;
OldPos := DataSet.GetBookmark;
DataSet.First;
PrintHeader(DataSet, X, Y, H);
Y := Y + H * 2;
while not DataSet.Eof do
begin
PrintRecord(DataSet, X, Y, H);
Y := Y + H;
DataSet.Next;
end;
DataSet.GotoBookmark(OldPos);
DataSet.FreeBookmark(OldPos);
finally
DataSet.AfterScroll := SaveAfterScroll;
DataSet.EnableControls;
end; // try
end;
end;
您需要添加一些代碼來處理分頁符。
+0
感謝您提供此信息 – Arno
相關問題
- 1. 打印自動打印流
- 2. 打印bufferedimage到打印機
- 3. Primefaces打印機打印div
- 4. 打印PDF雙面打印
- 5. 從pytest打印頭打印
- 6. Python - 只打印'打印'
- 7. 向TDBGrid添加一行
- 8. ReadOnly TDBGrid/TwwDBGrid Cell in Delphi?
- 9. 印表時打印
- 10. 打印到默認的Zebra打印機Windows打印機
- 11. 如何在javascript中打印打印區域進行打印
- 12. 用點陣打印機打印碳表格okidata打印機
- 13. 打印CR306000上的打印按鈕以打印案例數據
- 14. 打印圖像通過藍牙打印機打印字符串
- 15. Java打印 - 在少量打印機上放大打印輸出
- 16. 打印
- 17. 打印
- 18. 打印
- 19. 打印
- 20. 使用ace打印ICEfaces:打印機
- 21. java打印api - 在300dpi打印JComponent
- 22. 通過Google雲打印打印
- 23. Html表打印時打印行
- 24. 打印類別打印數組?
- 25. Javascript打印與WiFi打印機
- 26. python-escpos QS打印機不打印
- 27. Delphi打印機。打印機不刷新
- 28. 打印到PDF打印機編程
- 29. wkhtmltopdf:打印機不打印灰度
- 30. 打印位圖而不打印精靈?
這是一個學校項目女巫在課堂上被拒絕,我們可能無法下載或安裝新組件,因爲有人在安裝組件時將系統燒燬。你能給我一個關於如何使用rave組件的例子嗎? – Arno
自我,我不使用狂歡。我使用ReportBuilder。但是Rave Report正常運行在delphi7-delphi2010上。例如:http://componentace.com/reports-rave-report-delphi.htm但是如果你沒有de IDE的組件。然後你必須循環訪問你的數據。 – Ravaut123