Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: высота поля в отчете
 
 автор: joka   (09.06.2009 в 13:38)   личное сообщение
 
 

Есть два поля расположенные друг с другом в отчете (как бы строка таблицы)
в первом поле тектовая константа, второе поле со свойством "расширение" в него выводится текст (результат запроса). Соответственно когда текста много высота второго поля становится больше певого и таблица становится некрасивой. Как правильно при расширении второго поля при открытии отчета, увеличить высоту первого поля, чтобы строка из этих двух полей выглядела красиво?

  Ответить  
 
 автор: joka   (09.06.2009 в 13:38)   личное сообщение
 
 

поле1.height = поле2.height не работает:(
не работает в том плане, что поле2.height = первоначальной высоте этого поля в какое выставлен ов конструкторе, а не после расширения...

  Ответить  
 
 автор: Анатолий (Киев)   (09.06.2009 в 14:05)   личное сообщение
 
 

В этом случае есть такие варианты:
1. Линии рисуются методом Me.Line на событии Print раздела;
2. При первом проходе на событии Print раздела запомнить в массиве высоты поля для каждой записи, а при следующих - на событии Format раздела менять высоту раздела и полей.

Я пользуюсь 1-м вариантом. Тема популярна, поройтесь в инете - найдете кучу примеров.

  Ответить  
 
 автор: joka   (10.06.2009 в 09:32)   личное сообщение
 
 

а тут на форуме нет рабочих варинтов? что то погуглил нашел всего два примера которые гуляют по форумам и сайтам, первый переписал что то криво работает, второй получше но тоже что то не то.. может руки не так растут или что то не допонял:)
как вообще Print отрабатывает (то есть что значит при последующих проходах)? когда кстати попробовал считать высоту расширяемого поля в событии Print считалась уже расширеная высота, но присвоить ее другому полю нельзя ругается access, говорит что нельзя уже присвоить высоту при Print :(
извините за такие вопросы... просто с отчетами только начал работать:)

  Ответить  
 
 автор: joka   (10.06.2009 в 15:46)   личное сообщение
 
 

посмотрите вот что в итоге написал

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

и т.д.

можно как то в то выражение подставить данные с нужного мне поля?

  Ответить  
 
 автор: Анатолий (Киев)   (10.06.2009 в 17:58)   личное сообщение
 
 

Ну так сначала сохраните в переменной .Height этого поля и подставляйте ее методу Line вместо ctrl.Height надписи и других полей.
Советую вам рисовать рамки вокруг всех полей, т.к. толщина линий может оказаться разной.
Кстати, толщина рисованной линии зависит от св-ва Me.DrawWide, которое указывается в пикселах, кол-во которых в одном пункте надо еще уметь высчитать. По умолчанию - сверхтонкая, что вы и используете.

  Ответить  
 
 автор: joka   (11.06.2009 в 09:13)   личное сообщение
 
 

воспользовался Me.Controls.("Поле" & номер).Top
вроде работает :)

  Ответить  
 
 автор: SashaD_Sumy   (09.11.2010 в 13:28)   личное сообщение
 
 

Сделал одной мышкой!
Поля 1 - наименование (которое собственно и меняет высоту)
2 - цена
3 - штуки
1) 2,3 делаем без рамки и прозрачным фоном
2) делаем два клона поля 1 у них цвет текста - белый а рамка обычная
3) первый клон рисует правую границу поля3, второй правую границу поля2 (чтобы второй клон перекрыл первый его вырезать и вставить тогда он сверху)
4)теперь поверх(вырезали вставили) поле1 на свое место
получили конструкцию у которой поле1(наименование) и рамки полей 2,3 имеют одно замечательное свойство: они все дружно меняют высоту, так как это одно и тоже поле
5)поля 2,3 с прозрачным фоном и без рамки накладываем сверху (вырезать вставить)
.
Ни одной строчки кода, ни какой отладки, ни какой ошибки типа не влазит не могу....
Сам понимаю тупо НО ....
У меня вообще полей было 14 думаю с выравниваем линий я умер бы раньше

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList