Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > PrinterSetupDialog


Автор: Akella 17.5.2007, 09:22
Есть код 
Код

  if PrinterSetupDialog1.Execute(Application.ActiveFormHandle) then
    RichEdit1.Print('Kvx-'+UserData.UserName);


как программно указать в PrinterSetupDialog1, чтобы печать была на альбомном формате??

Автор: Addmin 17.5.2007, 10:17
Как написано в книге Архангельского "100 компонентов Delphi 5":

Цитата

Теперь остановимся на компоненте PrinterSetupDialog, вызывающем диалоговое окно установки принтера, представленное на рис. 8.11. Это единственный диалоговый компонент, не имеющий никаких специфических свойств, которые надо было бы устанавливать или читать. Диалог выполняет операции по установке принтера, на котором будет производиться печать, и задании его свойств. Этот диалог не возвращает никаких параметров. 

Думаю, в последующих Delphi тенденция сохраняется smile

С PrintDialog также программно указать не получится. Про PageSetupDialog - не знаю, но, думаю, если где-то и можно настроить, то только в нём.

Автор: Akella 17.5.2007, 11:19
неееее, как-то ж можно?

Добавлено через 3 минуты и 48 секунд
кое-что нашёл, но это минуюя диалог, не совсем то

Код

var
  Device : array[0..cchDeviceName-1] of Char;
  Driver : array[0..(MAX_PATH-1)] of Char;
  Port : array[0..32] of Char;
  hDMode : THandle;
  pDMode : PDevMode;
  sDev : array[0..32] of Char;
begin
  Printer.GetPrinter(Device,Driver,Port,hDMode);
  if hDMode <> 0 then
  begin
    pDMode :=GlobalLock(hDMode);
    if pDMode <> nil then
    begin
      pdMode^.dmOrientation :=2;
      // landscape
      pdMode^.dmPaperSize := DMPAPER_A3
      // (см. win32.hlp DEVMODE)
      GlobalUnlock(hDMode);
    end;
  end;
end;

Автор: Addmin 17.5.2007, 11:36
Akella, ведь в книжке же написано, что PrinterSetupDialog не умеет ни читать, ни писать никакие свойства smile А это у тебя уже WInAPI smile

Добавлено через 1 минуту и 56 секунд
Да и зачем тогда диалог, если ты хочешь сразу печатать альбомным листом? Может тогда при первом запуске программы распечатать стикер с напоминанием для пользователя? (мол, ставь формат альбома!) smile

Автор: Akella 17.5.2007, 15:29
Цитата(Addmin @  17.5.2007,  11:36 Найти цитируемый пост)
Да и зачем тогда диалог, если ты хочешь сразу печатать альбомным листом? 

пользователю нужно предоставить выбор, но по умолчанию нужно выставить альбомный лист

Автор: Addmin 17.5.2007, 16:38
Увы, эти диалоги такого свойства не предоставляют. Всё, что мне приходит в голову - это как-то изменить RadioBox1 после появления диалога . Самое глупое и простое, что постучалось первым - программно дёрнуть курсор (окошко вроде всегда в середине экрана появляется), щёлкнуть по RadioBox и вернуться назад. На секунду мышку заблокировать.

Автор: Akella 18.5.2007, 08:04
бред

Добавлено через 32 секунды
я уверен, что есть способы с пом. WinAPI

Автор: Addmin 18.5.2007, 08:47
Цитата

бред

Я не спорю smile

Цитата

я уверен, что есть способы с пом. WinAPI 

Удачи в дальнейших поисках smile



Автор: Akella 18.5.2007, 09:22
ага, спасибо за помощь smile 

Автор: Addmin 19.5.2007, 18:46
Однако, WInAPI доступ к принтеру всё же есть smile Имя ему - PrintDlg (PrintDialog - VCL-обёртка над ним), Поищи в Яндексе что-то типа этого или "параметры PrintDlg".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)