| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MS Access > свойство CanGrow поля отчёта |
| Автор: kapbepucm 6.11.2007, 17:27 |
| В стандартном поле отчёта есть свойство CanGrow. Возможно ли програмно узнать на сколько поле "хочет вырати", если CanGrow=False? Добавлено через 1 минуту и 30 секунд Мне не надо расширять строки, только хочу цифры знать. |
| Автор: kapbepucm 7.11.2007, 11:06 |
| "Копаясь" в этом деле, получил странный эффект. При установке CanGrow=True отчёт печатает пустые поля. Чем такое может быть вызвано? |
| Автор: Akina 7.11.2007, 11:08 |
Refresh/Repaint/Requery/Re(чего там еще бывает)... Да! а свойство-то меняем в режиме макета? |
| Автор: kapbepucm 7.11.2007, 13:40 |
| Режим Design view. Только вот незадача, куда я ни писал RepaintObject, так всё равно не хочет показывать написанное в поле, но всё становится на своё место, как только CanGrow=False |
| Автор: Akina 7.11.2007, 13:54 |
kapbepucm, т.е. если я правильно понимаю:
|
| Автор: kapbepucm 7.11.2007, 14:06 |
| Нет, всё ещё проще: 1)вариант Report.Open Design CanGrow=False Report.Save Report.Close Report.Open View Здесь вижу всё 2)вариант Report.Open Design CanGrow=True Report.Save Report.Close Report.Open View Здесь вижу только те поля у которых CanGrow=False Добавлено через 1 минуту и 11 секунд И делаю пока всё ручками |
| Автор: kapbepucm 14.4.2009, 09:20 |
| Проблема несколько видоизменилась. Теперь надо узнать "насколько выросло" поле в "повторяющейся" секции Detail. Изначально у поля стоит значение CanGrow=True. Но в событии OnFormat этой секции свойство Height показывает старое значение. Вопрос: как узнать новое? |
| Автор: bopoha 14.4.2009, 11:44 |
На событии OnPaint() |
| Автор: Akina 14.4.2009, 11:47 | ||
Получать его в методе, вызываемом, когда форматирование уже завершено. |
| Автор: kapbepucm 14.4.2009, 12:48 | ||||
Псевдографически у меня такой отчёт:
|
| Автор: Akina 14.4.2009, 13:12 |
| Ну вообще-то так и должно получиться без всяких дополнительных телодвижений... |
| Автор: kapbepucm 14.4.2009, 15:07 | ||||
Добавлено через 1 минуту и 44 секунды "Растёт" только то поле, которое длинное, а надо, чтобы все. |
| Автор: Akina 14.4.2009, 15:20 |
| А зачем бордюр у ПОЛЯ? Прорисуй прямые между полями и по верху области данных и подножки - они и образуют тебе сетку. |
| Автор: kapbepucm 14.4.2009, 15:55 | ||
Гмм... Но всё равно, чтобы нарисовать вертикальную линию, своиство Height кое-где надо увеличивать. Проблема осталась
Проблема: нужный вертикальный рамер можно узнать, когда уже поздно менять (OnPrint). Менять что-либо в секции возможно только в OnFormat- но там невозможно узнать, насколько надо менять. Какой выход? |
| Автор: bopoha 14.4.2009, 16:04 |
| Я такую задачу уже решал. Поищу дома. |
| Автор: kapbepucm 14.4.2009, 17:18 |
| Буду с нетерпением ждать |
| Автор: bopoha 15.4.2009, 23:27 | ||
| Задача решалась следующим образом: В области данных все поля размещались в одну линию. Под полями размещена линия (элемент управления): lineEndRow. Алгоритм вызывается на событие OnPaint и рисует вертикальные линии высотой равной lineEndRow.Top Например (c работающего кода) :
|
| Автор: kapbepucm 20.4.2009, 10:33 |
| Простите за нескромный вопрос. Я в Design view (Access2000) не могу найти событие OnPaint Не подскажите событие OnPaint к какому обьекту надо подцепить? |
| Автор: bopoha 26.4.2009, 22:03 |
| kapbepucm, к тому разделу, где необходимо рисовать линии. В указанном выше примере это Область данных. |