![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
печать [D7, WinXP]
Dmitry_177 © (2007-05-11 23:52:00)Как задать объекту Printer: TPrinter; ширину и высоту страницы, число копий да и сам выбранный принтер в PrintDialog1? Правильно ли вообще так будет?
uses
Printers
procedure TForm1.Button1Click(Sender: TObject);
var
Printer: TPrinter;
begin
if PrintDialog1.Execute then
try
Printer := TPrinter.Create;
Printer.Copies := PrintDialog1.Copies;
Printer.PageHeight := // незнаю что тут писать из PrintDialog1
finally
Printer.Free;
end;
end;
{RASkov} (2007-05-12 03:50:00) [21]> [7] Dmitry_177 (12.05.07 03:39)
> и всеравно у меня в одну строку выводится текст..
Странно.... Тут либо у тебя хватает ширины канвы для строки, либо должно в 2 или 3 строки, но часть "слова(в)" будут "обрезаны" правым краем канвы.
{RASkov} (2007-05-12 03:45:00) [22]> [7] Dmitry_177 (12.05.07 03:39)
Если у тебя ширина слова будет больше ширины листа, как нечто похожее в [7], то этот способ не пойдет....:(
{RASkov} (2007-05-12 03:41:00) [23]> [8] Dmitry_177 (12.05.07 03:40)
См [6] :)
Dmitry_177 (2007-05-12 03:40:00) [24]Form1.Canvas для эксперимента, чтоб бумагу не портить =)
Dmitry_177 (2007-05-12 03:39:00) [25]попробовал так:
procedure TForm1.Button1Click(Sender: TObject);
var
str: string;
Rect: TRect;
begin
str := '1234567890123456789012345678901234567890123456789012345678901234567890123456789 01234567890123456789012345678901234567890123456789012345678901234567890123456789 0123456789012345678901234567890123456789012345678901234567890';
Form1.Canvas.Font.Size := 12;
if Form1.Canvas.TextWidth(str) > Form1.Canvas.ClipRect.Right then
begin
Rect := Form1.Canvas.ClipRect;
DrawText(Form1.Canvas.Handle, PChar(str), Length(str), Rect, DT_WORDBREAK);
end;
end;
и всеравно у меня в одну строку выводится текст..
{RASkov} (2007-05-12 03:38:00) [26]> [5] Германн © (12.05.07 01:29)
> А о печати чего тут вообще идёт речь?
? По всей видимости.... длинной строки.... ;)
> [3] Dmitry_177 (12.05.07 01:02)
Попробуй вот этот пример, для канвы принтера аналогично
procedure TForm.FormResize(Sender: TObject);
var S: String; N: Integer; R: Trect;
begin
for N:= 0 to 50 do S:=S+'Длинная строка - много слов ';
R:=Canvas.ClipRect; Canvas.FillRect(R);
N:=DrawText(Canvas.Handle, PChar(S), -1, R, DT_WORDBREAK);
INC(R.Top, N+10);
DrawText(Canvas.Handle, PChar(S), -1, R, DT_WORDBREAK or DT_RIGHT);
end;
Германн (2007-05-12 01:29:00) [27]
> Dmitry_177 (11.05.07 23:52)
>
> Как задать объекту Printer: TPrinter; ширину и высоту страницы,
> число копий да и сам выбранный принтер в PrintDialog1?
А о печати чего тут вообще идёт речь?
{RASkov} (2007-05-12 01:12:00) [28]> [3] Dmitry_177 (12.05.07 01:02)
У тебя есть Rect страницы (Printer.Canvas.ClipRect) и ширина строки (Printer.Canvas.TextWidth()) вот и учитывай все это при выводе на канву принтера... Вообщем все в ручки, автоматом не получится.... Посмотри также DrawText(API) и параметр DT_WORDBREAK....
Dmitry_177 (2007-05-12 01:02:00) [29]а как при печати делать перенос строки? просто если печатать Printer.Canvas.TextOut(...) и если строка будет длинной(длиннее чем ширина бумаги, то часть строки не распечатается и уйдет за край)
Dmitry_177 (2007-05-12 00:41:00) [30]а еще мне не очень понятно чем лучше пользоваться PrintDialog1 или PrinterSetupDialog?
{RASkov} (2007-05-12 00:12:00) [31]> [0] Dmitry_177 (11.05.07 23:52)
> Printer := TPrinter.Create;
Не обязательно объявлять свою переменную типа TPrinter и далее создавать ее. Достаточно пользовать уже объявленную и созданную в Printers.pas.
> Printer.PageHeight :=
ReadOnly свойство. Ничего здесь писать не надо это все в диалоге настраивается. See also TPrinterSetupDialog.