Разработка SDI и MDI приложений (исходники, документация)
В delphi реализован шаблон mdi application, позволяющий быстро построить начальный код приложения mdi. Рассмотрим основные функции этого инструментального средства.
Чтобы использовать шаблон mdi application, примените команду file/new меню delphi, из раскрывшегося диалогового окна выберите страницу projects, а затем mdi application. Определите каталог для проекта, и delphi произведет копирование файлов, которые вам необходимы для простого приложения mdi с инструментальной линейкой, строкой состояния и меню. При формировании этих составных частей шаблона будут производиться запросы.
На полученной форме размещены следующие компоненты: op end ialog, imagelist, actionlist.
Форма, порожденная шаблоном, содержит стандартные элементы: главное меню, панель, используемую как инструментальная линейка, компонент statusbar1 и некоторые системные диалоговые панели. Программный код главной формы имеет следующее содержание:
uses childwin, about;
procedure tmdichild. form close (s end er: tobject; var action: tcloseaction);
begin
action:= cafree;
end ;
Как вы видите, программный код почти не отличается от того, какой вы создавали сами. Запустите приложение на компиляцию и попробуйте произвести необходимые действия, вы можете добавить нужные вам компоненты и программный код.
Приложения sdi
Название интерфейса одного документа (sdi) подразумевает, что эти приложения состоят из единственного окна. Многооконные приложения sdi могут выглядеть очень похожими на приложения mdi, но требуют больших усилий при программировании в зависимости от степени сложности, реализуемой в управлении окнами.
Примером сложного sdi-приложения является среда delphi. Оно допускает существование многих окон, которые привязаны к области клиента родительского окна. Приложение sdi обычно имеет окно, считающееся главным и состоящее часто из линейки меню.
Когда вы закрываете главное окно, сворачиваете или разворачиваете на весь экран, то вначале выполняются необходимые действия с родственными окнами. Например, прежде чем свернуть свое главное sdi-окно, среда delphi сворачивает все свое семейство окон.
Управление семейством окон sdi
Управление окном sdi отличается от управления окном mdi. В sdi нет специфических свойств, таких как activemdichild, помогающих управлять окнами. Здесь необходимо разрабатывать собственные средства управления.
Для того чтобы достичь функциональных возможностей sdi, как в delphi, необходимо идентифицировать каждое окно в качестве главного либо члена семейства. Причем члены семейства ведут себя так же, как обычные окна, позволяющие их открывать, свертывать, разворачивать на весь экран и закрывать по своему усмотрению. Но когда вы выполняете любую из этих операций на главном окне, то необходимо пересылать управляющие запросы членам семейства, например, закрывать окна членов семейства перед закрытием основного окна. В результате этого получается интерфейс, похожий на приложения mdi, но обладающий большей гибкостью. Конечно, расплатой за это будет дополнительный программный код.
В Репозитории имеется основная скелетная структура sdi. Этот шаблон уже снабжен набором компонентов визуальных и не визуальных, сконфигурированных так, чтобы у вас имелся исходный пункт для разработки приложения. По умолчанию на шаблоне приложения устанавливается меню, компонент op end ialog, savedialog, imagelist, actionlist. В шаблоне организована строка состояния и окно about.
Программный код шаблона показан ниже:
Sdi application что это
Научиться создавать многооконные приложения, применять модальные и немодальные окна.
Многооконные приложения
Изучим работу с различными окнами на примерах.
Модальные окна
В свойстве Caption формы напишите «О программе«.
Так вот, в строчке Copyright указывается имущественный правообладатель. Если вы делаете программу на заказ, здесь вы должны указать заказчика. Себя же вы можете упомянуть строчкой ниже, установив еще одну метку, и начав ее текст, как «Автор: «. Но поскольку в данном проекте заказчика у нас нет, то все авторские права принадлежат нам. Кстати, указывайте не мою, а свою фамилию, ведь я добровольно выкладываю этот код для общего использования, а проект по моим описаниям делали все же вы!
И еще. Знак авторского права © имеет в таблице символов код 0169. Чтобы вставить его в Caption метки, при вводе текста нажмите , и удерживая его, наберите 0169. Затем отпустите . Символ должен появиться в метке. Вместо этого знака иногда указывают упрощенный вариант: » (с) «. Сделайте, как считаете нужным.
Немодальные окна
Сгенерируйте следующее событие OnClick для кнопки «ОК«:
SDI-приложение MFC
Спецификация задачи
Приступим к решению поставленной задачи.
Создание заготовки приложения
На последней вкладке цифра 4 означает размер списка последних обработанных документов.
Появится полноценное окно Windows с однодокументным интерфейсом ( SDI )
Конструирование данных класса документа
В классе документа нам нужно добавить поля, в которых будут храниться координаты центра будущего круга.
В объявлении класса язык C++ не допускает инициализацию членов-данных (кроме перечисления enum ). Поэтому инициализацию поместим в функцию-член класса, которая выполняется при создании нового документа. Для этого
Именно функция OnNewDocument() срабатывает при создании нового документа.
Конструирование данных класса представления
Схема «Документ- Представление » реализует отношение «один ко многим», т.е. одни и те же данные класса Документа можно по разному отображать пользователю в классах Представления. В нашем случае будет только одно представление данных Документа. Класс Представления CCircleView будет выполнять непосредственное взаимодействие с пользователем и в нем тоже понадобятся поля для хранения координат центра круга.
Инициализацию объявленных в классе представления CCircleView переменных поместим в функцию-член OnInitialUpdate() класса представления, которая выполняется один раз при первом отображении документа на экране. В ней мы предусмотрим начальную перекачку данных из класса Документа в класс Представления. Для этого
Отображение круга на экране
Рисование круга в произвольной точке экрана
Урок 5
Многооконная структура программы
Перетаскивание файлов в приложение
Часть урока для новичков
Приложения MDI и приложения SDI.
Прежде чем устанавливать вид и свойства вашего приложения надо подумать о том, какой вид приложения вы желаете создать. Это во многом зависит от его функционального назначения. Можно выбирать между так называемыми MDI- или SDI-приложениями.
Различные открываемые документы в окнах имеют общее рабочее пространство, в пределах которого они отображаются, называемое родительским окном. Всегда в MDI-приложении родительское окно является главной формой приложения. Все внутренние формы, называемые дочерними окнами отображаются в пределах рабочего пространства родительского окна и не могут быть помещены за ее пределы. Даже при свертывании. При максимизации таких окон, они занимают все рабочее пространство родительского окна, оставаясь внутри его.
Родительское окно может быть в MDI-приложениях только одно, а дочерних окон может быть теоретически бесконечно.
Все SDI-окна можно разделить по свойствам доступа друг к другу как модальные и немодальные. Они определяют, может пользователь или нет переключаться на другие окна. Когда модальное окно открыто, все другие открытые окна становятся недоступными. Пример можно увидеть практически из любой программы, вызвав пункт меню «About» («О программе»). Отображаемое окно в приложении, как правило, не дает переключится на другое, пока не будет закрыто. Такое свойство иногда бывает очень полезным. Например, когда нужно чтобы пользователь ввел пароль, а затем получил доступ к определенному окну с данными, или окно фильтра данных, указав условия отбора, получает доступ к результату.
Итак, модальными или немодальными могут быть только SDI-окна.
С сегодняшнего урока мы с вами начинаем разрабатывать довольно сложный пример простого многооконного текстового редактора.
Все, запускаем программу на выполнение. Во время работы обратите внимание на список появившихся окон в меню «Окна», по которым удобно переключаться на необходимое окно.
В следующих уроках мы подробнее остановимся на написании этого примера. Если в этом уроке у вас что-то не получается, то пример на данном этапе разработки можно скачать здесь (2 KB). Если вы в последствии открываете свой или скаченный проект, не забывайте, что нужно открывать DPR файл.
Часть урока для продвинутых программистов
Перетаскивание файлов в приложение
Иногда очень полезно избавить пользователя от лишних операций при открытии файла. Он должен нажать на кнопку «Открыть», затем найти интересующий каталог, выбрать файл. Проще перетащить мышкой файл сразу в окно приложения. Рассмотрим пример перетаскивания Drag & Drop в окно произвольного текстового файла, который сразу же открывается в компоненте Memo1.
В private области окна нужно вставить следующую строку:
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; //получение сообщений о переносе файла в окно приложения
Процедура обработки этого сообщения будет выглядеть следующим образом:
procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
var
CFileName: array[0..MAX_PATH] of Char; // переменная, хранящая имя файла
begin
try
If DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH)>0 then // получение пути файла
begin
Form1.Caption:=CFileName; // имя файла в заголовок окна
Memo1.Lines.LoadFromFile(CFileName); // открываем файл
Msg.Result := 0;
end;
finally
DragFinish(Msg.Drop); // отпустить файл
end;
end;
Для того, чтобы форма знала, что может принимать такие файлы, необходимо в процедуре создания окна указать:
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Handle, True);
end;
С уважением, ведущий уроков Semen
СОДЕРЖАНИЕ
Электрический интерфейс
Стандарты
| Стандарт | Имя | Введено | Битрейт | Примеры форматов видео |
|---|---|---|---|---|
| SMPTE 259M | SD-SDI | 1989 г. | 270 Мбит / с, 360 Мбит / с, 143 Мбит / с и 177 Мбит / с | 480i, 576i |
| SMPTE 344M | ED-SDI | 2000 г. | 540 Мбит / с | 480p, 576p |
| SMPTE 292M | HD-SDI | 1998 г. | 1,485 Гбит / с и 1,485 / 1,001 Гбит / с | 720p, 1080i |
| SMPTE 372M | Двойной канал HD-SDI | 2002 г. | 2,970 Гбит / с и 2,970 / 1,001 Гбит / с | 1080p60 |
| SMPTE 424M | 3G-SDI | 2006 г. | 2,970 Гбит / с и 2,970 / 1,001 Гбит / с | 1080p60 |
| SMPTE ST 2081 | 6G-SDI | 2015 г. | 6 Гбит / с | 1080p120, 2160p30 |
| SMPTE ST 2082 | 12G-SDI | 2015 г. | 12 Гбит / с | 2160p60 |
| SMPTE ST 2083 | 24G-SDI | В развитии | 24 Гбит / с | 2160п120, 4320п30 |
Битрейт
В последовательном цифровом видеосигнале используются несколько битрейтов:
Прочие интерфейсы
8-битный параллельный цифровой интерфейс определяется Рек. МСЭ-R Рек. 601 ; это устарело (однако многие пункты в различных стандартах учитывают возможность 8-битного интерфейса).
Формат данных
В приложениях SD и ED формат последовательных данных определяется шириной 10 бит, тогда как в приложениях HD он имеет ширину 20 бит, разделенных на два параллельных 10-битных потока данных (известных как Y и C ). Поток данных SD устроен следующим образом:
Cb Y Cr Y ‘Cb Y Cr Y’
тогда как потоки данных HD организованы следующим образом:
Y ГГ ‘ГГ’ ГГ ‘ГГ’ C Cb Cr Cb Cr Cb Cr Cb Cr
75 МГц в HD), а два канала цветности (Cb и Cr) подвергаются субдискретизации по горизонтали и кодируются с половинной шириной полосы (6,75 МГц. или 37,5 МГц). Выборки Y, Cr и Cb совмещены (получены в один и тот же момент времени), а выборка Y ‘получена на полпути между двумя соседними выборками Y.
Пакеты синхронизации
В интерфейсах HD-SDI и Dual Link пакеты синхронизации должны происходить одновременно в потоках данных Y и C. (Некоторая задержка между двумя кабелями в двухканальном интерфейсе допустима; ожидается, что оборудование, поддерживающее двойное соединение, буферизует ведущий канал, чтобы позволить другому каналу наверстать упущенное). В интерфейсах SD-SDI и расширенного определения существует только один поток данных и, следовательно, только один пакет синхронизации за раз. Помимо вопроса о том, сколько пакетов появляется, их формат одинаков во всех версиях последовательно-цифрового интерфейса.
Счетчик строк и CRC
В последовательном цифровом интерфейсе высокой четкости (и в двухканальном HD) предусмотрены дополнительные контрольные слова для повышения надежности интерфейса. В этих форматах четыре отсчета, следующие сразу за пакетами EAV (но не за пакетами SAV), содержат поле контроля циклическим избыточным кодом и индикатор количества строк. Поле CRC предоставляет CRC предыдущей строки (CRC вычисляются независимо для потоков Y и C) и может использоваться для обнаружения битовых ошибок в интерфейсе. Поле счетчика строк указывает номер строки текущей строки.
CRC и количество строк не предусмотрены в интерфейсах SD и ED. Вместо этого можно дополнительно использовать специальный пакет вспомогательных данных, известный как пакет EDH, для обеспечения проверки данных с помощью CRC.
Нумерация строк и образцов
Нумерация ссылок
В случае видео 1080p60, 59,94 или 50 Гц по двойному каналу; каждая ссылка содержит действительный сигнал 1080i с той же скоростью поля. Первая ссылка содержит 1-ю, 3-ю и 5-ю строки нечетных полей и 2-ю, 4-ю, 6-ю и т. Д. Строки четных полей, а вторая ссылка содержит четные строки на нечетных полях и нечетные строки на четных. поля. Когда две ссылки объединяются, в результате получается изображение с прогрессивной разверткой с более высокой частотой кадров.
Вспомогательные данные
Конкретные приложения вспомогательных данных включают встроенное аудио, EDH, VPID и SDTI.
В двухканальных приложениях; вспомогательные данные в основном находятся по первичной ссылке; вторичный канал должен использоваться для дополнительных данных только в том случае, если на первичном канале нет места. Единственным исключением из этого правила является пакет VPID; на обоих каналах должен присутствовать действующий пакет VPID.
Встроенный звук
В двухканальных приложениях доступно 32 аудиоканала, так как каждый канал может передавать 16 каналов.
SMPTE ST 299-2: 2010 расширяет интерфейс 3G SDI, чтобы иметь возможность передавать 32 аудиоканала (16 пар) по одному каналу.
Поскольку интерфейс стандартной четкости не содержит контрольной суммы, CRC или другой проверки целостности данных, пакет EDH ( обнаружение и обработка ошибок ) может быть дополнительно помещен в вертикальный интервал видеосигнала. Этот пакет включает значения CRC как для активного изображения, так и для всего поля (за исключением тех строк, в которых может происходить переключение и которые не должны содержать полезных данных); оборудование может вычислить свой собственный CRC и сравнить его с полученным CRC, чтобы обнаружить ошибки.
EDH обычно используется только со стандартным интерфейсом определения; наличие слов CRC в интерфейсе HD делает пакеты EDH ненужными.
Пакеты VPID (или идентификатор полезной нагрузки видео ) все чаще используются для описания формата видео. В ранних версиях последовательного цифрового интерфейса всегда можно было однозначно определить формат видео путем подсчета количества строк и отсчетов между H- и V-переходами в TRS. С появлением двухканальных интерфейсов и стандартов сегментированных кадров это больше невозможно; таким образом, стандарт VPID (определенный SMPTE 352M) предоставляет способ однозначно и однозначно идентифицировать формат полезной нагрузки видео.
Полезная нагрузка видео и гашение
Активная часть видеосигнала определяется как те отсчеты, которые следуют за пакетом SAV и предшествуют следующему пакету EAV; где соответствующие пакеты EAV и SAV имеют бит V, установленный в ноль. Именно в активной части хранится фактическая информация об изображении.
Кодировка цвета
Обратите внимание, что масштабирование каналов яркости и цветности не идентично. Минимальный и максимальный из этих диапазонов представляют собой предпочтительные пределы сигнала, хотя полезная нагрузка видео может выходить за пределы этих диапазонов (при условии, что зарезервированные кодовые слова 0–3 и 1020–1023 никогда не используются для полезной нагрузки видео). Кроме того, соответствующий аналоговый сигнал может выходить за пределы этого диапазона.
Колориметрия
Другие цветовые кодировки
Интерфейсы Dual-link и 3 Гбит / с дополнительно поддерживают другие цветовые кодировки, помимо 4: 2: 2 YCbCr, а именно:
Если используется кодирование RGB, все три основных цвета кодируются тем же способом, что и канал Y; значение 64 (40 в шестнадцатеричном формате) соответствует 0 мВ, а 940 (3AC в шестнадцатеричном формате) соответствует 700 мВ.
Вертикальные и горизонтальные области гашения
Для частей вертикальной и горизонтальной областей гашения, которые не используются для вспомогательных данных, рекомендуется присвоить выборкам яркости кодовое слово 64 (40 шестнадцатеричных), а выборкам цветности назначить 512 (200 шестнадцатеричных); оба соответствуют 0 мВ. Допускается кодирование аналоговой информации о вертикальном интервале (такой как временной код вертикального интервала или тестовые сигналы вертикального интервала) без нарушения интерфейса, но такое использование нестандартно (и вспомогательные данные являются предпочтительным средством передачи метаданных). Однако преобразование аналоговых сигналов синхронизации и пакетных сигналов в цифровые не рекомендуется, как и в цифровом интерфейсе.
Различные форматы изображений имеют разные требования к цифровому гашению, например, все так называемые форматы 1080 строк HD имеют 1080 активных строк, но всего 1125 строк, а остальные представляют собой вертикальное гашение.
Поддерживаемые форматы видео
Различные версии последовательного цифрового интерфейса поддерживают множество видеоформатов.
Связанные интерфейсы
В дополнение к описанному здесь обычному последовательному цифровому интерфейсу существует несколько других подобных интерфейсов, которые аналогичны последовательному цифровому интерфейсу или содержатся в нем.
Интерфейс SDTI определяется SMPTE 305M. Интерфейс HD-SDTI определяется SMPTE 348M.
НАСКОЛЬКО Я
Стандарт ASI является частью стандарта цифрового видеовещания (DVB).
SMPTE 349M
Стандарт SMPTE 349M: передача форматов изображений из альтернативных источников через SMPTE 292M определяет средства инкапсуляции нестандартных видеоформатов и видео с более низкой скоростью передачи данных в интерфейсе HD-SDI. Этот стандарт позволяет, например, мультиплексировать несколько независимых видеосигналов стандартной четкости на интерфейс HD-SDI и передавать по одному проводу. Этот стандарт не просто регулирует синхронизацию EAV и SAV в соответствии с требованиями форматов с более низким битрейтом; вместо этого он предоставляет средства, с помощью которых весь формат SDI (включая слова синхронизации, вспомогательные данные и полезную нагрузку видео) может быть инкапсулирован и передан как полезная нагрузка обычных данных в потоке 292M.
Мультимедийный интерфейс высокой четкости (HDMI)
HDcctv
Стандарт HDcctv воплощает адаптацию SDI для приложений видеонаблюдения, не путать с TDI, аналогичным, но другим форматом для камер видеонаблюдения.













