3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> События "on open do" и "on close do" у RolloutFloa, Проблемка ...
Shurik
сообщение 16/01/2018, 03:43
Сообщение #1


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Доброго времени суток, уважаемые форумчане!

Вот нежданно и негаданно, столкнулся с пустяковой, на первый взгляд, проблемой ...

На протяжении долгого времени, от случая к случаю, пишу один скрипт под себя. В этом скрипте полно различных инструментов (кнопки, спиннеры, списки и т.д.), которые сгруппированны в 4 группы.
Когда я только начинал писать этот скрипт, я даже и предположить не мог, что он получится у меня таким объёмным.

А теперь о проблеме: до недавнего времени, этот скрипт, а правильнее сказать Rollout, выводился у меня на экран с помощью команды CreateDialog. В скрипте была прописана, помимо всего прочего, обработка событий на открытие и закрытие этого роллаута (есть несколько важных строк кода, которые мне нужно делать в эти моменты).
Но так как скрипт мой разросся, то все инструменты уже не влазили по высоте в этот роллаут. В ширину я его увеличить не могу, потому как мешаться будет. И вот я решил переформатировать его под RolloutFloater с полосой прокрутки и в котором мои группы инструментов разбиты на отдельные схлопывающиеся роллауты. Переделал. Теперь я открываю его командой NewRolloutFloater. И всё бы хорошо, но столкнулся теперь с тем, что не могу никак заставить скрипт, а точнее базовый RolloutFloater отрабатывать события его открытия и соответственно закрытия dry.gif

Долго копался в хэлпе, но так и не нашёл ничего, что позволило бы мне решить эту проблему. Поэтому я здесь.
Допускаю, что либо у RolloutFloater-а попросту нет обработки этих событий, либо я что-то недопонимаю, или ошибаюсь в синтаксисе.

Друзья, пожалуйста, помогите разобраться! Я уже всю голову себе сломал ... helpsmilie.gif

PS: если обработки этих событий нет у RolloutFloater-а, то быть может есть какой-то обходной способ узнать что он сейчас будет, например, закрываться и перед этим моментом подсунуть ему код? Мне бы ещё помог вариант с интерфейсом в виде двух закладок, где на первой закладке основные инструменты, а на второй все остальные. Есть в макс-скрипте такой вариант, осуществляемый с помощью Active-Х. Но у меня этот вариант не работает. С DotNet не разбирался, т.к. боюсь утонуть в этом ужасе smile.gif хотя и уверен, что с помощью него можно. Обидно, что такая пустяковая проблема, которая привела в какой-то тупик ... Помогите !!! stena.gif
Go to the top of the page
 
+Quote Post
Jahman
сообщение 16/01/2018, 11:26
Сообщение #2


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



У флоатера нет событий для открытия/закрытия.
CODE
(
    
nr = newRolloutFloater "title" 200 300 200 200

rollout X "one" (

    button b "button"
    
    on x open do (
        
        messageBox "We're open!\n"
        
        
    )
    
    on x close do (
        
        messageBox "We're closed!\n"
        
    )

)
rollout Y "two" (

    spinner s "spinner"

)

addRollout x nr
addRollout y nr

)



вот еще с табами пример
CODE
try (destroydialog X ) catch ()
rollout X "" width:333 height:300 (

    local labels = #("vertex","edge","face","polygon","element")
    dotNetControl tabs "system.windows.forms.tabControl" width:(x.width-30) height:25
    
    subRollout xx height:250
    
    fn addSubRoll index = (
        
        for x in xx.rollouts do removeSubRollout xx x
        
        case index of (
            
            default: ()
            
            0: (
                
                rollout vertRollout "" (
                    
                    label _ "vertex"
                    
                )
                
                AddSubRollout xx vertRollout
                
            )
            
            1: (
                
                rollout edgeRollout "" (
                    
                    label _ "edge"
                    
                )
                
                AddSubRollout xx edgeRollout
                
            )
            
            2: (
                
                rollout faceRollout "" (
                    
                    label _ "face"
                    
                )
                
                AddSubRollout xx faceRollout
                
            )
            
            3: (
                
                rollout polyRollout "" (
                    
                    label _ "polygon"
                    
                )
                
                AddSubRollout xx polyRollout
                
            )
            
            4: (
                
                rollout elemRollout "" (
                    
                    label _ "element"
                    
                )
                
                AddSubRollout xx elemRollout
                
            )
            
            
        )
        
        
        
    )
    
    on x open do (
                    
        tabs.tabPages.clear()
        tabs.BackColor = tabs.BackColor.lightblue
        tabs.itemSize = dotnetObject "System.Drawing.Size" ((tabs.width/labels.count)-2) 25

        for x in labels do tabs.tabPages.add x

        addSubRoll 0
        
    )
    
    on tabs SelectedIndexChanged ev do (

        addSubRoll tabs.SelectedIndex
        
    )

)
createDialog X pos:[100,100]
Go to the top of the page
 
+Quote Post
Shurik
сообщение 16/01/2018, 15:35
Сообщение #3


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Jahman, спасибо тебе огромное!!!
По первому варианту я, признаться, уже додумался сам минут через 15 после написания этой темы. Единственное, что этот вариант не очень "красивый" с точки зрения логики кода, т.к. мы вешаем обработку закрытия флоатера на один из вложенных в него роллаутов, а не на него самого. Но раз у флоатера нет своей обработки событий, то это вполне себе хороший и рабочий вариант решения проблемы.
Второй вариант с DotNet очень симпотный, но я всё-же сделаю по варианту 1, т.к. патологически пугаюсь DotNet-а smile.gif Уж слишком он замудрёный для понимания, на мой взгляд.
Jahman, ещё раз спасибо тебе огромное за помощь и за уделённое время!!!
Тему можно считать закрытой.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 16/01/2018, 15:39
Сообщение #4


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



всегда пажалста
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 29/03/2024 - 12:43