powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись 4 - Хочу увидеть чудеса
24 сообщений из 24, страница 1 из 1
Запись 4 - Хочу увидеть чудеса
    #39785337
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
---------------

И так,
На Главной форме располагается Комбобокс и Главная пдч.
При выборе записи в Комбобоксе,
информация отображается в Главной пдч.

Высота Главной пдч на Главной форме
зависит от содержимого Поля1(мемо в таблице). на Главной пдч.
---------------
Использую такой модуль.
Код: vbnet
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.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
Option Compare Database
Option Explicit

Private Declare Function apiGetDC Lib "user32" Alias "GetDC" (ByVal hWnd As Long) As Long
Private Declare Function apiDeleteDC Lib "gdi32" Alias "DeleteDC" (ByVal hdc As Long) As Long
Private Declare Function apiDeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal obj As Long) As Long

Private Declare Function apiCreateFont Lib "gdi32" Alias "CreateFontA" _
    (ByVal LH As Long, _
    ByVal LW1 As Long, _
    ByVal LE As Long, _
    ByVal LO As Long, _
    ByVal LW As Long, _
    ByVal LI As Long, _
    ByVal LU As Long, _
    ByVal LS As Long, _
    ByVal LC As Long, _
    ByVal LOP As Long, _
    ByVal LCP As Long, _
    ByVal LQ As Long, _
    ByVal LPAF As Long, _
    ByVal LFN As String) As Long

Private Declare Function apiCreateIC Lib "gdi32" Alias "CreateICA" _
    (ByVal DriverName As String, _
    ByVal DeviceName As String, _
    ByVal Output As String, _
    InitData As Any) As Long

Private Declare Function apiGetDeviceCaps Lib "gdi32" Alias "GetDeviceCaps" _
    (ByVal hdc As Long, _
    ByVal Index As Long) As Long

Private Declare Function apiSelectObject Lib "gdi32" Alias "SelectObject" _
    (ByVal hdc As Long, _
    ByVal obj As Long) As Long

Private Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _
    (ByVal hWnd As Long, _
    ByVal hdc As Long) As Long

Private Declare Function apiMulDiv Lib "kernel32" Alias "MulDiv" _
    (ByVal Number As Long, _
    ByVal Numerator As Long, _
    ByVal Denumerator As Long) As Long
    
Private Declare Function apiDrawText Lib "user32" Alias "DrawTextA" _
    (ByVal hdc As Long, _
    ByVal str As String, _
    ByVal Count As Long, _
    Rect As Rect, _
    ByVal Format As Long) As Long

Private Const PixelsLog = 90
Private Const Twips = 1440

Private Const DT_Top = &H0
Private Const DT_Left = &H0
Private Const DT_WordBreak = &H10
Private Const DT_CalcRect = &H400

Private Type Rect
Top As Long
Left As Long
Right As Long
Bottom As Long
End Type

Public Function CanGrow(ctl As Control) As Integer
Dim Rect As Rect
Dim hWnd As Long
Dim hdc As Long
Dim Ydpi As Long
Dim FontNew As Long
Dim FontOld As Long
Dim FontHeight As Long
Dim Ret As Long
Dim Ic As Long
    If IsNull(ctl.FontSize) Then
    Exit Function
    End If
    If TypeOf ctl Is TextBox Then
    If Len(ctl & vbNullString) = 0 Then
    Exit Function
    End If
    End If
    If TypeOf ctl Is Label Then
    If Len(ctl.Caption & vbNullString) = 0 Then
    Exit Function
    End If
    End If
hWnd = ctl.Parent.hWnd
    If hWnd = 0 Then
    Exit Function
    End If
hdc = apiGetDC(hWnd)
Ret = 0
Ic = apiCreateIC("Display", vbNullString, vbNullString, vbNullString)
    If Ic <> 0 Then
    Ydpi = apiGetDeviceCaps(Ic, PixelsLog)
    apiDeleteDC (Ic)
    Else
    Ydpi = 120
    End If
FontHeight = apiMulDiv(ctl.FontSize, Ydpi, 72)
    With ctl
    FontNew = apiCreateFont(-FontHeight, 0, 0, 0, .FontWeight, .FontItalic, .FontUnderline, 0, 0, 0, 0, 0, 0, .FontName)
    End With
FontOld = apiSelectObject(hdc, FontNew)
    With Rect
    .Top = 0
    .Left = 0
    .Right = ctl.Width / (Twips / Ydpi)
    .Bottom = 0
    If TypeOf ctl Is TextBox Then
    Ret = apiDrawText(hdc, ctl, -1, Rect, DT_WordBreak + DT_CalcRect + DT_Top + DT_Left)
    End If
    If TypeOf ctl Is Label Then
    Ret = apiDrawText(hdc, ctl.Caption, -1, Rect, DT_WordBreak + DT_CalcRect + DT_Top + DT_Left)
    End If
    Ret = apiSelectObject(hdc, FontOld)
    apiDeleteObject (FontNew)
    Ret = apiReleaseDC(hWnd, hdc)
    .Bottom = .Bottom * (Twips / Ydpi)
    ctl.Height = .Bottom + (.Bottom * 0.005) + 31
    End With
CanGrow = ctl.Height
End Function



Но работает он не совсем корректно.
При разном количестве текста, то добавляет пустую строку,
то в данном случае урезает последнюю строку.
И текст отображается не весь.
------------------------------------------
Как сделать,
Чтобы все строки текста правильно отображались
в Главной пдч на Главной форме?

Архив мдб
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785343
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785358
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785382
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это не то.
-------------
У меня высота Главной пдч меняется
при каждой записи в зависимости от текста в ней.

На остальных записях текст весь отображается.
А на 4 записи последняя строка урезается.
Почему? Не могу понять.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785413
POKEP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А на 4 записи последняя строка урезается.
Почему? Не могу понять.
(c)

.

Предполагаю, что это из-за чудесных кавычек, обрамляющих "чудеса". В тестовой переменной первые же обычные кавычки, видимо, воспринимаются, как окончание текста в строке.

Можно попробовать написать функцию, заменяющую обычные кавычки (") на (""") внутри текстового поля .
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785416
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кавычки здесь не причем.
---
Вот без кавычек. Результат тот же.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785507
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Маркин,
посмотри тут
http://am.rusimport.ru/MSAccess/topic.aspx?ID=227
в конце в комментариях я выкладывал примерчик, по образу и подобию можно не вписывать текст в текстбокс, а увеличивать высоту текстбокса
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785539
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Маркин,
стесняюсь спросить-а зачем столько кода????
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785574
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
zimkon,
в конце в комментариях я выкладывал примерчик,
по образу и подобию можно не вписывать текст в текстбокс,
а увеличивать высоту текстбокса



zimkon, это как сделать.
Я уже этот пример наизнанку вывернул,
не получается.

--------------
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785579
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku ,
Зачем мне поле на пол формы,
если в нем три буквы.
---
Мне надо чтоб весь текст по высоте
в контрол вмещался и не было лишних строк.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785592
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Маркин,
еще раз стесняюсь спросить-а разве в Вашем примере не так?
Вы спросили:
Александр МаркинКак сделать,
Чтобы все строки текста правильно отображались
Я Вам ответил
Если же вы хотите менять высоту формы,в в зависимости от количества строк:
1.Это совсем другая история
2.Так делать,изменять высоту формы от записи к записи,по моему,очень не ICE
Ваш пример:
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785594
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вдогонку: а граница у контрола жизненно необходима ?
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785605
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Граница нужна.
В примере я её выделил,
а так она у меня закругленная.

Да, мне нужна другая история.
Не айс, но мне это нужно.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39785611
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Маркин,
чем более длинный текст в поле,тем менее удовлетворительным будет результат (т.к перенос происходит по словам,а не по символам)
Вот половинчатое решение:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Form_Current()
Dim a
Me.поле1.SetFocus
Me.поле1.SelStart = 0
a = Len(Me.поле1) \ 60
If a <= 1 Then
Me.поле1.Height = 400
Else
Me.поле1.Height = a * 400
End If
End Sub
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39786211
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Маркин
Код: vbnet
1.
    Ydpi = 120

Надо же! Обычно 96 DPI намертво гвоздями прибивают :)

Теперь позанудствую:
Александр Маркин
Код: vbnet
1.
    .Right = ctl.Width / (Twips / Ydpi)


Причина отсутствия "чудес" - не учитываеЦЦа наличие вертикальных границ элемента управления, их стиля и толщины. Плюс считаеЦЦа, что у устройства вывода Xdpi и Ydpi равны, что для таких устройств, как принтеры, не железное правило. Но для экрана прокатит (с пивом).
Александр Маркин
Код: vbnet
1.
2.
    .Bottom = .Bottom * (Twips / Ydpi)
    ctl.Height = .Bottom + (.Bottom * 0.005) + 31


Кривой костыль - не слишком удачная попытка учесть наличие горизонтальных границ элемента управления, их стиля и толщины.

Элемент управления не выравниваеЦЦа по границам пикселя - может, и паранойя, но лучше подстраховаЦЦа.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39786220
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦа, напомнило анекдот с письмом на спичечную фабрику.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787149
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Маркин
Код: vbnet
1.
2.
3.
4.
zimkon,
в конце в комментариях я выкладывал примерчик,
по образу и подобию можно не вписывать текст в текстбокс,
а увеличивать высоту текстбокса



zimkon, это как сделать.
Я уже этот пример наизнанку вывернул,
не получается.

--------------
Почему бы тогда не воспользоваться ссылкой Панурга на мой пример? Посмотрите
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787179
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkonмой примерим такое не подходитЪ
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787181
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панургzimkonмой примерим такое не подходитЪ
Не понял
Александр МаркинМне надо чтоб весь текст по высоте
в контрол вмещался и не было лишних строк.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787345
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon,
Месага выдает n=1 на всех записях.
Получается только высота в одну строку.
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787373
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Маркинzimkon,
Месага выдает n=1 на всех записях.
Получается только высота в одну строку.
Бывает (особенно, когда невнимательно читаешь топики, ссылки на которые тебе дают...у нас с вами разное поведение access при входе в поле в настройках акса). Попробуем снова (более универсальный случай)
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787498
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панургим такое не подходитЪ
zimkonНе понял
Александр МаркинДа это не то. 21831307
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787555
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургПанургим такое не подходитЪ
zimkonНе понял
Александр МаркинДа это не то. 21831307
Вы всегда даете дельные советы. Человеку свойственно заблуждаться, и, вероятно, ТС не исключение :)
...
Рейтинг: 0 / 0
Запись 4 - Хочу увидеть чудеса
    #39787727
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon,
Посмотрел, как раз так и надо.
Спасибо за помощь!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись 4 - Хочу увидеть чудеса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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