Locarus Forum
Locarus.ru => Программы для Windows XP, Vista => Плагины => Тема начата: bigdragon от 14 Март 2012, 18:24:55
-
Добрый день !
Интересует возможность во время генерации отчета обращаться к конкретному плагину для получения от него информации с последующим
отображением этой информации в отчете.
Заранее благодарен за помощь.
-
Добрый день !
Интересует возможность во время генерации отчета обращаться к конкретному плагину для получения от него информации с последующим
отображением этой информации в отчете.
Заранее благодарен за помощь.
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?
-
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?
То есть если я правильно понял можно будет создавать свои переменные для отчетов из плагинов, было бы замечательно.
-
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?
То есть если я правильно понял можно будет создавать свои переменные для отчетов из плагинов, было бы замечательно.
Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).
-
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?
То есть если я правильно понял можно будет создавать свои переменные для отчетов из плагинов, было бы замечательно.
Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).
Можно какую-то краткую вводную по переменным, что и где смотреть?
-
Могу сделать запрос у плагина переменных для отчета (а так же для отображения в точках и списке рейсов), после чего запрос расчета этих переменных, как сейчас сделано для датчиков.
Пойдет?
То есть если я правильно понял можно будет создавать свои переменные для отчетов из плагинов, было бы замечательно.
Практически доделал. Сегодня-завтра выложу на фтп (в раздел бета).
Можно какую-то краткую вводную по переменным, что и где смотреть?
Похоже забыл выложил файл с поправленным заголовком. Выложил на ФТП в раздел бета.
Добавил новый раздел PluginReportFunction и 2 функции:
struct _TPluginReportFunction{
// int AddReportVar(char *Caption, char * Description);
// 2.44 Добавить переменную в список общих переменных отчета (т.е. переменных присутсвующих во всех отчетах)
// Caption - Название переменной
// Description - Описание переменной
// Возвращаемое значение - Идентификатор переменной (см OnCalcReportVar).
const LPAddReportVar AddReportVar;
// double OnCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS);
// 2.44 Рассчитать переменную
// ReportVarID - идентификатор переменной, полученный при создании (см AddReportVar).
// IndexFrom - индекс начала записей для расчета (включительно)
// IndexTo - индекс окончания записей для расчета (включительно)
// ValueS - Текстовое значение переменной. Использовать только если нельзя получить цифровое значение!
// Память под переменную выделять функцией LIGetMemory.
// Возвращаемое значение - Цифровое значение переменной. Если нельзя получить цифровое значение переменной,
// необходимо использовать поле ValueS. При этом Цифровое значение игнорируется.
// Примечание: если ValueS != NULL, используется ValueS, иначе используется Цифровое значение (т.е. значение, возвращаемой функцией).
LPCalcReportVar OnCalcReportVar;
Дальше, думаю, все понятно.
-
А можно примерчик типа "Hello, world!" ?
-
А можно примерчик типа "Hello, world!" ?
Пример писал без проверки. Возможны ошибки синтаксиса, но смысл думаю понятен.
LPCalcReportVar OldOnCalcReportVar;
int MyReportVar1, MyReportVar2;
double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS);
void PluginInitEventHandler()
{
//*CraiD: При совпадение имён, предыдущая переменная перезаписывается новой.
MyReportVar1 = EventHandler->PluginReportFunction->AddReportVar("PluginVar","Это переменная из плагина");
MyReportVar2 = EventHandler->PluginReportFunction->AddReportVar("PluginVar2","Это тоже переменная из плагина");
OldOnCalcReportVar = EventHandler->PluginReportFunction->OnCalcReportVar;
EventHandler->PluginReportFunction->OnCalcReportVar = MyCalcReportVar;
}
double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS)
{
if (ReportVarID == MyReportVar1){
return IndexFrom;
} else if (ReportVarID == MyReportVar2){
ValueS = EventHandler->UtilFunction->GetMemory(100);
strcpy(ValueS,"!!!!!!!!");
return 0;
} else if (OldOnCalcReportVar) return OldOnCalcReportVar(ReportVarID, IndexFrom, IndexTo,ValueS);
return 0;
}
-
ужасный код. питон рулит.
:biggrin:
-
ужасный код. питон рулит.
:biggrin:
+1 :drinks:
-
ужасный код. питон рулит.
:biggrin:
Не знаю насчет всяких там удавов, по-моему все достаточно прозрачно и наивно :friends:.
-
Не знаю насчет всяких там удавов, по-моему все достаточно прозрачно и наивно :friends:.
Да начнётся холивар!
Из недавнего парсер данных из строки вида "|unix-datetime;lat;lon;dir;speed|unix-datetime;lat;lon;dir;speed|...|" на питоне встроенными средствами:
def data_parser(data):
strings = str(data).strip('|').split('|')
data = []
for string in strings:
string = string.split(';')
data.append({
'speed': int(string[4]),
'dir': int(r[3]),
'time': datetime.fromtimestamp(int(r[0])).strftime("%d %b %Y %H:%M:%S"),
'coord': {'lat': float(r[1]), 'lon': float(r[2])}
})
return data
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.
PS Да, я знаю, что у языков разное назначение, но эстетический вид кода это не отменяет.
-
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.
Столько же, сколько этот код на C++ занимает в исходниках питона.
-
"Папа, а сф кэм ты щищаз ражговаривал?" (с)
-
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.
Столько же, сколько этот код на C++ занимает в исходниках питона.
для С++, так же как и для Дельфи уже столько всего понаписано, что при правильном подходе и небольшом количества гугля код будет ничуть не больше.
-
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.
Столько же, сколько этот код на C++ занимает в исходниках питона.
для С++, так же как и для Дельфи уже столько всего понаписано, что при правильном подходе и небольшом количества гугля код будет ничуть не больше.
тут разговор о перегруженности кода у С++ лишними операторами в виде скобок и др мелочей. У питона код выглядит намного более удобочитаемым, а всё из-за того, что табуляция - это часть синтаксиса. Он прост в понимании, а значит передать часть своего кода другому проще. Принимающая сторона быстрее разберется. В общем то в этом и есть громадный плюс питона.
-
тут разговор о перегруженности кода у С++ лишними операторами в виде скобок и др мелочей. У питона код выглядит намного более удобочитаемым, а всё из-за того, что табуляция - это часть синтаксиса. Он прост в понимании, а значит передать часть своего кода другому проще. Принимающая сторона быстрее разберется. В общем то в этом и есть громадный плюс питона.
:friends:
-
Даже представлять неохота, сколько займет тот же код на C++ или Delphi.
Столько же, сколько этот код на C++ занимает в исходниках питона.
Мда... Хорошо хоть не спросил сколько он на ассемблере займёт. :biggrin:
-
И снова по делу. Хотелось бы увидеть все таки рабочий Пример Если Это Возможно Ну Очень Нужно.
-
И снова по делу. Хотелось бы увидеть все таки рабочий Пример Если Это Возможно Ну Очень Нужно.
Приведенный пример был вполне рабочим.
-
Я не сколько не сомневаюсь в вашем профессионализме и вашей компетенции по данному вопросу, но все таки если это вас очень не затруднит не могли бы вы дать рабочий пример кода с рабочей dll. Спасибо заранее за понимание.
-
Я не сколько не сомневаюсь в вашем профессионализме и вашей компетенции по данному вопросу, но все таки если это вас очень не затруднит не могли бы вы дать рабочий пример кода с рабочей dll. Спасибо заранее за понимание.
Куда скинуть?
-
Можно на andrey@locarus.com.ua
-
По прежнему хочется увидеть рабочий пример. Заранее спасибо!!!!
-
По прежнему хочется увидеть рабочий пример. Заранее спасибо!!!!
Отправил.
-
По прежнему хочется увидеть рабочий пример. Заранее спасибо!!!!
Отправил.
Большое спасибо.
-
По прежнему хочется увидеть рабочий пример. Заранее спасибо!!!!
Отправил.
Большое спасибо.
Так как обсуждаемый функционал в плагинах по прежнему нужен я снова с проблемой.
Присланный исходник не удалось собрать но это не совсем важно что бы отсечь лишнее я выделил с него только то что касается взаимодействия плагина с отчетами.
#include "stdafx.h"
#include "BBPlugin.h"
#include <stdlib.h>
#include <TCHAR.H>
#include <windows.h>
#ifdef _MANAGED
#pragma managed(push, off)
#endif
HMODULE hMyModule;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
hMyModule = hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
bool IsActive;
HWND MyDialog;
TPointLL LastMapPoint;
BBPLUGIN_API char PluginCaption[] = "Test Report";
_TPluginsEvent *PluginsEvent;
LPCalcReportVar OldOnCalcReportVar;
int MyReportVar1, MyReportVar2;
double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS);
BBPLUGIN_API void InitBBPlugin(_TPluginsEvent *param)
{
//Проверяем версию движка
int Version = param->GetVersion();
if ((Version / 1000 != MajorVersion) || //Плагины не совместимы с разными MajorVersion
(Version % 1000 < MinorVersion)) //Но совместимы вверх в пределах одинаковой MajorVersion
{
MessageBox(NULL,_T("Incorrect Plugin engine version"), _T("Error"), MB_OK | MB_ICONERROR);
return;
}
MyReportVar1 = param->PluginReportFunction->AddReportVar("PluginVar","Это переменная из плагина");
MyReportVar2 = param->PluginReportFunction->AddReportVar("PluginVar2","Это тоже переменная из плагина");
OldOnCalcReportVar = param->PluginReportFunction->OnCalcReportVar;
param->PluginReportFunction->OnCalcReportVar = MyCalcReportVar;
}
double MyCalcReportVar(int ReportVarID, int IndexFrom, int IndexTo, char* &ValueS)
{
if (ReportVarID == MyReportVar1){
return IndexFrom;
} else if (ReportVarID == MyReportVar2){
ValueS = (char*) PluginsEvent->PluginUtilsFinctions->LIGetMemory(100);
strcpy(ValueS,"!!!!!!!!");
return 0;
} else if (OldOnCalcReportVar) return OldOnCalcReportVar(ReportVarID, IndexFrom, IndexTo,ValueS);
return 0;
}
Для проверки был взят стандартный шаблон отчетов который идет в качестве примера .
Выбираем для отображения в отчете идентификаторов
вложение 1
и смотрим результат
вложение 2
отлично пробуем другую переименую
вложение 3
но тут нас постигает неудача
вложение 4
Пытаемся создать краш репорт и снова не судьба
https://docs.google.com/open?id=0ByJyzZfBvkF_VHhZWWZjb2V4eVk
Все действия проводились под следующей версией
https://docs.google.com/open?id=0ByJyzZfBvkF_aS1CcmYySzFtNWM
Ну вот вроде ситуацию описал.
И прошу вашей помощь или содействия или указания на мою ошибку или не знание предметной области. Одним словом помогите!!!!!!!!!!!!
-
Пытаемся создать краш репорт и снова не судьба
Если отчет об ошибке не отправляется (используется почтовик, неправильно регистрирующий или вообще не регистрирующий объекты MAPI), то можно отправить мне ELF-файл, который создает генератор отчетов об ошибке в папке с программой.
Вообще я проверял работу плагина и у меня все отработало. Использовал список рейсов для испытаний.
Пришлите мне отчет об ошибке и Ваш собранный плагин на Alexei@loсarus.ru
На чем собирали проект? Проверьте в настройках проекта выравнивание (Align) должно быть DWORD (4 byte)
-
Все отлично и работает, спасибо за помощь.
-
Возникли новые трудности и они скорее связаны с выделяемой памятью через LIGetMemory. Хочется уточнить следующие нюансы
1 - почему в примере используется значение 100 для выделение памяти это так нужно или на угад ?
2 - В примере не реализована очистка памяти или она не требуется ( ну типа LI сам все сделает) .
3 - Память под переменную выделяется каждый раз когда вычисляются данные или только один раз.
4 - Если память очищать нужно самостоятельно то добавьте в пример как это правильно делать.
Ну вообщем поделитесь информацией той которую посчитаете нужной.
Для прояснения ситуации приатачил ELF файл и скрин.
Ошибка появляется после третьего или четвертого открытия отчета. Плагин выводит результат в столбец "Комментарий" .
-
Возникли новые трудности и они скорее связаны с выделяемой памятью через LIGetMemory. Хочется уточнить следующие нюансы
1 - почему в примере используется значение 100 для выделение памяти это так нужно или на угад ?
2 - В примере не реализована очистка памяти или она не требуется ( ну типа LI сам все сделает) .
3 - Память под переменную выделяется каждый раз когда вычисляются данные или только один раз.
4 - Если память очищать нужно самостоятельно то добавьте в пример как это правильно делать.
Ну вообщем поделитесь информацией той которую посчитаете нужной.
Для прояснения ситуации приатачил ELF файл и скрин.
Ошибка появляется после третьего или четвертого открытия отчета. Плагин выводит результат в столбец "Комментарий" .
1. 100 это наугад. Можно посчитать необходимый объем. Это же пример.
2. Память очищает LI. Надо будет об этом написать.
3. Каждый раз, так как ЛИ каждый раз ее освобождает.
-
С памятью вроде все понятно. Спасибо за разъяснения.
Но заметил такую вещь, после того как отчет с результатами построен, функция в которой происходит просчет данных для отчета вызывается повторно для всех строк отчета.
И если не подождать окончания вызова функции и закрыть а затем сразу открыть отчет для нового построения то возникает ошибка, скрин приатачил, а если подождать пока вызовы функции закончатся и сформировать повторно отчет то проблем нет.
В связи с этим вопрос как решить данную проблему ?
P.S. Ведь если выводить результат 1 + 1 то повторный вызов функции для всех строк не должен занять много времени и скорее когда пользователь закроет отчет и вдруг откроет его снова то вызов функции уже будет закончен. Но у меня происходит запрос веб сервису и это занимает какое то время, то нет ни какой гарантии что повторные вызовы будут закончены.
-
С памятью вроде все понятно. Спасибо за разъяснения.
Но заметил такую вещь, после того как отчет с результатами построен, функция в которой происходит просчет данных для отчета вызывается повторно для всех строк отчета.
И если не подождать окончания вызова функции и закрыть а затем сразу открыть отчет для нового построения то возникает ошибка, скрин приатачил, а если подождать пока вызовы функции закончатся и сформировать повторно отчет то проблем нет.
В связи с этим вопрос как решить данную проблему ?
P.S. Ведь если выводить результат 1 + 1 то повторный вызов функции для всех строк не должен занять много времени и скорее когда пользователь закроет отчет и вдруг откроет его снова то вызов функции уже будет закончен. Но у меня происходит запрос веб сервису и это занимает какое то время, то нет ни какой гарантии что повторные вызовы будут закончены.
Отчет строит генератор отчета. Как он его строит - вопрос к нему, а не ко мне. Скорее всего он это делает в фоновом режиме.
Он же запрашивает все необходимые переменные.
Можете попробовать кэшировать запросы.
Картинка ошибки мне ничего не говорит, отправляйте баг-репорт, желательно с пояснениями.
-
Выслал баг репорт с пояснениями.
-
С памятью вроде все понятно. Спасибо за разъяснения.
Но заметил такую вещь, после того как отчет с результатами построен, функция в которой происходит просчет данных для отчета вызывается повторно для всех строк отчета.
И если не подождать окончания вызова функции и закрыть а затем сразу открыть отчет для нового построения то возникает ошибка, скрин приатачил, а если подождать пока вызовы функции закончатся и сформировать повторно отчет то проблем нет.
В связи с этим вопрос как решить данную проблему ?
P.S. Ведь если выводить результат 1 + 1 то повторный вызов функции для всех строк не должен занять много времени и скорее когда пользователь закроет отчет и вдруг откроет его снова то вызов функции уже будет закончен. Но у меня происходит запрос веб сервису и это занимает какое то время, то нет ни какой гарантии что повторные вызовы будут закончены.
Вроде нашел опцию, что отчет строился за 2 прохода. Исправил на 1 проход.
Кроме того сделал отмену построения отчета при закрытии окна.
Будет в следующем билде.
-
С памятью вроде все понятно. Спасибо за разъяснения.
Но заметил такую вещь, после того как отчет с результатами построен, функция в которой происходит просчет данных для отчета вызывается повторно для всех строк отчета.
И если не подождать окончания вызова функции и закрыть а затем сразу открыть отчет для нового построения то возникает ошибка, скрин приатачил, а если подождать пока вызовы функции закончатся и сформировать повторно отчет то проблем нет.
В связи с этим вопрос как решить данную проблему ?
P.S. Ведь если выводить результат 1 + 1 то повторный вызов функции для всех строк не должен занять много времени и скорее когда пользователь закроет отчет и вдруг откроет его снова то вызов функции уже будет закончен. Но у меня происходит запрос веб сервису и это занимает какое то время, то нет ни какой гарантии что повторные вызовы будут закончены.
Вроде нашел опцию, что отчет строился за 2 прохода. Исправил на 1 проход.
Кроме того сделал отмену построения отчета при закрытии окна.
Будет в следующем билде.
ОК. Ждем билда.
-
ОК. Ждем билда.
Выложил на фтп в папку бета.
-
Плагин для заполнения остановки переменной plStopAddress адресом взятым с базы Google карт.
http://locarus.com.ua/index.php/podderzhka/viewdownload/5-plaginy-dlya-locarusinformer/18-stopaddress
Можно поставить на общий доступ.
-
работает, но как-то кривовато )) часто не сообщает адрес дает только район, периодически пишет "error geocoding", если много остановок - наглухо виснет... а если уж нашел адрес, то уж больно большая строка получается - лучше было бы дать возможность настраивать глубину адресации, скажем только улица, а не страна-область-город-район-улица
-
работает, но как-то кривовато )) часто не сообщает адрес дает только район, периодически пишет "error geocoding", если много остановок - наглухо виснет... а если уж нашел адрес, то уж больно большая строка получается - лучше было бы дать возможность настраивать глубину адресации, скажем только улица, а не страна-область-город-район-улица
Тестировали на 600 остановках зависания не было. А на скольких остановках у вас виснет.
И если можно немного инфы по воду как выглядит зависание плагина. Так как генератор отчетов в LI не сразу отображает полученные данные от плагина а также в нем нет отображение состояние генерации отчета (а очень надо при работе с внешними системами).
По поводу ошибок Будем дорабатывать.
Спасибо за тестирование и пожелания.
-
Есть вопрос к разработчикам LI. А можно добавить отображение состояния генерации отчета ? А то если происходит получение данных с сторонних
сервисов, а это процесс не мгновенный, не совсем понятно генерируется отчет или нет.
-
Остановок было около 40, при генерации отчета информер завис - приложение не отвечало более 5 минут.
-
Есть вопрос к разработчикам LI. А можно добавить отображение состояния генерации отчета ? А то если происходит получение данных с сторонних
сервисов, а это процесс не мгновенный, не совсем понятно генерируется отчет или нет.
Какого именно?
-
Есть вопрос к разработчикам LI. А можно добавить отображение состояния генерации отчета ? А то если происходит получение данных с сторонних
сервисов, а это процесс не мгновенный, не совсем понятно генерируется отчет или нет.
Какого именно?
В каком отчете будут вызван плагин который будут работать с внешней системой, в том и отображалось. Если это возможно.
-
Есть вопрос к разработчикам LI. А можно добавить отображение состояния генерации отчета ? А то если происходит получение данных с сторонних
сервисов, а это процесс не мгновенный, не совсем понятно генерируется отчет или нет.
Какого именно?
В каком отчете будут вызван плагин который будут работать с внешней системой, в том и отображалось. Если это возможно.
А при чем тут вообще отчет?
По идее адрес должен выдаваться в момент формирования точек, предупреждений и остановок, а не в момент формирования отчета.
-
Есть вопрос к разработчикам LI. А можно добавить отображение состояния генерации отчета ? А то если происходит получение данных с сторонних
сервисов, а это процесс не мгновенный, не совсем понятно генерируется отчет или нет.
Какого именно?
В каком отчете будут вызван плагин который будут работать с внешней системой, в том и отображалось. Если это возможно.
А при чем тут вообще отчет?
По идее адрес должен выдаваться в момент формирования точек, предупреждений и остановок, а не в момент формирования отчета.
Не совсем понял о каком адресе идет речь ?
Отображение состояния генерации отчета нужно для плагина который вызывается LI при генерации отчета (когда LI находит в шаблоне отчета иницилизированую плагином переменную).
-
Не совсем понял о каком адресе идет речь ?
Отображение состояния генерации отчета нужно для плагина который вызывается LI при генерации отчета (когда LI находит в шаблоне отчета иницилизированую плагином переменную).
А зачем Вам переменная в отчете?
Для адреса? но для этого есть отдельный механизм никак на отчеты не завязанный, который подставит адреса всем объектам еще до отчета.
-
Не совсем понял о каком адресе идет речь ?
Отображение состояния генерации отчета нужно для плагина который вызывается LI при генерации отчета (когда LI находит в шаблоне отчета иницилизированую плагином переменную).
А зачем Вам переменная в отчете?
Для адреса? но для этого есть отдельный механизм никак на отчеты не завязанный, который подставит адреса всем объектам еще до отчета.
В API к LI для написания плагинов есть возможность заполнять отчет результатом работы плагина. И так как плагин взаимодействует с внешним сервисом то генерация отчета происходит не моментально. Следовательно пользователю ни как не отображается состояние генерации отчета. А так же не ясно когда в отчете готовы все страницы(процесс создания отчета завершился).
С этого следует вопрос. Можно ли добавить отображение состояния генерации отчета?
Если да то как скоро можно ожидать изменений ?
Заранее спасибо за ответ.
-
В API к LI для написания плагинов есть возможность заполнять отчет результатом работы плагина. И так как плагин взаимодействует с внешним сервисом то генерация отчета происходит не моментально. Следовательно пользователю ни как не отображается состояние генерации отчета. А так же не ясно когда в отчете готовы все страницы(процесс создания отчета завершился).
С этого следует вопрос. Можно ли добавить отображение состояния генерации отчета?
Если да то как скоро можно ожидать изменений ?
Заранее спасибо за ответ.
Пока отчет генерится в окне предпросмотра - можно, а вот когда нажата кнопка "Печать" - то нельзя.
Вернее не так. Я могу выводить прогрессбаром текущую запись, но вот отображать этот прогрессбар могу только на своей форме, поэтому при нажатии кнопки "Печать", когда окно развернется на весь экран прогрессбара не будет видно, хотя отображать процесс он будет.
-
В API к LI для написания плагинов есть возможность заполнять отчет результатом работы плагина. И так как плагин взаимодействует с внешним сервисом то генерация отчета происходит не моментально. Следовательно пользователю ни как не отображается состояние генерации отчета. А так же не ясно когда в отчете готовы все страницы(процесс создания отчета завершился).
С этого следует вопрос. Можно ли добавить отображение состояния генерации отчета?
Если да то как скоро можно ожидать изменений ?
Заранее спасибо за ответ.
Пока отчет генерится в окне предпросмотра - можно, а вот когда нажата кнопка "Печать" - то нельзя.
Вернее не так. Я могу выводить прогрессбаром текущую запись, но вот отображать этот прогрессбар могу только на своей форме, поэтому при нажатии кнопки "Печать", когда окно развернется на весь экран прогрессбара не будет видно, хотя отображать процесс он будет.
Мне кажется что этого будет достаточно. Когда можно будет потестить ?