понедельник, 14 сентября 2009 г.

Мультиэлементы-2

В прошлом посте я писал про дочернюю форму, но в HiAsm есть ещё несколько мультиэлементов. Поскольку они достаточно важны, то я расскажу о них подробнее и приведу примеры.

Следующий мультиэлемент - это панель. На панели компонентов она находится сразу после дочерней формы. Нажмите на ней левой кнопкой мыши, а затем нажмите на рабочем поле. Компонент добавится.

Теперь стоит перейти в редактор формы ("Вид" - "Редактор формы") и расположить панель поудобнее, так, как бы вам хотелось видеть её в программе.

А теперь нужно зайти в этот мультиэлемент. Можно дважды щёлкнуть на панели прямо в редакторе форм. И здесь мы для начала отрегулируем вид панели. У панели есть парметры borderStyle и другие (ниже). Изменяя их, можно добиться очень интересных эффектов. Вот пример портретной рамки:



Внутри панели можно размещать разные компоненты. Можно разместить и рисунок, чтобы это действительно был портрет. Например, так:



Здесь использован новых компонент для вставки картинок в программу. У него есть параметр Picture, где и хранится наша картинка.

Панель может использоваться для создания групп переключателей. Если вы расположите переключатели на главной форме, то переключаться можно будет только в пределах них. А если другие переключатели поместить в панель, то это будет уже другая группа. Смотрим пример:



Пощёлкайте перевлючатели, и вы убедитесь, что там две группы переключателей.
А границы панели на этот раз не видны, потому что их размеры установлены в 0.

Ещё один мультиэлемент - группа элементов. На панели компонентов она находится сразу после элемента "панель". Попробуйте изменять её свойство Caption (только сначала войдите в неё).


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

8 комментариев:

  1. Сделал детскую забаву "Гасим окошки" - на освоение работы с мышкой. Вложил матрешкой несколько динамических дочерних форм разных размеров, сделал их невидимыми и запуск видимости одной формы при закрытии другой.
    Но почему-то формы выскакивают не поочередно, а парами. В чем здесь дело?

    Add(ChildFormEx,5844009,301,98)
    {
    link(onDeactivate,4158778:doText,[])
    }
    BEGIN_SDK
    Add(EditMultiEx,7391408,21,21)
    {
    WorkCount=#9:doVisible|
    EventCount=#12:onDeactivate|
    link(doVisible,16201238:doVisible,[(28,27)(28,139)])
    }
    Add(MainForm,16201238,35,105)
    {
    Left=35
    Top=105
    Width=151
    Height=135
    Visible=1
    Point(doVisible)
    link(onDeactivate,3249431:doVisible,[(97,118)(97,111)])
    }
    Add(ChildFormEx,3249431,126,105)
    {
    link(onDeactivate,7391408:onDeactivate,[(240,111)(240,27)])
    }
    BEGIN_SDK
    Add(EditMultiEx,8546795,21,21)
    {
    WorkCount=#9:doVisible|
    EventCount=#12:onDeactivate|
    link(doVisible,1924007:doVisible,[(28,27)(28,139)])
    }
    Add(MainForm,1924007,35,105)
    {
    Left=35
    Top=105
    Width=527
    Height=114
    Visible=1
    Point(doVisible)
    link(onDeactivate,10945874:doVisible,[(86,118)(86,111)])
    }
    Add(ChildFormEx,10945874,105,105)
    {
    link(onDeactivate,8546795:onDeactivate,[(229,111)(229,27)])
    }
    BEGIN_SDK
    Add(EditMultiEx,6244381,21,21)
    {
    WorkCount=#9:doVisible|
    EventCount=#12:onDeactivate|
    link(doVisible,522845:doVisible,[(28,27)(28,139)])
    }
    Add(MainForm,522845,35,105)
    {
    Left=35
    Top=105
    Width=142
    Height=427
    Visible=1
    Point(doVisible)
    link(onDeactivate,6613071:doVisible,[(97,118)(97,111)])
    }
    Add(ChildFormEx,6613071,126,105)
    {
    link(onDeactivate,6244381:onDeactivate,[(240,111)(240,27)])
    }
    BEGIN_SDK
    Add(EditMultiEx,1890978,21,21)
    {
    WorkCount=#9:doVisible|
    EventCount=#12:onDeactivate|
    link(doVisible,732611:doVisible,[(42,27)(42,139)])
    }
    Add(MainForm,732611,63,105)
    {
    Left=35
    Top=105
    Width=533
    Height=469
    Visible=1
    Point(doVisible)
    link(onDeactivate,9266698:doVisible,[(139,118)(139,111)])
    }
    Add(ChildFormEx,9266698,182,105)
    {
    link(onDeactivate,1890978:onDeactivate,[(268,111)(268,27)])
    }
    BEGIN_SDK
    Add(EditMultiEx,10331007,21,21)
    {
    WorkCount=#9:doVisible|
    EventCount=#12:onDeactivate|
    link(doVisible,4557747:doVisible,[(28,27)(28,139)])
    }
    Add(MainForm,4557747,35,105)
    {
    Left=35
    Top=105
    Width=243
    Height=185
    Visible=1
    Point(doVisible)
    link(onDeactivate,10331007:onDeactivate,[(194,118)(194,27)])
    }
    END_SDK
    END_SDK
    END_SDK
    END_SDK
    END_SDK
    Add(BitBtn,8753246,203,98)
    {
    Left=115
    Top=110
    link(onClick,5844009:doVisible,[])
    }
    Add(Label,4158778,434,98)
    {
    Left=55
    Top=35
    Width=165
    Height=17
    Caption="Детская забава: гасим окошки"
    link(onClick,8753246:doCaption,[(478,104)(478,92)(191,92)(191,104)])
    }

    ОтветитьУдалить
  2. Скорее всего, проблема в том, что происходит попытка открыть дочернюю форму при закрытой главной.
    А также событие Deactivate происхоит, когда окно деактивируется (например, при нажати на другом окне), но не закрывается. Для этого лучше использовать верхнюю точку формы Close и компонент EnentFromData. Он генерирует своё событие тогда, когда с его нижней точки запрашивается информация (это происходит при закрытии формы). Вот по этому событию и нужно открывать новые формы.
    Пример.

    ОтветитьУдалить
  3. Я конечно извиняюсь, но уже второй урок попадается, где мысль обрывается на середине фразы. Это специально так? И ещё можно как-то сделать, чтобы уроки можно было перематывать. А то дети бегают рядом, шумят, чуть прослушал что либо или просмотрел, откуда взял чего и сразу приходиться всё заново смотреть.

    ОтветитьУдалить
  4. Что значит "мысль обрывается на середине фразы"? У меня всё нормально заканчивается в этом видеоуроке, я проверял.
    Про установку позиции видео я тоже думал. Сейчас я экспериментирую с кодеками, какой из них лучше сжимает, и вскоре заменю все архивы нормальными видеофайлами, где можно устанавливать позицию.

    ОтветитьУдалить
  5. если хотите, бесплатный совет, самый лучший, по моему мнению, кодек для видео обучения это TechSmith Screen Capture Codec. Проверено на собственном опыте, в свое время в процессе обучения 3ds max-у, писал урок SnagIt-ом. Оптимальный размер-качество, 10 минут видео менее 100 мегабайт размером при 800х600 10 fps/sec со звуком естественно.

    ОтветитьУдалить
  6. Спасибо, но, по-моему, и CRAM (Microsoft Video 1) хорош, т.к. его файлы упаковываются 7-zip'ом великолепно. А TechSmith Screen Capture Codec я скачал, установил, но при попытке сохранить видео с uvScreenCamera через этот кодек выходит сообщение, что надо установить ещё и Camtasia... Посмотрим, если окажется лучше - замечательно.

    ОтветитьУдалить
  7. Согласен, что упакованные файлы 7-zip'ом, великолепно сжаты. Также очень хорошее качество картинки, более и не требуется.
    Так что есть ли смысл искать что то новое, если есть отлаженная рабочая система?
    Я не знаю как будут ужиматься файлы с TechSmith Codec.
    Дело в том, почему я использовал TechSmith Codec, он не грузил систему, которая и так была занята 3ds max'ом и очень раздражало когда компьютер подглючивало при работе с моделью или изменении вида, так же мне не хотелось пережимать видео или что то делать с ним после записи/захвата, так как я сразу после урока нарезал видео на болванку, пока давал домашнее задание ученику и отдавал ему диск сразу с собой, что бы в случае надобности он мог просмотреть все повторно.
    P.S. Ваше видео уроки мне очень нравиться, всё отлично видно и понятно, большое вам человеческое Спасибо.

    ОтветитьУдалить
  8. Так же мне пришлось поставить CamtasiaStudio
    , поставил старенькую 5 версию.
    Но кодек использовал в SnagIt

    ОтветитьУдалить