Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать что в системе установлен хотя бы один принтер?


Pavel__ ©   (2005-12-16 22:42:00) 

Здравствуйте, собственно сабж. Printer.Printers.Count вряд ли поможет - список насколько я понял формируется при запуске приложения, а обновлять его каждый раз когда требуется слишком ресурсоемко. Спасибо.


Pavel__   (2005-12-17 02:49:00) [1]


> Или мой юмор был не понят?


Был понят :) Действую от обратного - узнаю есть ли принтер и с ним работаю, в противном случае - не даю работать пользователю и не показываю всяких глупых сообщений об ошибках. Вот :)


Германн   (2005-12-17 02:31:00) [2]


> Pavel__   (17.12.05 02:25) [6]
>
> Дык наоборот, надо чтоб не кричало об этом и не было обращений
> к несуществующему устройству :)

Ты же в сабже спросил, " Как узнать что в системе установлен хотя бы один принтер?" Ну я и ответил. Или мой юмор был не понят?


Pavel__   (2005-12-17 02:25:00) [3]


> Радикальный способ решения сабжа! Задействовать в программе
> QReport. На моей памяти он при старте программы всегда "громко
> кричал", если в системе  не был установлен ни один принтер.
>  :-)


Дык наоборот, надо чтоб не кричало об этом и не было обращений к несуществующему устройству :)


Германн   (2005-12-17 01:23:00) [4]

Радикальный способ решения сабжа! Задействовать в программе QReport. На моей памяти он при старте программы всегда "громко кричал", если в системе  не был установлен ни один принтер. :-)


Pavel__   (2005-12-16 23:08:00) [5]


function PrintersCount: Integer;
var
 LineCur, Port: PChar;
 Buffer, PrinterInfo: PChar;
 Flags, Count, NumInfo: DWORD;
 I: Integer;
 Level: Byte;
begin
 if Win32Platform = VER_PLATFORM_WIN32_NT then
 begin
   Flags := PRINTER_ENUM_CONNECTIONS or PRINTER_ENUM_LOCAL;
   Level := 4;
 end
 else
 begin
   Flags := PRINTER_ENUM_LOCAL;
   Level := 5;
 end;

 Count := 0;
 EnumPrinters(Flags, nil, Level, nil, 0, Count, NumInfo);

 Result := Count;
end;


Pavel__   (2005-12-16 23:06:00) [6]

Все, извиняюсь :). Это все природная лень, покопал исходник, вижу как сделать, пишу функцию. Спасибо :)


Pavel__   (2005-12-16 23:02:00) [7]


> неправда ваша (с)


Я просто не стал углублятся в подробности, суть одна - список постоянен, принтеры уже могут быть удалены а список никуда не денется. А знать есть ли принтеры в системе нужно очень часто.


kami   (2005-12-16 22:54:00) [8]

Pavel__   (16.12.05 22:42)
формируется при запуске

неправда ваша (с)
Он формируется при первом обращении к свойству Printers.
как получить список принтеров - можно посмотреть, как это делает функция GetPrinters класса Printer


Наверх

Титульная страница Поиск, карта сайта Написать письмо