![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Вопрос:
Как определить длину строки для Printer без printer.BeginDoc? Есть ф-ии: Код:
//----------Перевод значения String-->Char---------------------------------------------// function strtoPchar(s:string):Pchar; begin S := S+#0; result:=StrPCopy(@S[1], S) ; end; //---определение максимальных значений страницы---------------------------------------/ function MaxCoordForPrint: TPoint; begin try MaxCoordForPrint.X:=GetDeviceCaps(Printer.Handle, HORZRES);//Horizontal width in pixels MaxCoordForPrint.Y:=GetDeviceCaps(Printer.Handle, VERTRES); //Vertical height in pixels except on EPrinter do callErr(8551); end; end; //---Определение кол-ва строк и символов в строках для текущего принтера-----------------// procedure Define_count_str; var DC:HDC; PrinterCanvasFontHandle:HFONT; Save: THandle; begin //определяем разрешающую способность X_Width:=MaxCoordForPrint.X; Y_Height:=MaxCoordForPrint.Y; // определение количества символов в строке - Kol_Simvol_str PrinterCanvasFontHandle:=GetPrinterCanvasFontHandle; // ф-ия передает handle DC := GetDC(0); Save := SelectObject(DC, PrinterCanvasFontHandle); P_Stroka_Tabl:=strtoPchar(P_str); if GetTextExtentPoint32A(DC,P_Stroka_Tabl,StrLen(P_Stroka_Tabl),P_Size) then Kol_Simvol_str:=round(X_Width/(P_Size.cx/strlen(P_Stroka_Tabl)))-1 // погрешность в меньшую сторону т.к. может криво захватить бумагу else Kol_Simvol_str:=100; // определение количества строк - Kol_Str_Height Kol_Str_Height:= {round}trunc(Y_Height/(P_Size.cy+P_Size.cy*0.03937)); //округляем в нижнюю сторону -на всякий случай ReleaseDC(0, DC); end; дело в том, что пока нет команды Printer.BeginDoc я не знаю как получить Printer.Canvas.Handle и не корректно работает ф-ия GetDC и GetTextExtentPoint32A. Тоесть в P_Size кладутся неверные значения... Основная задача-получить правильный P_Size. все работает только когда использую Printer.BeginDoc; Define_count_str; Printer.EndDoc; хотелось бы ничего не отправлять на принтер, а просто узнавать эти параметры (хочу организовать предпросмотр) Последний раз редактировалось Admin, 21.04.2013 в 20:17. |
#2
|
|||
|
|||
![]() Код:
Printer.Abort; Ну в смысле Код:
Printer.BeginDoc; Define_count_str; Printer.Abort; Последний раз редактировалось M.A.D.M.A.N., 23.04.2013 в 12:30. Причина: Пользуемся кнопкой "правка"! |
#3
|
||||
|
||||
![]() не понятно зачем, если не собираешься печатать, иметь контекст принтера (узнавать длину строки на нем)?
Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 23.04.2013 в 13:07. |