Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2009, 12:20   #1
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
Восклицание Excel, активный принтер.

Доброго времени суток, уважаемые. Прошу не судить строго за то, что тема в этом разделе, а не в разделе Excel - здесь народа больше, да и вопрос по части Delphi больше профилирует...

История такова: есть у меня приложение, в котором необходимо формировать документ со штрих-кодами и подписями к ним (аналог этикеток в гипер-маркетах), есть код, который красивенько в через стандартный сервер Excel2000 формирует страничку... И, наконец, есть прелестный принтер Zebra у заказчика...

А вот и сама ситуёвина: все бы ничего, да беда в том, что принтер этот они принципиально не ставят по умолчанию, а выставить его в Excel не получается. Почему, спросите вы?.. Да потому что Printer.Printers дает нам имена принтеров, а при попытке установить ExcelApplication.ActivePrinter[0] наш Excel ждет имя принтера + [(NeXX:),(LTPX:)]... Вот пожалуй и вопрос: Как мне получить эти Excel'евские приписочки?

Передавать принтер в PrintOut не предлагать - нужно еще и размер бумажки нужный выставить, а если это делать до PrintOut - ExcelApplication громко сругнется, что невозможно установить свойство PaperSize...
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 23.10.2009, 12:39   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
что принтер этот они принципиально не ставят по умолчанию
а почему-бы не выставить на время печати нужный по-умолчанию принтер, а потом вернуть старый?
Код:
var gl_temp: integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
 combobox1.Items.Assign(Printer.Printers);
 combobox1.Text := Printer.Printers[Printer.PrinterIndex]; 
 // запоминаем текущий
 gl_temp:= Printer.PrinterIndex
 // индикация текущего
 //Caption := Printer.Printers[Printer.PrinterIndex];
end;

procedure TForm1.set_default(index: integer);
var IniFile: TIniFile;
  TempStr1, TempStr2: string;
  S: array[0..64] of char;
begin
  with Printer do
  begin
    PrinterIndex := Index;
    TempStr1 := Printers[PrinterIndex];
    System.Delete(TempStr1, Pos(' on ', TempStr1), Length(TempStr1));

    IniFile := TIniFile.Create('WIN.INI');
    try
      TempStr2 := IniFile.ReadString('Devices', TempStr1, '');
      IniFile.WriteString('windows', 'device', TempStr1 + ',' + TempStr2);
      StrCopy(S, 'windows');
      SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
    finally
      IniFile.Free;
    end;
  end;
  //Caption := Printer.Printers[Printer.PrinterIndex]
end;

...
//устанавливаем-
set_default(нужный - или по имени);
...
ваша процедура печати
...
set_default(gl_temp); // возвращаем-
//
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.10.2009, 12:56   #3
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Предложение, несомненно, неплохое - вариант я такой уже рассматривал. Однако тут встает вопрос о практичности такого применения: любой PrintOut Excel'евского сервера напрочь вешает мое приложение до завершения предварительного просмотра (обязательное требование заказчика). А юзвери, как вы понимаете, не прочь поделать что-нибудь еще. Например распечатать свою фотографию... Мне жалко этот маленький зверек с названием Зёбра, предназначенный для печати именно штрих-кодов )) Плюсом к описанному: если у нас уже открыт Excel, то изменение дефолтного принтера будет давать результат рандомной успешности на различных платформах и версиях Excel.

К тому же это уже помимо задачи - спортивный интерес..
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 23.10.2009, 13:04   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
любой PrintOut Excel'евского сервера напрочь вешает мое приложение до завершения предварительного просмотра (обязательное требование заказчика)
- неясно, что является требованием заказчика? предварительный просмотр?

Цитата:
А юзвери, как вы понимаете, не прочь поделать что-нибудь еще. Например распечатать свою фотографию... Мне жалко этот маленький зверек с названием Зёбра, предназначенный для печати именно штрих-кодов
- это проблема ответственности. другой вопрос, если заказчик требует чтобы зверек работал только на штрихкоды, значит нужно делать постоянную проверку посылки на него и блокировать... как, нужно обмозговать (если принтер сетевой, то через netapi можно перехватывать сессии и обрывать, если локальный- пока мыслей конструктивных нет)

Цитата:
если у нас уже открыт Excel, то изменение дефолтного принтера будет давать результат рандомной успешности на различных платформах и версиях Excel
- значит проверять, открыт-ли, если да то завершать, устанавливать и посылать...
вот тут неясно, определитесь, либо вы через эксель делаете, либо из своего приложения печатаете...
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.10.2009, 13:21   #5
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
- неясно, что является требованием заказчика? предварительный просмотр?
Именно.
Цитата:
Сообщение от raxp Посмотреть сообщение
- это проблема ответственности. другой вопрос, если заказчик требует чтобы зверек работал только на штрихкоды, значит нужно делать постоянную проверку посылки на него и блокировать... как, нужно обмозговать (если принтер сетевой, то через netapi можно перехватывать сессии и обрывать, если локальный- пока мыслей конструктивных нет)
Чрезмерно тривиально.
Цитата:
Сообщение от raxp Посмотреть сообщение
- значит проверять, открыт-ли, если да то завершать, устанавливать и посылать...
А представьте, как будет рад заказчик, когда я закрою какой-нибудь не сохраненный годовой отчет бухгалтерии. Утрирую, конечно, но так оно.
Цитата:
Сообщение от raxp Посмотреть сообщение
вот тут неясно, определитесь, либо вы через эксель делаете, либо из своего приложения печатаете...
Происходит формирование документа Excel посредством моего приложения. Печатает, естественно, Excel.
raxp, Вы уже достаточно отклонились от темы - прочтите первый пост.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Активный Эскарон JoSkream Общие вопросы C/C++ 7 21.07.2009 18:29
Принтер hp Ruska882009 Помощь студентам 0 09.04.2009 16:40
Активный сабвуфер (проблемы) Nemesisking Компьютерное железо 0 14.07.2008 20:10
Принтер Gromsky Общие вопросы Delphi 4 05.03.2008 17:08