Страница 1 из 1
Про Report Preview
Добавлено: 07 Ноябрь 2020, 23:38
Игорь Столяров
Привет всем !
Понимаю, что вопрос частный, но вдруг кто-нибудь уже разбирался ...
Зачем в штатном ABC классе предпросмотра отчётов ABREPORT.CLW 2 (два) раза подряд
вызывается SELF.InitWindowPosition() для установки размера и положения окна ?
Возможно в этом есть какой-то божественный замысел, который я не понимаю.
Заранее спасибо !
Про Report Preview
Добавлено: 08 Ноябрь 2020, 0:19
ingasoftplus
уточняйте версию. в 10 такого нет, например
да и в 8, 9 или 11 тоже нет
Про Report Preview
Добавлено: 08 Ноябрь 2020, 1:26
RaFaeL
Нет в штатном ABREPORT.CLW ничего похожего
Про Report Preview
Добавлено: 08 Ноябрь 2020, 7:00
Игорь Столяров
Относясь с глубоким уважением к умению смотреть в книгу - процитирую ABREPORT.CLW С11.0.13630:
Код: Выделить всё
PrintPreviewClass.Display PROCEDURE ...
...
OPEN (PreviewWindow)
SELF.PreviewWindow &= PreviewWindow
SELF.InitWindowPosition (PreviewWindow) ! После открытия окна - установить размер и позицию
SETCURSOR (CURSOR:Wait)
и ещё раз то же самое
Код: Выделить всё
PrintPreviewClass.Open PROCEDURE()
i UNSIGNED,AUTO
CODE
IF NOT SELF.Maximize
SELF.InitWindowPosition (SELF.PreviewWindow) ! Ещё раз, если оконный режим
END
Во избежание недоразумений, просто установим вот так и создадим любой отчёт:
Код: Выделить всё
PrintPreviewClass.InitWindowPosition PROCEDURE (WINDOW PreviewWindow)
CODE
DISPLAY
Message('Всем выйти на свет !')
...
В принципе, у меня уже есть версия чем и почему это делалось,
но хотелось бы услышать: действительно это вижу только я ?
Про Report Preview
Добавлено: 08 Ноябрь 2020, 13:59
RaFaeL
Прям вот так, с русскими комментами? )
В 9 версии нашел, в 6й нет такого
Про Report Preview
Добавлено: 08 Ноябрь 2020, 14:26
kreator
Я видимо заметил первым -
viewtopic.php?f=4&t=4523. В общем, логика непонятна. Идёт хитрый пересчёт в пиксели и с какими-то условиями. Два раза вызов, потому что два разных условия - Maximize и не Maximize. Поскольку у программеров SV не принято писать комменты (принято считать, что программист программиста должен понимать без комментариев), то надо потратить кучу времени и то не факт, что поймёшь. Результат такого программирования - глюк. Правда в этом случае его очень трудно поймать.
Про Report Preview
Добавлено: 08 Ноябрь 2020, 15:49
Игорь Столяров
RaFaeL писал(а): ↑08 Ноябрь 2020, 13:59
Прям вот так, с русскими комментами? )
Нет, конечно. Комменты добавил я для тех, кто не умеет пользоваться поиском.
kreator писал(а): ↑11 Октябрь 2019, 15:24
Сделал обратное преобразование окна из пикселей при записи ini-файла и запретил второй раз (когда окно пиксельное) читать координаты из ini-файла.
Супер ! Вот оно ! Да ! Спасибо за ссылку. Абсолютно независимо вчера-сегодня - я пришёл к такому же решению.
Ископаемая проблема в связке ABREPORT + INIClass есть и закрыта она кривым костылём отцов-основателей.
Просто 98% юзеров и разработчиков не парятся и разворачивают предпросмотр на весь экран.
А как только переключаешь предпросмотр в оконный режим - оттуда начинают лезть тараканы (bugs).
Про Report Preview
Добавлено: 08 Ноябрь 2020, 17:45
finsoftrz
Как ни странно, я сегодня тоже занимался подобным вопросом. Но у меня в ШВС все просто, как капуста.
Размеры фрейма в пикселях сохраняются в глобальных переменных, поэтому отследить улет окна предпросмотра за границы фрейма сложности не представляет, эти переменные доступны в процедуре предпросмотра.
Про Report Preview
Добавлено: 08 Ноябрь 2020, 19:24
Игорь Столяров
finsoftrz писал(а): ↑08 Ноябрь 2020, 17:45
Размеры фрейма в пикселях сохраняются в глобальных переменных
Но есть один момент ...
Координаты окна предпросмотра (notMDI) для отчёта запущенного в потоке
всё равно выставляются от рабочей области фрейма, а не собственно окна фрейма.
Про Report Preview
Добавлено: 08 Ноябрь 2020, 20:00
finsoftrz
Для меня это нормально, фича такая. У меня превью только на то, что надо напечатать. Всякие отчеты по другому формируются.