Pan-SQL |
Отправлено: 09.02.2005, 12:17 |
|
Не зарегистрирован
|
Здравствуйте! Если кто-нибудь знает решение моей задачи, подскажите, очень нужно. А задача собственно такая: мое приложение имеет две формы Form1 и Form2. Первая форма имеет таблицу (Table1) и кнопку для просмотра отчета (Button1). Вторая форма содержит отчет (QuckRep1), и компонент просмотра отчета (Preview1). При нажатии кнопки на первой форме должна открываться вторая форма которая показывает отчет в режиме просмотра. Отчет имеет событие OnPreview:
TQRPRinter* qrPrinter = dynamic_cast(Sender)
Preview1->QRPrinter=qrPrinter;
Вторая форма имеет два события OnActivate:
QuickRep1->Preview();
и OnClose():
Action=caNone;
Preview1->QRPrinter->ClosePreview(Preview1);
Preview1->QRPrinter=NULL;
Action=caFree;
Кнопка на первой форме имеет событие OnClick:
Form2->Shom();
Первый раз все проходит нормально, но при попытке просмотреть отчет второй раз происходит исключение: Access violation at address 00000000. read of address 00000000.
Заранее благодарю.
|
|
Gedeon |
Отправлено: 09.02.2005, 12:37 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
При
У Вас уничтожается вторая форма и соответственно при попытке показать ее второй раз Вы отхватываете AV. Выход — либо не уничтожать форму, либо создавать заново перед показом и не плохо тогда ее сделать не автосоздаваемой.
|
|
Guest |
Отправлено: 09.02.2005, 12:39 |
|
Не зарегистрирован
|
На форму 1 можно положить такой код
CODE |
TForma2 *f2 = new TForma2(Application);
f2->QuckRep1->Preview();
|
должно работать |
|
Pan-SQL |
Отправлено: 09.02.2005, 12:48 |
|
Не зарегистрирован
|
На форму 1 куда? В кнопку? |
|
Gedeon |
Отправлено: 09.02.2005, 12:56 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
QUOTE (Pan-SQL @ 09/02/2005, 11:50) | На форму 1 куда? В кнопку? |
На самом деле вот так будет достаточно
CODE |
TForm2 *f2 = new TForm2(Application);
Form2->Shom(); // ?? Show(); |
|
|
AVC |
Отправлено: 09.02.2005, 15:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Имелось ввиду без этих глупостей OnActivate/OnClose
допустим на кнопку
CODE |
TForma2 *f2 = new TForma2(Application);
// f2->QuckRep1->DataSet = Table1; // так можно добиться незивисимости от dataset
if (needPreview) f2->QuckRep1->Preview();
else f2->QuckRep1->Print();
delete f2;
|
|
|
Gedeon |
Отправлено: 09.02.2005, 15:24 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Да я то понял, вообще как-то все у автора несказанно мудрено сделано, проще надо быть .
|
|
AVC |
Отправлено: 09.02.2005, 15:30 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE | проще надо быть . |
Еще бы.
Я и пытался показать автору более простой способ. В первый раз начальство дернуло — не успел нормально пост набрать. |
|