1. Контролы есть невизуальные (т.е., не появляющиеся на форме) компоненты, реализующие
полезные функции для приложения, как-то:
* Вызов схемы (фрагмента схемы) через заданные интервалы времени - Timer
* Оповещение пользователя о событиях в программе (не только об ошибках), простейшее взаимодействие с пользователем (Файл изменился - сохранить?) - Message
* Приём файлов, "брошенных" на окно программы (вообще-то, не только на окно ;) ) - DropFile
* Отслеживание буфера обмена (как в "качалках" ) - ClipboardHook
* Организация контекстного меню
* Получение параметров коммандной строки - Application
* Корректная работа программы даже во время долгих процессов (например, оперативное обновление ProgressBar-а во время форматирования НЖМД

* Добавление и работа со значком программы в системном трее (рядом с часами) - TrayIcon
* "Наведение красоты" (поддержка стилей WindowsXP) - StyleXP
* Красивая "всплывающая надпись" - BaloonToolTips
* Работа с принтером - Print
Часть из этих компонентов (Timer, DropFile, ClipboardHook, косвенно Application, TrayIcon) есть работа с очередью сообщений. За исключением StyleXP все остальные есть вызов полезных, хоть и малоизвестных, ф-ций WinAPI. StyleXP просто пристёгивает "правильный" файл к ресурсам.
2. Классический?
Классический: элемент "Таблица строк" предназначен для вывода текстовой информации в виде таблиц (этакий ListBox со столбцами).
3. Картинка-Данные (корректнее её называть Картника-Поток) служит для представления изображения в виде потока числовых данных для, например, передачи её другому приложению. Следует понимать, что тип данных bitmap не предназначен для передачи между процессами. Пример в комплекте, зовётся SendPicture.sha
4. MT-потоки (если воспользоваться аналогиями из моего урока) есть возможность пристегнуть к паровозу сразу несколько вагонов, но только тут паровоз почему-то сзади --- после последнего вагона ;) (для Галкова: см. примечание 1). По сути, MT-технология позволяет сократить число связей на схеме за счёт "упаковки" нескольких объектов данных в один MT-поток. "Обычный" поток есть частный случай MT-потока, состоящего из одного элемента (или даже нуля в случае dtNull, но не уверен).
Надо помнить, что не все компоненты на данный момент корректно работают с MT-потоками!
* MT_Add - "пристёгивает" ещё один вагон к имеющемуся составу. В зависимости от значения св-ва InputMT пристегнёт данные сразу за "паровозом" (Head), в хвост состава (Tail), ничего не будет пристёгивать (Null)


* MT_Get - "отцепляет" первый вагон от поезда и отправляет его по ветке onGet, остальной состав уходит по ветке onData
* MT_Memory - аналог Memory, но "дружащий" с MT
* MT_Array - позволяет работать с MT-потоком как с массивом (обращаться к вагончику по его порядковому номеру)
* MT_Enum - последовательно выдаёт в поток по одному вагончику из пришедшего состава
* MT_MultiMem - очень полезный элемент, этакий параллельный разгрузчик (т.е. разгрузка состава идёт не повагонно, а "скопом"). Число разгружаемых вагонов (и порядковый номер первого) задаются в св-вах элемента
* MT_String - это два-в-одном
** Во-первых, это способ "склеить" содержимое всех вагончиков в одну строку, разделяя содержимое разных вагончиков символом из св-ва Delimiter и форматируя каждый "груз" так, как написано в св-ве Mask (см. FormatStr)
** Во-вторых, можно производить обратный процесс.
* MT_ChanelToIndex - это аналог обычного ChanelToIndex, только на выход выдаёт не номер канала, а МТ-поток, состоящий из номера канала (в первом вагоне) и данных, поступивших на вход (во втором и последующих вагонах)
* MT_IndexToChanel - берёт номер канала из 1 вагона и отправляет туда "укороченный" состав (без первого вагона)
5. Про ActionSkin надо искать в архивах, вроде Dilma когда-то где-то что-то про это рассказывал... Вроде это для создания красивых саморисованных окон и элементов управления...
Примечание 1. "Странные они, эти MT-элементы" - скажет далёкий от "текстового" программирования человек, и будет совершенно прав. Вот пример:
Add(MT_Add,2787159,119,315)
{
Data=String(X)
link(onAdd,15726914:doAdd,[])
}
Add(MT_Add,15726914,168,315)
{
Data=String(Y)
InputMT=1
link(onAdd,11145590:doStr,[])
}
Add(Button,3861259,70,315)
{
Left=40
Top=40
link(onClick,2787159:doAdd,[])
}
Add(MT_String,11145590,217,315)
{
link(onResult,14861056:doMessage,[])
}
Add(Message,14861056,266,315)
{
}
Что ожидает увидеть такой человек в окне MessageBox-а? Его рассуждения:
* От кнопки пришлёл пустой состав "{паровоз}", в голову лепим X, на выходе - "{паровоз}-[Х]". Замечу, что по житейской логике тут "голова" и "хвост" совпадают - это место сразу за паровозом.
* К хвосту (т.е. после X) прилепим Y, на выходе "{паровоз}-[Х]-[Y]"
* MT_String по очереди, начиная с головы, будет брать вагоны и сливатьих в один, вставляя
разделитель где надо. На выходе "{паровоз}-[X;Y]"
А что он видит? "Y;X"!
И начхать-то ему, что MT-поток строится по принципу LIFO (stack), он-то (по картинкам) ожидает FIFO!