Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > SSTab - Странные метаморфозы


Автор: turgi 9.11.2005, 19:02
На SSTab есть 2 закладки, на каждой из которых находятся свои элементы управления. В FormLoad() указано, какая закладка должна появляться при старте. Проблема в следуюшем: когда я задаю из программы свойство Left для некоторых компонентов, тo эти компоненты появляются на ОБОИХ закладках SSTab-a.

Что я делаю не так?
Каk это исправить?

Автор: Voldemar2004 11.11.2005, 09:43
Цитата(turgi @ 9.11.2005, 19:02)
когда я задаю из программы свойство Left для некоторых компонентов
Что за компоненты?

Автор: turgi 11.11.2005, 10:41
Обычные компоненты, типа Combo, Text, Label

Автор: Igor Graf 11.11.2005, 22:15
Ты бы хоть кусок кода привел а то не совсем понятна проблема!

С уважением Graf

Автор: JUmPER 27.9.2006, 14:09
то же самое и у меня
меняю Top -- всё ок
меняю Left -- компонент почему-то перепрыгивает на текущую закладку (а был он на другой)

Автор: mihanik 27.9.2006, 15:41
Ребята!

На сколько я помню (не уверен на все 100 %) даже Microsoft признаётся в том, что с SSTab имеют место подобного рода глюки.

Можно попробовать какой-нибудь аналогичный SSTab элемент.
Мультипэйдж, например...

Автор: JUmPER 14.6.2007, 16:32
как бороться: функция проверки и функция-пример:

Код

Private Const SSTAB_SHIFT As Long = 75000
Private Const SSTAB_TYPE_NAME As String = "SSTab"


Private Function IsASSTab(aControl As Variant) As Boolean
    IsASSTab = (TypeName(aControl) = SSTAB_TYPE_NAME)
End Function


Public Sub FitHeight2Container(aComponent As Variant, _
Optional aContainer As Variant = Null, _
Optional aBottomInterval As Long = DEFAULT)

    Dim c_height As Long
    Dim c_top As Long

    ' parent as container if not specified
    If (IsNull(aContainer)) Then
        Set aContainer = aComponent.Container
    End If

    ' if container is a for ignore borders
    If (IsAForm(aContainer)) Then
        c_height = aContainer.ScaleHeight
        c_top = aComponent.Top
    Else
        c_height = aContainer.Height

        ' if container is not a parent of component shift left and top
        If (aContainer Is aComponent.Container) Then
            c_top = aComponent.Top
        Else
            c_top = aComponent.Top - aContainer.Top
        End If
    End If

    ' if intervals to bottom and/or right border defined use it
    If (aBottomInterval = DEFAULT) Then
        If (IsASSTab(aContainer)) Then
            c_height = c_height + aContainer.TabHeight - c_top * 2
        Else
            c_height = c_height - c_top * 2
        End If
    Else
        c_height = c_height - c_top - aBottomInterval
    End If

    aComponent.Height = c_height
End Sub

Автор: mihanik 15.6.2007, 08:17
Решение интересное...

Но ты дату смотрел?
 smile 

Автор: JUmPER 15.6.2007, 14:36
mihanik, смотрел, просто только что сам с этим чудом разобрался + копался тут (на форуме) и случайно на эту темку наткнулся

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)