powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выравнивание высоты !!!
25 сообщений из 28, страница 1 из 2
Выравнивание высоты !!!
    #36035500
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи! Кто-нить знает способ выравнивания высоты объектов (в данном случае текст-боксов) по высоте самого "высокого" из них? Имеется ввиду в режиме предпросмотра формы.

К примеру, имеется форма на основе какого-то динамического набора записей. На форме три текстовых поля (txt1,txt2,txt3), получающих данные из этой выборки. Допустим, при просмотре формы len(txt1.text)=5, len(txt2.text)=134, len(txt3.text)=15. Так вот поле txt2 растягивается по высоте настолько, сколько требуется для отображения всех 134 символов. Как сделать, что бы и другие два поля при этом растягивались до того же значения высоты? Да еще, чтоб данная зависимость была взаимной для все трех объектов, т.е. расширение по самому "высокому".

прим: В режиме конструирования формы есть такая команда для нескольких объектов: Формат\Размер - по самому высокому
Вот нужно тоже самое, только автоматическое (опциональное или программное) для режима предпросмотра формы.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36035610
Высоту прямоугольника, занимаемого текстом можно определить с помощью API функции "DrawTextA" (и еще кучи дополнительных). Перед этим нужно правильно определить ширину рабочей области TextBox-a (с учетом отступов, толщины границы, и т.д.), а после этого высчитать его минимальную высоту. Всё это непросто и неточно.
В отчете реальную высоту поля можно получить на событии Print раздела и нарисовать границы методом Me.Line, в форме такой возможности нет (ИМХО).
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36035631
shkiper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а .Height чем не нравится.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36035645
alt5000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shkiperа .Height чем не нравится.

Поясню скипера.

obj1.height = obj2.height

Высота станет равной. Ну, а как проверить высота какого объекта больше (по высокому) или меньше (по низкому), я думаю, Вы сообразите.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36036995
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to alt5000:

Все хирьня. Оказывается свойство height показывает высоту объекта в режиме формы, а не в режиме предпросмотра. А в режиме формы высота полей у меня одинаковая (та, что задана при конструировании). Тогда я вообще в тупике! Какое свойство отвечает за высоту в режиме предпросмотра формы???
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037384
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037389
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а это режим предпросмотра:
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037405
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот таким образом выведены на форму значения свойства Height
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037410
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь за ошибку в слове Height на форме :)
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037411
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выведи форму в режиме таблицы и пусть клиент сам раздвигает поля и меняет высоту их по своему вкусу
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037421
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliarвот таким образом выведены на форму значения свойства Height

Здесь игра с переводом фокуса совершенно излишняя. Код будет работать и без перевода фокуса
И вообще, проще, просто печатать в дебаггер
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037475
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Надо найти правильное событие. Вот у отчета такие события есть. А у формы, может, и нет.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037653
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rivkin DmitryВыведи форму в режиме таблицы и пусть клиент сам раздвигает поля и меняет высоту их по своему вкусу
Поясняю: форма используется вместо отчета (т.к. есть необходимость в приминении подчиненной формы, чего сделаешь в отчете), но юзеру она будет открываться только в режиме предварительного просмотра, откуда он ее будет распечатывать, других действий с формой и на форме пользователю не требуется. Так вот, в режиме предпросмотра многострочные текстовые поля растягиваются (если в пропертисах указать "расширение - да"). Вот мне и иинтересно, как в VBA называется это свойство и как определить до какой высоты "расширилось" текстовое поле. В режиме формы этого расширения нет (см. скрин) и свойтво height даже при расширении в режиме предпросмотра показывает высоту объекта, заданную при конструировании (т.е. как бы без расширения)

Rivkin DmitryЗдесь игра с переводом фокуса совершенно излишняя. Код будет работать и без перевода фокуса И вообще, проще, просто печатать в дебаггер
Не правда! Свойсво text у тектового поля изменяется ТОЛЬКО после получения фокуса! т.е. после применения метода SetFocus.

[quot Владимир Саныч]...Вот у отчета такие события есть...quot]
Можно по-подробней? Какие именно события? Допустим, я сваяю отчет...
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037792
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Beliar,
авторНе правда! Свойсво text у тектового поля изменяется ТОЛЬКО после получения фокуса! т.е. после применения метода SetFocus.
А нахрена тебе этот text? У контрола есть еще и Value которое можно и не обозначатью
txt = Num.Height прекрасно работает!


А в чем проблема сделать отчет и в нем подчиненный отчет?
Форма не очень хороша для вывода на печать. А репорт можно выводить и на экран и на печать без проблем.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36037800
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BeliarМожно по-подробней? Какие именно события? Допустим, я сваяю отчет...
Ну, там всякие Print и Format. Мне лень проверять, но я надеюсь, что в этих событиях Height показывает то, что надо.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36038001
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычBeliarМожно по-подробней? Какие именно события? Допустим, я сваяю отчет...
Ну, там всякие Print и Format. Мне лень проверять, но я надеюсь, что в этих событиях Height показывает то, что надо.
Есть здесь проблема. Дело в том, что CanGrow растягивает высоты представления на печать текстового поля и секции, но при этом Height и секции и поля остаются, как при дизайне. Может быть есть возможность API функциями достать этот размер, но я глубоко сомневаюсь, что с легкостью его можно будет присвоить другим полям.
Я предлагаю просто сделать трансполрентными рамки всех текстбоксов. И именно в отчете, а не в форме.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36038105
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Rivkin Dmitryно при этом Height и секции и поля остаются, как при дизайне.
Даже в отчете в событиях Print и Format?
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36038740
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rivkin Dmitry Я предлагаю просто сделать трансполрентными рамки всех текстбоксов. И именно в отчете, а не в форме.
Разъясните, пожалуйста, если не трудно.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36038766
BeliarRivkin Dmitry Я предлагаю просто сделать трансполрентными рамки всех текстбоксов. И именно в отчете, а не в форме.
Разъясните, пожалуйста, если не трудно.

Видимо мой ответ (самый первый) остался незамеченным. Повторюсь:
В отчете реальную высоту поля можно получить на событии Print раздела, но изменить высоту других полей там нельзя. Поэтому поля делают без рамок и рисуют линии методом Me.Line.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36039004
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ) Видимо мой ответ (самый первый) остался незамеченным. Повторюсь:
В отчете реальную высоту поля можно получить на событии Print раздела, но изменить высоту других полей там нельзя. Поэтому поля делают без рамок и рисуют линии методом Me.Line.

Ну, до события Print дело вообще может не дойти, к тому же нужно, чтобы просмотр формы или отчета сразу открывался юзеру в надлежащем виде. И на кой мне тогда чертить линии, если, перехватив событие Print, я могу определить значения свойства height, а значит и задать новые значения в этом же событии?
Сейчас пойду, конечно, попробую, но мне это не подойдет, потому что, повторюсь, событие Print может вообще быть не вызвано.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36039101
KrukVN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо опять не внимательно прочли
Анатолий ( Киев )В отчете реальную высоту поля можно получить на событии Print раздела, но изменить высоту других полей там нельзя
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36041214
bvmblad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общий модуль сохраняеш процедуру
и вызываеш ее в отчетах отчете при печате
и будет тебе счастье
не я писал и автора непомню, немного доработал по толщине линий, и бывают контролы в области данных надо разместиь но не печатать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Public Sub DrawTableInDetailSection(objReportSection As Section, Optional lnDrawWidth As Long =  1 )
'==============================================================
'es 15.12.2004
'Для "красивого" обрамления в таблицу области данных табличного
'отчета c изменяемой высотой полей (и соответственно строк целиком).
'Аргумент: objReportSection = Ссылка на область данных отчета
' "Вешается" на событие PRINT области данных отчета - например так:
'     Call DrawTableInDetailSection(Me.ОбластьДанных)
'Разумеется контуры полей в области данных отчета должны быть невидимы
'lnDrawWidth Толщина линий
'==============================================================
Dim DataControl As Control    'обект текущ. контроль
Dim X As Integer
Dim MaxHeight As Integer      'макс. высота в тек строке
Dim MinX As Integer           'координата начала горизонтальной линии
Dim MaxX As Integer           'координата конца горизонтальной линии
Dim StartX As Integer         'координата начала линии по оси X
Dim EndX As Integer           'координата конца линии по оси X
Dim StartY As Integer         'координата начала линии по оси Y
Dim EndY As Integer           'координата конца линии по оси Y

On Error GoTo DrawTableInDetailSectionERR
    MaxX =  0 
    MinX = objReportSection.Parent.Width
    With objReportSection
        'Находим макс высоту в строке
            For Each DataControl In .Controls
              If DataControl.Visible = True Then
             
                X = DataControl.Height
                If MaxHeight < X Then MaxHeight = X
                
                X = DataControl.left + DataControl.Width
                If MaxX < X Then MaxX = X
                
                X = DataControl.left
                If MinX > X Then MinX = X
              End If
                    
            Next
         .Parent.DrawWidth = lnDrawWidth 'Толщина линий

        'рисуем вертикальную в Начале строки
            EndY = MaxHeight
            .Parent.Line (MinX, StartY)-(MinX, EndY)
        'рисуем горизонтальную Над строкой
            .Parent.Line (MinX, StartY)-(MaxX, StartY)
        
        'рисуем горизонтальную под строкой
            .Parent.Line (MinX, EndY)-(MaxX, EndY)
     
        'рисуем вертикальные линии справа от каждого контрола
            For Each DataControl In .Controls
            If DataControl.Visible = True Then
                StartX = DataControl.left + DataControl.Width
                EndX = StartX
                .Parent.Line (StartX, StartY)-(StartX, EndY)
            End If
            Next
    End With
    Exit Sub

DrawTableInDetailSectionERR:
    Err.Clear
End Sub
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36041705
Несколько замечаний относительно метода Line:
1. Св-во DrawWidth задается в пикселах (1 по умолчанию, т.е. "сверхтонкая"). Пиксел - величина переменная, в данном случае зависящая от разрешающей способности принтера. При значении 4 и более разница в толщине линии будет заметна визуально, особенно, если для горизонтальных линий используются элементы Line. Поэтому желательно применять коэффициент или вычислять кол-во пикселов на пункт. Например, чтоб нарисовать линию в 2 пункта, одинаковую (приблизительно) для разных принтеров, можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
Me.ScaleMode =  3  'Пикселы
dblOnePt = Me.ScaleWidth
Me.ScaleMode =  2  'Пункты
dblOnePt = dblOnePt / Me.ScaleWidth
Me.ScaleMode =  1  'Твипы (по умолчанию)
Me.DrawWidth = dblOnePt *  2 
2. При значении DrawWidth более 3, то значения свойства DrawStyle от 1 до 4 (пунктирная, точечная и т.п.) дают сплошную линию.

3. Начиная с А2000 справка по методу Line беззастенчиво врет. Вот правильная:Справка А97Метод Line создает в объекте Report при возникновении события Печать (Print) линии и прямоугольники.

Синтаксис

имяОбъекта.Line [[Step](x1, y1)] - [Step](x2, y2)[, [цвет][, B[F]]]

Данный метод можно использовать только в процедурах обработки события или в макросах, указанных в свойствах событий Печать (OnPrint) или Форматирование (OnFormat) раздела отчета или в свойстве события отчета Страница (OnPage).

Метод Line использует следующие аргументы.

Аргумент Описание
имяОбъекта Объект Report, в котором создается линия или прямоугольник.
Step Ключевое слово, определяющее, что аргументы x1 и y1 указывают положение начальной точки относительно текущих координат, которые определятся текущими значениями свойств CurrentX и CurrentY объекта имяОбъекта.
x1, y1 Значения с плавающей точкой типа Single, определяющие координаты начальной точки. Используемые единицы измерения определятся значением свойств ScaleMode, ScaleLeft, ScaleTop, ScaleHeight и ScaleWidth объекта имяОбъекта. Если данные аргументы опущены, координаты начальной точки линии или прямоугольника определятся текущими значениями свойств CurrentX и CurrentY.
Step Ключевое слово, указывающее на то, что координаты конечной точки указаны относительно начальной точки линии.
x2, y2 Значения с плавающей точкой типа Single, определяющие координаты конечной точки линии или прямоугольника. Данная пара аргументов является обязательной.
цвет Целое значение типа Long, задающее цвет линии или контура прямоугольника в стандарте RGB (красный-зеленый-синий). Если данный аргумент опущен, используется значение свойства ForeColor объекта. Указать цвет позволят также функции RGB или QBColor.
B Если указан параметр B, то создается прямоугольник, а координаты его углов задаются начальной и конечной точками.
F Параметр F используется только вместе с параметром B. Если параметр B указан, указание параметра F приводит к заливке прямоугольника тем же цветом, который используется для контура прямоугольника. При использовании параметра B без параметра F заливка прямоугольника определяется текущими значениями свойств FillColor и Тип фона (BackStyle). Значением по умолчанию свойства Тип фона (BackStyle) для прямоугольников является «Обычный».

Дополнительные сведения

При создании ломаных линий необходимо следить за тем, чтобы координаты начала каждого следующего отрезка линии совпадали с координатами конца предыдущего отрезка.
Толщина линии определяется значением свойства DrawWidth. Способ создания линии или прямоугольника по отношению к фону определяется значениями свойств DrawMode и DrawStyle.
После вызова метода Line свойства CurrentX и CurrentY получат значения координат конечной точки линии или прямоугольника x2 и y2.
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36042656
Beliar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to bvmblad:

Целый день разглядывал предложенный код, до конца еще так и не понял. К примеру как указать для цикла For Each какие именно контролы перелопачивать? А если у меня в области данных есть еще лэйблы и текст-боксы, размеры которых не нужно менять (или обрамлять линиями)?
...
Рейтинг: 0 / 0
Выравнивание высоты !!!
    #36042669
отакота
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BeliarЦелый день разглядывал предложенный код, до конца еще так и не понял. К примеру как указать для цикла For Each какие именно контролы перелопачивать? А если у меня в области данных есть еще лэйблы и текст-боксы, размеры которых не нужно менять (или обрамлять линиями)?делайте общий признак для группы контролов котрые нужно (или не нужно) обрабатывать и в цикле проверяйте его (например, что-то в Tag им всем записать).
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выравнивание высоты !!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]