Как обратиться ко всем Control в конкретной SSTab.Tab?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

дамс...

Сообщение Rojohn » 23.08.2005 (Вт) 12:19

Кстати, я где-то видел процедурку/класс перебирающую контролы на форме и исправляющую баг фреймов...

Полезная наверное процедурка, если она ещё и SSTab.Tab перебирает, то нужен намёк как и где её найти. А то с TabStrip слишком мучительно и ненаглядно, несмотря на все его достоинства...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Шаману

Сообщение Rojohn » 23.08.2005 (Вт) 12:37



Для меня пока ента штука больно непонятная, но подозреваю, что она идёт только на NT подобных операционках...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 12:38

GSerg писал(а):http://www.gasanov.net/Download/XPFrame.zip


Не - там именно использовались стандартные фрэймы, чем и было интересно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 23.08.2005 (Вт) 12:40

А здесь вообще просто пустой контрол.
Это гораздо проще.

И работать он будет везде, надо просто чуть доработать функцию Themed. Включить обработку отсутствия функции в библиотеке.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 23.08.2005 (Вт) 12:53

GSerg писал(а):А здесь вообще просто пустой контрол.
Это гораздо проще.


А как быть при этом с тем что уже написано?

В общем, нашел я ту функцию - оказалось что она просто вставляет PictureBox-ы:

Код: Выделить всё
Private Declare Function SetParent Lib "user32.dll" ( _
                ByVal hWndChild As Long, _
                ByVal hWndNewParent As Long) _
                As Long
Private Declare Function LockWindowUpdate Lib "user32.dll" ( _
                ByVal hwndLock As Long) _
                As Long

'****************************************************************************************
'METHODS - PUBLIC
'****************************************************************************************

Public Sub FixFramedControls(ByRef frm As Form)
    'Purpose:       to cause command buttons and option buttons conatined inside frames
    '               to appear the way that they are supposed to under Windows XP
    'Parameters:    frm - reference to the form that contains the control
    Dim ctl As Control
    Dim ctlChild As Control
    Dim Pic As PictureBox
    Dim lIdx As Long
    Dim lXBorder As Long
    Dim lYBorder As Long
    Dim lLeft As Long
    Dim lTop As Long
    Dim lWidth As Long
    Dim lHeight As Long
    Dim lCnt As Long
   
    On Error GoTo ErrHandler
   
    LockWindowUpdate frm.hWnd
   
    For Each ctl In frm.Controls
        If TypeOf ctl Is Frame Then
            lCnt = lCnt + 1
            'add a picture box inside the frame to contain the controls
            Set Pic = frm.Controls.Add("VB.PictureBox", "picHolder" & lCnt, frm)
           
            'make sure the picture box is at top of zorder and has properties we want
            Pic.Appearance = 0
            Pic.BorderStyle = 0
            Pic.Visible = True
           
            'now check each control to see if it is a child of the frame
            For Each ctlChild In frm.Controls
                If TypeOf ctlChild Is CommandButton Or _
                        TypeOf ctlChild Is OptionButton Then
                    If ctlChild.Container Is ctl Then
                        With ctlChild
                            'set the control to be a child of the picture box
                            Call SetParent(.hWnd, Pic.hWnd)
                           
                            'find the bounding rectangle for the size of the picture box
                            If lLeft = 0 Then
                                lLeft = .Left
                            Else
                                If lLeft > .Left Then
                                    lLeft = .Left
                                End If
                            End If
                            If lTop = 0 Then
                                lTop = .Top
                            Else
                                If lTop > .Top Then
                                    lTop = .Top
                                End If
                            End If
                            If lWidth = 0 Then
                                lWidth = .Width + .Left
                            Else
                                If lWidth < .Width + .Left Then
                                    lWidth = .Width + .Left
                                End If
                            End If
                            If lHeight = 0 Then
                                lHeight = .Top + .Height
                            Else
                                If lHeight < .Top + .Height Then
                                    lHeight = .Top + .Height
                                End If
                            End If
                        End With
                    End If
                End If
                Pic.Move lLeft, lTop, lWidth - lLeft, lHeight - lTop
            Next ctlChild
           
            'size the picture box accordingly to encompass all controls contained in the
            'frame without accidentally drawing over the frame
            'NOTE: this is assuming that the developer has not placed control overlapping
            'the frame already
            Call SetParent(Pic.hWnd, ctl.hWnd)
            Pic.ZOrder 1
           
            'now position the control inside the picture box
            For Each ctlChild In frm.Controls
                If TypeOf ctlChild Is CommandButton Or _
                        TypeOf ctlChild Is OptionButton Then
                    If ctlChild.Container Is Pic Then
                        With ctlChild
                            .Left = .Left - lLeft
                            .Top = .Top - lTop
                        End With
                    End If
                End If
            Next ctlChild
        End If
        lLeft = 0
        lTop = 0
        lWidth = 0
        lHeight = 0
    Next ctl
   
ExitProc:
    'clean up and exit
    LockWindowUpdate 0&
    Exit Sub
   
ErrHandler:
    Debug.Print Err.Number & ": " & Err.Description
    Resume ExitProc
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Rojohn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 439
Зарегистрирован: 22.06.2005 (Ср) 11:00
Откуда: Moscow city

Прикольненько:)

Сообщение Rojohn » 23.08.2005 (Вт) 14:06

Занимательная функция, но к SSTab.Tab она никак не относится... Лучше сделаю-ка я так как Большой человек:) говорил про TabStrip, тока использую вместо TabStrip SSTab :D Если не считать некоторых неудобств разработчика (то есть меня), то вроде и юзеры сыты и овцы целы! :wink:

Worobjoff
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 19.02.2005 (Сб) 17:51

Сообщение Worobjoff » 23.08.2005 (Вт) 16:09

Мучился с этим SSTab то же. Долго не мог найти способ, чтобы код ресайзинга почеловечнее получался.
Потом нашел C1Tab от ComponentOne. Все проблемы сразу решились.

Здесь пример для MS SSTab, который может быть прогодится.
(специально для форума почистил код своей "лабораторной работы")
Вложения
Fucked_SSTab.rar
(3.29 Кб) Скачиваний: 36

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 88

    TopList  
cron