|
|
|
| Есть два поля расположенные друг с другом в отчете (как бы строка таблицы)
в первом поле тектовая константа, второе поле со свойством "расширение" в него выводится текст (результат запроса). Соответственно когда текста много высота второго поля становится больше певого и таблица становится некрасивой. Как правильно при расширении второго поля при открытии отчета, увеличить высоту первого поля, чтобы строка из этих двух полей выглядела красиво? | |
|
| |
|
|
|
| поле1.height = поле2.height не работает:(
не работает в том плане, что поле2.height = первоначальной высоте этого поля в какое выставлен ов конструкторе, а не после расширения... | |
|
| |
|
|
|
| В этом случае есть такие варианты:
1. Линии рисуются методом Me.Line на событии Print раздела;
2. При первом проходе на событии Print раздела запомнить в массиве высоты поля для каждой записи, а при следующих - на событии Format раздела менять высоту раздела и полей.
Я пользуюсь 1-м вариантом. Тема популярна, поройтесь в инете - найдете кучу примеров. | |
|
| |
|
|
|
| а тут на форуме нет рабочих варинтов? что то погуглил нашел всего два примера которые гуляют по форумам и сайтам, первый переписал что то криво работает, второй получше но тоже что то не то.. может руки не так растут или что то не допонял:)
как вообще Print отрабатывает (то есть что значит при последующих проходах)? когда кстати попробовал считать высоту расширяемого поля в событии Print считалась уже расширеная высота, но присвоить ее другому полю нельзя ругается access, говорит что нельзя уже присвоить высоту при Print :(
извините за такие вопросы... просто с отчетами только начал работать:) | |
|
| |
|
|
|
| посмотрите вот что в итоге написал
Private Sub ОбластьДанных_Print(Cancel As Integer, PrintCount As Integer)
Dim ctrl As Control
Me.ScaleMode = 1
Me.DrawStyle = 0
With Me.ОбластьДанных
For Each ctrl In .Controls
If Left(ctrl.name, 7) = "Надпись" Then
Me.Line (ctrl.Left, ctrl.Top)-(ctrl.Left + ctrl.Width, ctrl.Top + ctrl.Height), , B
End If
Next
End With
End Sub
впринципе работает, но есть одна тонкость в выражении "ctrl.Top + ctrl.Height", должен учавствовать не ctrl (у которого имя начинается с "Надпись"), а его правый сосед = поле со свойством расширение. Для этого поля прямоугольник можно не рисовать поскольку если выставить границу то он сам и прорисуется после расширения, но координаты но взять именно с этого поля чтобы высота рамки "Надписи" совпала с высотой соответсвующего ей поля справа.
структура отчета простая
надпись1 | поле1
надпись2 | поле2
надпись3 | поле3
надпись4 | поле4
и т.д.
можно как то в то выражение подставить данные с нужного мне поля? | |
|
| |
|
|
|
| Ну так сначала сохраните в переменной .Height этого поля и подставляйте ее методу Line вместо ctrl.Height надписи и других полей.
Советую вам рисовать рамки вокруг всех полей, т.к. толщина линий может оказаться разной.
Кстати, толщина рисованной линии зависит от св-ва Me.DrawWide, которое указывается в пикселах, кол-во которых в одном пункте надо еще уметь высчитать. По умолчанию - сверхтонкая, что вы и используете. | |
|
| |
|
|
|
| воспользовался Me.Controls.("Поле" & номер).Top
вроде работает :) | |
|
| |
|
|
|
| Сделал одной мышкой!
Поля 1 - наименование (которое собственно и меняет высоту)
2 - цена
3 - штуки
1) 2,3 делаем без рамки и прозрачным фоном
2) делаем два клона поля 1 у них цвет текста - белый а рамка обычная
3) первый клон рисует правую границу поля3, второй правую границу поля2 (чтобы второй клон перекрыл первый его вырезать и вставить тогда он сверху)
4)теперь поверх(вырезали вставили) поле1 на свое место
получили конструкцию у которой поле1(наименование) и рамки полей 2,3 имеют одно замечательное свойство: они все дружно меняют высоту, так как это одно и тоже поле
5)поля 2,3 с прозрачным фоном и без рамки накладываем сверху (вырезать вставить)
.
Ни одной строчки кода, ни какой отладки, ни какой ошибки типа не влазит не могу....
Сам понимаю тупо НО ....
У меня вообще полей было 14 думаю с выравниваем линий я умер бы раньше | |
|
| |