Как выровнять контрол грида MSHFlexGrid по высоте равным высоте всех его строк - VB

Узнай цену своей работы

Формулировка задачи:

Т.е. нужно чтобы визуально грид вмещал ВСЕ строки источника. Проблема в том , что высота строки грнда .MSHFlexGrid1.RowHeight(1) равна 345, а высота контрола в которорм находится MSHFlexGrid1 равна 58,5 Т.е. налицо разные единицы измерения - КАК их преобразовать друг в друга ?? Я знаю , что для ActivX контрола имеется свойство object.ScaleX (width, fromscale, toscale) но как им воспользоваться - не знаю. Сам MSHFlexGrid1 сидит у меня MsWord (но все-равно где он сидит ), и я не знаю , как получить доступ к ScaleX Попытки ActiveDocument.Shapes(4).ScaleY(345,1,1) ActiveDocument.MSHFlexGrid1.ScaleY(345,1,1) оказались неудачные.

Решение задачи: «Как выровнять контрол грида MSHFlexGrid по высоте равным высоте всех его строк»

textual
Листинг программы
Private Declare Function GetDeviceCaps Lib 'gdi32' (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const LOGPIXELSX As Long = 88
Private Const LOGPIXELSY As Long = 90
'
Private Declare Function GetDC Lib 'user32.dll' ( _
     ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib 'user32.dll' ( _
     ByVal hwnd As Long, _
     ByVal hdc As Long) As Long
Private Declare Function GetDesktopWindow Lib 'user32.dll' () As Long
'
Private Sub Form_Load()
    Dim twipsPerPixel_X As Long
    Dim twipsPerPixel_Y As Long
    Dim deskDC As Long
'    
    ' Пояснения:
    ' 1). По определению 1 twip = 1/1440 логического дюйма, т.е. в 1 дюйме содержится 1440 твипов
    ' 2). С другой стороны, GetDeviceCaps (вызванная с параметром LOGPIXELSX или LOGPIXELSY) вернёт
    '     количество пикселей в том же логическом дюйме.
    ' Поэтому получается простая пропорция, из которой можно узнать, сколько твипов в одном пикселе:
    '
    deskDC = GetDC(GetDesktopWindow)
    twipsPerPixel_X = 1440 / GetDeviceCaps(deskDC, LOGPIXELSX)
    twipsPerPixel_Y = 1440 / GetDeviceCaps(deskDC, LOGPIXELSY)
    ReleaseDC GetDesktopWindow, deskDC
'
    Me.AutoRedraw = True
    Me.Print 'twipsPerPixel_X = ' + Str$(twipsPerPixel_X)
    Me.Print 'twipsPerPixel_Y = ' + Str$(twipsPerPixel_Y)
    '
    ' Т.к. твоя задача - разобраться с ВЫСОТОЙ контрола, то из этих двух величин тебе нужна вторая,
    ' т.е. twipsPerPixel_Y.
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы