Access: высота отдельных полей в отчете

Программирование на Visual Basic for Applications
uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Access: высота отдельных полей в отчете

Сообщение uhm » 01.08.2007 (Ср) 15:33

Делаю отчет в Access, визуально он должен выглядеть как таблица с границами, примерно так:

Код: Выделить всё
+----------------+---+
|Строка 1        |  3|
+----------------+---+
|Строка 2        |  5|
+----------------+---+


Оформлено это как поля с включенной границей. Проблема в том, что там, где у меня "Строка 1" и "Строка 2", могут быть достаточно длинные строки, которые не влезают в ширину ячейки. Я установил для обеих ячеек свойство "Расширение" в "Да", но результат получается вот такой:

Код: Выделить всё
+----------------+---+
|Строка 1        |  3|
+----------------+---+
|Длинная         |  5|
|Строка 2        +---+
+----------------+


вместо желаемого:

Код: Выделить всё
+----------------+---+
|Строка 1        |  3|
+----------------+---+
|Длинная         |  5|
|Строка 2        |   |
+----------------+---+


Можно ли что-то с этим сделать (подозреваю, что если можно, то VBA будет не при чем, но все же...)?
Быть... или не быть. Вот. В чём вопрос?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.08.2007 (Ср) 15:49

Попробуй границу убрать и заменить ее на линию.
Возможно, линия будет смещаться.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 01.08.2007 (Ср) 16:04

Немного неудобно, но вроде работает!


Спасибо!
Быть... или не быть. Вот. В чём вопрос?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.08.2007 (Ср) 16:06

Можешь еще попробовать у поля с "5" высоту сделать на один пиксел выше, чем у поля слева (вернее, чтобы его нижняя граница была на пиксел ниже нижней границы левого поля). Может сработает.
Lasciate ogni speranza, voi ch'entrate.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 01.08.2007 (Ср) 16:21

Мдя, поторопился :) В первом способе, появляются проблемы с вертикальными полосами по краям и между ячейками - они не растягиваются при изменении высоты строки.

Второй способ, увы, просто не работает.
Быть... или не быть. Вот. В чём вопрос?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 02.08.2007 (Чт) 12:55

Давно не делал, но там должно быть все просто - в каком-то событии перед печатью (что-то вроде BeforePrint) становится известна высота секции Detail - в этом событии кодом растягиваешь вертикалные линии по высоте секции...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 02.08.2007 (Чт) 14:41

Ок, попробую. Спасибо!
Быть... или не быть. Вот. В чём вопрос?

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 13.08.2007 (Пн) 21:07

хех. когда-то давно я столкнулся с этой проблемой, но в итоге сдался и стал просто жёстко задавать высоту полей или делать их обрамление "с тенью" (рисуется только нижняя граница). или рисовать одну горизонтальную линию, которая отодвигается расширяющимся полем вниз.

а сегодня сочинил:
Код: Выделить всё

Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
Dim fld As String, defH As Integer
fld = "поле1" 'это имя самого длинного по содержанию поля
defH = 300 'стандартная высота поля в одну строчку
Me(fld).Height = defH * (IIf(Me.TextWidth(Me(fld)) \ _
    Me(fld).Width = 0, 1, Me.TextWidth(Me(fld)) / Me(fld).Width))
Me.поле2.Height = Me(fld).Height 'подгоняем под его размеры остальные поля
'и т.д.
Me.ОбластьДанных.Height = Me(fld).Height
End Sub

ругайте ;)

а сам пока повспоминаю, где же мне это было нужно...
VBA, MSA97


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 67

    TopList