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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2013, 08:07   #11
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Paskal1 Посмотреть сообщение
Смущает меня вот эти параметры один входной а другой выходной но почему они одинаковые?

Код:
pPrInfo2.pDevMode^,pPrInfo2.pDevMode^
Почему одинаковые, это у автора спросите, зачем ему не интересно сохранять входные данные)
_______________

Finally it comes to an end))

Фигня оказывается в том, что флаги DM_IN_BUFFER и DM_OUT_BUFFER означают следующее: если они есть, топри вызове функции аргументы pDevInputMode и pDevOutputMode используются, а если флаги не указаны - то на соответствующие аргументы внимания не обращается.
Другими словами, DM_IN_PROMPT в одиночку бесполезен, но его надо комбинировать с другими.

Последний раз редактировалось Smogg; 11.02.2013 в 12:20. Причина: ниче не получается..
Smogg вне форума Ответить с цитированием
Старый 11.02.2013, 13:33   #12
Paskal1
Пользователь
 
Аватар для Paskal1
 
Регистрация: 22.10.2010
Сообщений: 69
По умолчанию

А как мне сохранить входные данные я так понимаю это то что выставил юзер
изменил
Код:
   DocumentProperties(0,Handle,pPrName,pPrInfo2.pDevMode^,pPrInfo2.pDevMode^, DM_IN_BUFFER or DM_OUT_BUFFER or DM_IN_PROMPT);   // вносим изменения в DevMode
Paskal1 вне форума Ответить с цитированием
Старый 11.02.2013, 14:14   #13
Paskal1
Пользователь
 
Аватар для Paskal1
 
Регистрация: 22.10.2010
Сообщений: 69
Лампочка

Получилось с горем по полам
БОЛЬШОЕ СПАСИБО Smogg БЕЗ ТЕБЯ Я НЕ ЗНАЮ ЧТОБ ДЕЛАЛ
ПОКЛОН И БЛАГОДАРНОСТЬ СПАСИБО!
вот код процедуры вдруг кому понадобится
Окно открывается и при наж ок настройки сохраняются.
Код:
procedure TForm3.mySetPrint(Sender: TObject);
Var
pPrName : PChar;
Handle: THandle;
dwNeeded: THandle;
pPrInfo2:PPrinterInfo2;
MyOrientation:Integer;
begin
      pPrName:=PChar(sComboBox1.Text); // Берём имя принтера
      OpenPrinter(pPrName,Handle,nil); // Хэндл
      GetPrinter(Handle,2,nil,0,@dwNeeded); // в dwNeeded - размер, который нужно выделить для структуры
      pPrInfo2:=PPrinterInfo2(GlobalAlloc(GHND,dwNeeded)); //выделяем
      GetPrinter(Handle,2,pPrInfo2,dwNeeded,@dwNeeded);  // читаем в pPrInfo2
      pPrInfo2.pDevMode.dmFields:=DM_ORIENTATION;   // ставим чё нам нада
      pPrInfo2.pDevMode.dmOrientation:=MyOrientation; // ставим чё нам нада
      pPrInfo2.pSecurityDescriptor:=nil;              // ставим чё нам нада
       try
        DocumentProperties(0,Handle,pPrName,pPrInfo2.pDevMode^,pPrInfo2.pDevMode^, DM_IN_BUFFER or DM_OUT_BUFFER or DM_IN_PROMPT);   // вносим изменения в DevMode
        finally
       //RaiseLastWin32Error;
      SetPrinter(Handle,2,pPrInfo2,0);  // апдейтим
      GlobalFree(Cardinal(pPrInfo2)); // чистим
      ClosePrinter(Handle);
       end;
end;
Paskal1 вне форума Ответить с цитированием
Старый 11.02.2013, 15:22   #14
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Paskal1 Посмотреть сообщение
А как мне сохранить входные данные я так понимаю это то что выставил юзер
Код:
DocumentProperties(0,Handle,pPrName,pPrInfo2.pDevMode^,pPrInfo2.pDevMode^,
 DM_IN_BUFFER or DM_OUT_BUFFER or DM_IN_PROMPT);   // вносим изменения в DevMode
Код:
LONG DocumentProperties(
  _In_   HWND hWnd,
  _In_   HANDLE hPrinter,
  _In_   LPTSTR pDeviceName,
  _Out_  PDEVMODE pDevModeOutput,
  _In_   PDEVMODE pDevModeInput,
  _In_   DWORD fMode
);
Указывать другой pDevModeOutput буфер для получения измененных настроек. Если используете один и тот же, то он просто переписывается.

Правда, кое-какие (далеко не все) APIшные функцию могут изменять передаваемые им аргументы на черте-что, когда по идее не должны, но меняют. Как здесь, например, pDevModeInput после отработки функции меняться не должно, если используется только для чтения данных, но... кто там этих микрософтовцев знает, какие еще приколы с безопасностью им придут в голову.

P.s. Пожаст)
Smogg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не рисуются кнопки на главном окне Sylar9 Win Api 20 20.07.2012 15:09
Кнопки в pop-up окне sem_1989 JavaScript, Ajax 1 01.08.2011 17:50
Как сделать неактивной кнопку печати в окне предварительного просмотра PSZ Microsoft Office Excel 0 05.11.2010 15:29
Настройка печати Максим_Леонидович Компоненты Delphi 3 26.09.2008 20:45
кнопки в окне mahsus Общие вопросы .NET 0 29.02.2008 12:42