Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
ВнизВызов диалога настроек печати Найти похожие ветки
← →
Jaroslight © (2009-11-04 00:58) [0]Народ, подскажите, пожалуйста. На форме расположена кнопка "Свойства", нажатие которой должно вызвать окно настроек печати, точно такое же какое вызывается через Панель управления - Устройства и принтеры - Настройка печати. Как это сделать программно в Дельфи?
← →
Германн © (2009-11-04 01:17) [1]
> точно такое же какое вызывается через Панель управления
> - Устройства и принтеры
У меня в XP в панели управления нет "Устройства и принтеры".
← →
TIF © (2009-11-04 06:34) [2]> У меня в XP в панели управления нет "Устройства и принтеры".
+1
Это уже речь про Vista/7
> Устройства и принтеры - Настройка печати
Эмм, ну надо было хоть поточнее рассказать, где там настройку печати искать. Скриншотик бы не помешал.
Раз уж речь про XP, то вот и скриншот из этой ОС:
http://pinpic.ru/img/10468.html
Оно? :)
Тогда см. в MSDN Library описание функций AdvancedDocumentProperties и DocumentProperties:
http://msdn.microsoft.com/en-us/library/dd183350%28loband%29.aspx
http://msdn.microsoft.com/en-us/library/dd183576%28loband%29.aspx
← →
Jaroslight © (2009-11-04 10:55) [3]TIF
Да, речь шла о Windows 7. Вы правильно показали, окно настройки печати вызывается из контекстного меню, щёлкая правой кнопкой мыши по иконке соответствующего принтера в списке устройств через панель управления или меню Пуск. Но здесь без разницы, мне нужно вызвать диалоговое окно настройки печати любого принтера из списка установленных в системе, без установки на форму компонента PrintDialog1. В отличие от PrintDialog1, моя модальная форма Печать должна содержать только GroupBox "Принтер", такой же как в PrintDialog1, а остальные GroupBox"ы отсутствуют. А именно, один ComboBox1 "Принтер", одна кнопка "Свойства", два Label"а под статус и тип. Помимо этого, мне хотелось бы узнать как выводить информацию о статусе (Готов / Занят) и типе.
Если существует другой вариант, например, взять тот PrintDialog1 и удалить из него ненужные мне GroupBox"ы, а оставить только Принтер. Если есть, подскажите.
← →
Jaroslight © (2009-11-04 11:05) [4]
> см. в MSDN Library описание функций AdvancedDocumentProperties
> и DocumentProperties:
> http://msdn.microsoft.com/en-us/library/dd183350%28loband%29.
> aspx
> http://msdn.microsoft.com/en-us/library/dd183576%28loband%29.
> aspx
Спасибо за статьи, но мне бы примеры использования этих функций. Какие параметры, какие значения нужно ввести и прочее.
← →
oldman © (2009-11-04 11:29) [5]
> На форме расположена кнопка "Свойства", нажатие которой
> должно вызвать окно настроек печати
То есть TPrinterSetupDialog не устраивает?
← →
Jaroslight © (2009-11-04 11:54) [6]
> То есть TPrinterSetupDialog не устраивает?
Не совсем. На форме должен быть только GroupBox Принтер и плюс мои собственные.
← →
Anatoly Podgoretsky © (2009-11-04 12:07) [7]> Jaroslight (04.11.2009 10:55:03) [3]
Можешь конечно взять за основу, а можешь глубже влезть, WinAPI содержит достаточное количество функций, что бы сделать, что угодно. Единственная проблема сложность.
Для начала посмотри набор функций Printing and Print Spooler Functions и рядом и реши как быть.
← →
Jaroslight © (2009-11-06 22:49) [8]Спасибо, народ, что участвовали в решении моей проблемы. Особую благодарность TIFу за то что дал ссылку на API функции DocumentProperties.
Слава богу, я всё-таки добился своей цели. Хотя в готовом виде решения я не находил, мне удалось написать скромный код.
Дело так, как вызвать диалог настройки печати, который поставляется с драйвером принтера. По умолчанию, он вызывается через Панель управления - устройства (менеджер устройств, устройства и принтеры в Win 7 и т.д.) правой кнопкой мыши из контекстного меню. Другой способ. Из любого приложения, где есть компонент PrintDialog, нажав кнопку Свойства.
Сейчас я предлагаю свой способ. Его хорошо использовать, если тебе не устраивает PrintDialog или PrintSetupDialog, и предпочитаешь создать свою форму печати, на которую размещаешь кнопку, нажимая которую оп-па открывается то самое окно настройки печати любого принтера (если есть также ComboBox со списком принтеров).
Вот и желанный код:
procedure TF_PrintDlg.FormCreate(Sender: TObject);
begin
Combobox1.Items.Assign(Printer.Printers);
Combobox1.Text := Printer.Printers[Printer.PrinterIndex];
end;
procedure TF_PrintDlg.PrintSettingsClick(Sender: TObject);
const
Defaults: TPrinterDefaults = (pDatatype: nil; pDevMode: nil;
DesiredAccess: STANDARD_RIGHTS_REQUIRED or PRINTER_ACCESS_USE);
var
PrintName: PChar;
hPrinter: THandle;
Device: array[0..1024] of char;
Driver: array[0..1024] of char;
Port: array[0..1024] of char;
hDeviceMode: THandle;
devmode: PDevMode;
begin
Printer.PrinterIndex := Combobox1.ItemIndex;
PrintName := PChar(Combobox1.Text);
Printer.GetPrinter(Device,Driver,Port,hDeviceMode);
if not OpenPrinter(@Device, hPrinter, @Defaults) then
RaiseLastWin32Error;
try
DocumentProperties(F_PrintDlg.ParentWindow,hPrinter,PrintName,
devmode^,devmode^,DM_IN_PROMPT);
finally
ClosePrinter(hPrinter);
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c