Как правильно рассчитать высоту стола - PullRequest
0 голосов
/ 22 апреля 2009

Как рассчитать высоту таблицы flexgrid в VB6, чтобы она содержала только количество заполненных строк.

В настоящее время

myFlexGrid.Height = (myFlexGrid.CellHeight * myFlexGrid.Rows) ' paraphrased from code

имеет длину около 3 пикселей на строку. Добавление в магическое число немного хакерское и хотел бы сделать это без необходимости прибегать к этому.

Обновление: Чтобы усложнить ситуацию, он также должен обрабатывать многострочные ячейки.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2009

RS Coneley близок, но вот правильный путь, который учитывает все настройки DPI:

Me.MSFlexGrid1.Height = Me.MSFlexGrid1.CellHeight _
                      * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) _
                      + (Screen.TwipsPerPixelY * 2)
1 голос
/ 22 апреля 2009

Вам нужно идти

Me.MSFlexGrid1.Height = (Me.MSFlexGrid1.CellHeight) * (Me.MSFlexGrid1.Rows + Me.MSFlexGrid1.FixedRows) + 30

Значение 30 должно быть на два пикселя длиннее, чтобы показать черную рамку, бегущую вокруг гибкой сетки.

Также помогает отключение вертикальной полосы прокрутки.

0 голосов
/ 23 апреля 2009

Это последний код, который я придумал

    For i = 0 To fgrComments.Rows - 1
        'Set MSFlexGrid to appropriate Cell
        myFlexGrid.Row = i

        'Set textbox to match the selected cell
        txtSizer.Width = myFlexGrid.ColWidth(2)
        txtSizer.Font = myFlexGrid.Font
        txtSizer.Text = myFlexGrid.Text

        'Call API to determine how many lines of text are in text box
        lLinesOfText = SendMessage(txtSizer.hwnd, EM_GETLINECOUNT, 0&, 0&)

        ' Update the running values
        lTotalNumberOfRows = lTotalNumberOfRows + lLinesOfText
        lCurrentHeight = lCurrentHeight + myFlexGrid.CellHeight
    Next i

    ' resize the grid
    Dim iSpacers As Integer
    iSpacers = Screen.TwipsPerPixelY * lTotalNumberOfRows
    myFlexGrid.Height = lCurrentHeight + iSpacers

Вам нужно будет объявить SendMessage ( см. Здесь, чтобы увидеть, как ) и значение EM_GETLINECOUNT, но вы должны сделать это самостоятельно: -)

Он не удаляет магические числа, но рационализирует их, что достаточно близко для меня.

...