Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

печать [D7, WinXP]


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо