Перейти к содержанию
Fire Monkey от А до Я
  • 0

Настройки печати


OnePeople

Вопрос

Делаю простинькую настройку печати из Memo

var
m:Single;
i,page,pageall:integer;
DestRect:TRectF;
  textFill: tFillTextFlags;
  stranp:TStringList;
  pt:Boolean;
begin
m:= Memo2.Lines.Count-1;
pageall:=Round(m) div 67;
if Round(m) mod 67>0 then  pageall:=pageall+1;

  textFill := [];
  Printer.Title := Memo2.Lines.Strings[0];
  Printer.Copies := StrToInt(SpinBox1.Text);
 // Printer.Orientation := poLandscape;
  stranp:=TStringList.Create;
  Printer.ActivePrinter:=Printer.Printers[Combobox1.ItemIndex];

  Printer.BeginDoc;

  Printer.Canvas.Font.Size   := 14;
  Printer.Canvas.Font.Family:='Arial';

  page:=1;
  pt:=true;
     while (not Printer.Aborted) and (Printer.Printing) and (pt) do
     begin
     stranp.Clear;
     for I := 0 to 67 do begin
                         if i+((page-1)*67)<=Memo2.Lines.Count-1 then
                         stranp.Add(Memo2.Lines.Strings[i+((page-1)*67)]+' '+IntToStr(pageall));
                         end;
     DestRect := RectF(100,100,(Printer.Pagewidth - 100),(Printer.PageHeight - 100));
     Printer.Canvas.FillText(DestRect,stranp.Text,True,1,textFill,TTextAlign.Center,TTextAlign.Leading);
     Inc(page);
     if (page <= pageall) and (not printer.aborted)
     then begin 
          Printer.NewPage;
          end else begin
                   pt:=false;
                   end;
     end;
  Printer.EndDoc;
  stranp.Free;
end;
Всё отлично работает, кроме того что я хочу открыть настройки печати самого принтера
Printer.ActivePrinter.ShowDeviceOptions;

Не работает( Там даже кода нет( 

 

И ещё вопрос как узнать состояние принтера готов не готов в WinApi будет GetPrinter(hPrinter, PRINTER_INFO_2... , как в Обезьяне сделать?

Изменено пользователем OnePeople
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

через winapi

у меня есть незаконченный проект, мне нужно было для специальных фотопринтеров настройки крутить

не помню, работает ли он окончательно, но для примера подойдет

 

printerInfo.7z

Ссылка на комментарий
  • 0

Спасибо за помощь, не могу завести( Делаю так

uses PrinerAPI;

var
MyPrinter:TMyPrinter;
begin
  if (MyPrinter<>NIL)and(not SameText(MyPrinter.PrinterName, Printer.ActivePrinter.Device)) then
    FreeAndNil(MyPrinter);


  MyPrinter:=TMyPrinter.Create(Printer.ActivePrinter.Device,false);
MyPrinter.PrinterProperties;

Access V в PrinterAPI

 

procedure TMyPrinter.Get_Printer(DevModePtr:PDeviceMode);
var
  pi:TPrinterInfo9;
  sz:integer;
  buf:PPrinterInfo9;
  r:Cardinal;
  InfoKind:integer;
begin
  sz:=0;
  CheckError();
  pi.pDevMode := DevModePtr;
  if UseDefaultSettings then
    InfoKind := 8
  else
    InfoKind := 9;
  r:=GetLastError;
  if r<>0 then
    RaiseLastOSError;


  if not Winapi.Winspool.GetPrinter(Handle, InfoKind, nil, 0, @sz) then
  begin
    r:=GetLastError;
    if r<>ERROR_INSUFFICIENT_BUFFER then
      RaiseLastOSError
    else
      if sz=8 then
    // shit happens. windows не говорит, каого размера буфер ей надо (((
      sz:=10000;
  end;
  buf:=getmemory(sz);
  try


    if not Winapi.Winspool.GetPrinter(Handle, InfoKind, buf, sz, @sz) then
      RaiseLastOSError
    else
      SetLastError(0);
----------------------------------------------------------------------------------------------------------
    MoveMemory(DevModePtr, buf.pDevMode, buf.pDevMode.dmSize+buf.pDevMode.dmDriverExtra);  --ЗДЕСЬ
----------------------------------------------------------------------------------------------------------
  finally
    freeMemory(buf);
  end;

 

P.S. Извеняюсь всё работает, просто от администратора нужно запускать, ничего манифест добавлю)))

Изменено пользователем OnePeople
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...