Вопрос:
Как определить длину строки для 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;
Админ: Пользуемся тегами для оформления кода!
хотелось бы ничего не отправлять на принтер, а просто узнавать эти параметры (хочу организовать предпросмотр)