C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как получить сообщение от окна PrintDlg?, что было нажато, Ok или Cansel
Wasabi
Отправлено: 21.09.2004, 18:44


Ученик-кочегар

Группа: Участник
Сообщений: 23



Народ как понять что было нажато в ПринтДиалоге, Ок или Cansel?
Я так понимаю надо юзать WinAPI? Честна скажу — шарю в нем слабо. Не могу допетрить как получить сообщение от этого окна, чтобы понять результат sad.gif

Поможите?

Сенькс.
Doga
Отправлено: 21.09.2004, 19:05


Мастер участка

Группа: Участник
Сообщений: 575



TPrintDialog::Execute

virtual bool __fastcall Execute(void);

Description

Execute opens the Print dialog, returning true when the user clicks Print and false when the user clicks Cancel.
creater
Отправлено: 21.09.2004, 19:24


Станционный диспетчер

Группа: Участник
Сообщений: 120



QUOTE (Wasabi @ 21/09/2004, 19:46)
Народ как понять что было нажато в ПринтДиалоге, Ок или Cansel?
Я так понимаю надо юзать WinAPI? Честна скажу — шарю в нем слабо. Не могу допетрить как получить сообщение от этого окна, чтобы понять результат sad.gif

Поможите?

Сенькс.

Пример из фака... smile.gif

CODE

void __fastcall TForm2::Button1Click(TObject *Sender)
{
 Close(); //Закрываем форму
 ModalResult=mrOk; //Результат закрытия — mrOk
}
...
void __fastcall TForm2::Button2Click(TObject *Sender)
{
 Close(); //Закрываем форму
 ModalResult=mrCancel; //Результат закрытия — mrCancel
}

Код достаточно понятен — метод Close() закрывает окно, и в свойство ModalResult второй формы мы раписываем значение, соответствующее нажатой пользователем кнопки. Осталось переделать код для показа второй формы. Измените его следующим образом:

 ...
 if (Form2->ShowModal()==mrOk) //Если нажата кнопка OK
   Form1->Caption=Form2->Edit1->Text; //то меняем заголовок у формы
 ...
Wasabi
Отправлено: 21.09.2004, 20:40


Ученик-кочегар

Группа: Участник
Сообщений: 23



Вы меня не поняли, я не юзаю TPrintDialog!
Я юзаю компонент, для работы с изображениями, там криво реализован метод вызывающий диалог принтера(системное окно), после клавиши Cansel все равно идет печать. Так вот просто я хочу перехватить нажатие отмены и сделать выход.
xim
Отправлено: 22.09.2004, 09:19


Станционный диспетчер

Группа: Участник
Сообщений: 143



Если под системным окошком подразумевается результат вызова
BOOL PrintDlg (LPPRINTDLG) (из comdlg32.dll), то результат его вызова:

OK  — TRUE
CanCel — FALSE
Guest
Отправлено: 22.09.2004, 11:41


Не зарегистрирован







QUOTE (xim @ 22/09/2004, 10:21)
Если под системным окошком подразумевается результат вызова
BOOL PrintDlg (LPPRINTDLG) (из comdlg32.dll), то результат его вызова:

OK  — TRUE
CanCel — FALSE

когда пишу

if(PrintDlg()==false)

получаю ругань от компилятора
xim
Отправлено: 22.09.2004, 13:39


Станционный диспетчер

Группа: Участник
Сообщений: 143



У PrintDlg есть параметр. Примерно должно быть так:

PRINTDLG pdParams;
ZeroMemory(&pdParams,sizeof(PRINTDLG));
pdParams.lStructSize=sizeof(PRINTDLG);
... <настраиваются параметры диалога (для теста можно не выполнять)>
if(PrintDlg(&pdParams)==true)
{
// печать
}else
{
// тот самый false — вываливаемся из области видимости печати
}
Wasabi
Отправлено: 23.09.2004, 08:41


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (xim @ 22/09/2004, 14:41)
У PrintDlg есть параметр. Примерно должно быть так:

PRINTDLG pdParams;
ZeroMemory(&pdParams,sizeof(PRINTDLG));
pdParams.lStructSize=sizeof(PRINTDLG);
... <настраиваются параметры диалога (для теста можно не выполнять)>
if(PrintDlg(&pdParams)==true)
{
// печать
}else
{
// тот самый false — вываливаемся из области видимости печати
}

не катит это.
Народ подскажите просто как зная хэндл окна (в данном случае окно диалога принтера), получить от окна результат ?

Спасиб.

Вернуться в Вопросы программирования в C++Builder