Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Ishodniki.Ru » Online книги » C++ Builder по шагам Шаг 6 - Апгрейдим MDI проект [TImage] Честно говоря, предыдущий проект немного халтура, поскольку весь код, касающийся родного MDI, я выкинул. Но ничего. Сейчас мы добавим такую полезную функцию, как просмотр стандартных файлов изображений и текстовых файлов. Добавьте к форме MDIChild компонент TImage с вкладки Additional и компонент TMemo с Standard, так беспощадно выкинутый в предыдущем шаге. Для обоих параметр Align задаем как alClient, а для TImage еще и свойство Stretch, как true. Логику сделаем такую: если формат *.avi, *.mid, *.wav, то открыть в MediaPlayer'е, если *.bmp, *.ico, *.wmf, то в изображении, а если ни то ни се - то в TMemo. Естественно, для этого надо модифицировать код: void __fastcall TMainForm::CreateMDIChild(String Name,bool img) { TMDIChild *Child; //--- create a new MDI child window ---- Child = new TMDIChild(Application); Child->Caption = Name; if (FileExists (Name)) { if (img){ Child->Image1->Picture->LoadFromFile(Name); Child->Image1->Visible=true; Child->Memo1->Visible=false; } else { Child->Memo1->Lines->LoadFromFile(Name); Child->Memo1->Visible=true; Child->Image1->Visible=false; }; }; } void __fastcall TMainForm::FileOpen1Execute(TObject *Sender) { if (OpenDialog->Execute()) switch (OpenDialog->FilterIndex) { case 2: CreateMDIChild(OpenDialog->FileName,true); break; case 3: MediaPlayer1->FileName=OpenDialog->FileName; MediaPlayer1->Open(); MediaPlayer1->Play(); break; default: CreateMDIChild(OpenDialog->FileName,false); } } Это в main.cpp, а еще в main.h нужно изменить объявление CreateMDIChild на: void __fastcall TMainForm::CreateMDIChild(String Name,bool img); ...и поменять реализацию функции: void __fastcall TMainForm::FileNew1Execute(TObject *Sender) { CreateMDIChild("NONAME" + IntToStr(MDIChildCount + 1),false); } Теперь разъяснения и немного теории. MDI окно - чаще всего окно документа в редакторе или вьювере. Кто обратил внимание, такое окно нельзя вытащить за пределы MDI формы и при распахивании оно как бы включает в себя главное меню. В принципе, это основное, что нужно знать. Еще есть некоторые функции WinAPI, которые позволяют всякие фокусы с окном выделывать, но мы еще до них не дошли. Как эпилог теории "MDI - это удобно!". Для создания такого окна мастер вставил функцию CreateMDIChild(), которую мы и терзаем уже второй раз. В OpenDialog'е по выбранному фильтру (здесь слабый момент) определяется тип файла и, в качестве второго параметра для CreateMDIChild(), передается img=true или false. Внутри это соответственно учитывается, и в зависимости от ситуации, свойством Visible скрывается один компонент и показывается другой. Вот вроде и все. В качестве приза привожу скриншот программы с открытыми окнами: |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|