ттттт. Практическая работа Работа с интерфейсом среды программирования Delphi. Создание простого проекта. Запуск программ на выполнение
Скачать 2.63 Mb.
|
Практическая работа №19.Создание дочерних оконЗадание Необходимо разработать Windows-приложение ¾ многооконный просмотрщик текстовых файлов. Методические указания к выполнению лабораторной работы Необходимо 1) в соответствии с указаниями разместить на форме необходимые компоненты и установить их свойства; 2) в соответствии с предложенными подсказками создать соответствующие обработчики событий и методы; 3) проверить правильность работы приложения. Для самопроверки рекомендуется разработать полноценное приложение. Для контроля преподавателем необходимо разработать полноценное приложение и продемонстрировать преподавателю работу приложения. Разработка приложения Замечание. Указания и подсказки относятся к работе в среде Borland Delphi 5. При работе в других версиях возможны ошибки и неточности. Измените свойства для главной формы приложения FileView Caption "Просмотрщик файлов" Ctl3D False FormStyle fsMDIForm {главная форма приложения MDI} Name "MDIFileViewer" Position poDefault { приложение получает свои начальные размеры и расположение от Windows } 2. Создайте меню главной формы Панель меню приложения должно иметь два элемента: Файл и Подсказка. Для создания этого меню дважды щелкните на компоненте MainMenu (ГлавноеМеню), чтобы вызвать Menu Designer(Проектировщик Меню). В Menu Designer добавьте элементы меню Меню Заголовок Групповой индекс Быстрый доступ &Fi1е 1 File &0pen 0 F3 File - (разделитель) 0 File E&xit 0 Alt+F4 &Help 10 Help &About 0 Создайте процедуру события для элемента меню Файл | Выйти. Эта процедура должна закрывать окно приложения. procedure TMDIFileViewer.ExitlClick(Sender: TObject); begin Close; end; Сохраните свою работу, назвав модуль VIEWMAIN.PASи проект FILEVIEW.DPR. 3. Для выбора файла для просмотра следует использовать компонент OpenDialog. Разместите компонент OpenDialogна форме и измените его свойства. Filter Все файлы | *.* | Файлы картинок | *.bmр; *..iсо; *.wmf | Файлы текстов |*.txt Замечание. Вы можете изменить свойство Filter, набрав на клавиатуре текст или используя специальный редактор свойств Filter. Name "FileOpenDialog" Options.ofFileMustExist True 4. Создайте обработчик события для элемента меню Файл | Открыть procedure TMDIFileViewer.OpenlClick(Sender: TObject); begin If FileOpenDialog.Execute Then Begin End; end; Замечание. Обработчик события ничего не делает с данными, возвращаемыми из FileOpenDialog, однако инфраструктура такой процедуры здесь есть. Код, который действительно открывает файлы, будет добавлен после создания просмотрщика текстовых файлов. 5. Снова сохраните свою работу и запустите программу на выполнение. Вы должны иметь возможность выбрать Файл | Открыть и увидеть появление окна диалога, а выбор Файл | Выйти должен осуществлять выход из программы. 6. Необходимо создать форму для отображения текстовых файлов Галерея Прежде, чем продолжить создание новой формы, давайте убедимся, что опции Delphi установлены таким образом, что Окно диалога Browse Gallery дает возможность выбирать форму из группы стандартных типов форм, которые были определены предварительно. Это может дать огромную экономию времени при создании ряда форм, имеющих в значительной степени одинаковую компоновку. В этом случае вы просто один раз создаете базовую форму и прибавляете ее к галерее. Затем, когда бы вам ни понадобилась аналогичная форма, вы просто выбираете ее из галереи и делаете все нужные изменения. Вы можете также установить Delphi таким образом, чтобы она отображала окно диалога Browse Gallery, когда вы создаете новый проект. Выберите Options | Environment из главного меню Delphi и на странице Preferences убедитесь, что независимая кнопка "Use on New Form" ("Использование новой формы") - внизу справа окна диалога - отмечена крестиком. Установка этих опций приведет к тому, что Delphi всегда отобразит окно диалога Browse Gallery, когда бы вы ни выбрали из главного меню File | New Form. Сделав эти изменения, нажмите кнопку ОК, чтобы сохранить опции. Выберите из главного меню File | New Form. Delphi отобразит окно диалога Browse Gallery (Галерея просмотра). Наша новая форма является очень простой, поэтому мы просто воспользуемся шаблоном пустой формы (Blank form). Дважды щелкните мышью на шаблоне Blank form в окне диалога Browse Gallery, и Delphi создаст новую пустую форму, с которой вы сможете работать. Выберите из меню File | Save Project (Файл | Сохранить Проект) и назовите новый модуль TEXTVIEW.PAS. 7. Измените свойства формы Caption "Просмотрщик текстов" Ctl3D False FormStyle fsMDIChild Name "TextViewer" 8. Добавьте компонент, отображающий текст файла — Memo и измените его свойства Align alCIient { Memo занимает всю клиентскую область формы } {т.е. автоматически изменяет свои размеры при изменении размеров окна формы} BorderStyle bsNone Readonly True { пользователь не должен изменять текст } ScrolfBars ssBoth Wordwrap False { Memo автоматически не должен сворачивать текст для размещения его внутри окна. Каждая строка файла должна занимать одну строку в компоненте Memo} 9. Теперь имеется главная форма и дочерняя форма, которая будет отображать текстовый файл. Необходимо написать код, который позволит главной форме создавать и отображать форму текстового просмотрщика. В окне Unit выберите закладку, помеченную Textview, чтобы отобразить модуль исходного текста для формы TextViewer. В определение класса TTextViewer добавьте переменную Filename в приватный раздел и объявление процедуры Open в общедоступный раздел. Отредактированный класс TTextViewer должен выглядеть следующим образом TTextViewer = class(TForm) Memol: TMemo ; private { Приватные обявления } Filename : String; public { Общедоступные объявления } Procedure Open (Const AFilename : String) ; end; 10. Добавьте процедуру Open в часть implementation (реализация) исходного файла вашего модуля. implementation {$R *.DFM) Procedure TTextViewer.Open (Const AFilename : Strings); Begin Filename := AFilename; {сохраняет имя файла, который должен быть загружен} Memol.Lines.LoadFromFile (Filename) ; { загружает файл в компонент Memo} Caption := Filename ; { заголовок формы отражает имя файла} End; end. 11. Необходимо написать код, создающий и отображающий форму текстового просмотрщика. Щелкните мышью на закладке Viewmain в окне Unit, чтобы отобразить исходный текст главной формы. Найдите процедуру TMDIFileViewer.Open1Click и отредактируйте ее procedure TMDIFileViewer.OpenlClick(Sender: TObject); Var TextViewer : TTextViewer: begin If FileOpenDialog.Execute Then Begin TextViewer := TTextViewer.Create (Self); {создает новую форму TextViewer} TextViewer.Open (FileOpenDialog.Filename) ; { открыть файл } TextViewer.Visible:=True; {делает новую форму видимой} TextViewer.SetFocus; {устанавливаем фокус клавиатуры к этому окну } End; end; 12. Найдите начало раздела implementationв модуле главной формы и добавьте в него оператор uses implementation uses TextView; {$R *.DFM} 13. После выполнения этих изменений сохраните работу и проверьте программу. Первое, что вы заметите, это автоматически отображаемую форму TextViewer с присутствующим в окне текстом "Memol". У вас должна иметься возможность выбрать из меню Файл | Открыть и выбрать для просмотра текстовый файл. Если в окне диалога Open нет ни одного файла с расширением ТХТ, просмотрите каталог Wmdows-директории или просто выберите файл .PAS. В любом случае FileView отобразит в окне выбранный файл. Вы можете вывести па экран столько файлов, сколько захотите, каждый в отдельном окне. Вы можете перемещать, изменять размеры, минимизировать, максимизировать или закрывать отдельные окна, независимо от остальных. Для закрытия приложения нажмите Alt+F4. 14. Закрытие дочерних окон Вы вероятно заметили, что когда делаете двойной щелчок в окне с управляющим меню дочернего окна, оно не закрывается, а минимизируется. Это поведение является определенным по умолчанию для дочерних окон MDI. Необходимо сделать, чтобы закрытие действительно означало закрытие. Следует добавить к форме обработчик события OnClose. Процедура обработки события OnClose дочернего окна procedure TTextViewer.FormClose(Sender: Tobject; var Action: TCloseAction); begin Action := caFree; end; 15. Для того, чтобы дочернее окно не создавалось автоматически можно удалить строку кода Application.CreateForm(TTextViewer, TextViewer); из исходного файла проекта. (Выберите View |Project Source из основного меню Delphi) Сохраните и выполните свою программу, обратив внимание на то, что первоначальное текстовое окно больше не появляется при запуске программы. 16. МЕНЮ ДОЧЕРНЕГО ОКНА В FileView следует добавить три новых элемента (Закрыть, Печатать и Установка принтера) к меню Файл всегда, когда открывается текстовое окно. Необходимо также добавить меню Window, которое позволит располагать дочерние окна каскадом или стопкой внутри клиентной области приложения. Разместите на форме TextViewer компонент MainMenu. Поскольку компонент Memo занимает все пространство клиентной области формы, следует поместить компонент MainMenuвнутри границ компонента Memo. Вызовите Menu Designer и добавьте элементы меню Меню Заголовок Групповой индекс Быстрый доступ &Fi1е 1 File &0pen 0 F3 File &Close 0 Alt+F3 File - (разделитель) 0 File &Print 0 File p&rint Setup... 0 File - (разделитель) 0 File E&xit 0 A11+F4 &Window 5 Window &Tile 0 Window &Cascade 0 Window Close &all 0 В данном случае меню Файл дочернего окна замещает меню Файл приложения, поскольку оба значения Grouplndex равны 1. Меню Окно дочернего окна, имеющее значение Grouplndex=5, помещается между меню Файл (Grouplndex=1) и меню Подсказка(Grouplndex=10). Обратите внимание, что меню дочернего окна не имеет меню Подсказка, так как окно Подсказка не должно меняться, когда отображается дочернее окно. Выполнив эти изменения, запустите программу на выполнение. Затем откройте файл и обратите внимание, что меню изменилось. К меню Файл добавились три новых элемента и разделитель, а меню Окно в рамке меню располагается теперь между меню Файл и Подсказка. 17. Вызов родительской формы Поскольку заменили меню Файл, ни одна из процедур событий меню главной формы не будет работать, когда открыто дочернее окно, так как события адресуются к дочернему окну, а не к главному окну приложения. Поэтому, если вы запускаете программу и нажимаете F3, чтобы открыть файл, все работает так, как и ожидается. Но после этого ни один из элементов меню Файл не будет работать. Мы, очевидно, не хотим дублировать код каждой из опций меню приложения в каждой из дочерних форм, поэтому необходим способ вызова обработчика событий из главной формы. Необходимо использовать модуль VIEWMAIN. Добавьте строку: uses ViewMain; в начало раздела implementation в TEXTVIEW.PAS 18. Создайте обработчики событий procedure TTextViewer.OpenlClick(Sender:TObject); {для меню - Файл |Открыть} begin MDIFileViewer.OpenlClick (Sender) ; end; procedure TTextViewer.CloselClick(Sender: TObject); { для меню Файл | Закрыть } begin Close; end; procedure TTextViewer.ExitlClick(Sender: TObject); { для меню Файл | Выйти } begin MDIFileViewer. ExitlClick (Sender) ; end; procedure TTextViewer.TilelClick(Sender: TObject); { для меню Окно | Все } begin MDIFileViewer.Tile ; end; procedure TTextViewer.CascadelClick(Sender: TObject); { для меню Окно | Каскад } begin MDIFileViewer.Cascade ; end; procedure TTextViewer.ClosealllClick(Sender: TObject); { для меню Окно | Закрыть все } begin MDIFileViewer.CloseAllChildren; end; 19. ДобавьтепроцедуруС1оseAllChiIdren в VIEWMAIN.PAS. !!! Включите объявление процедуры в раздел public класса TMDIFileViewer: procedure CloseAllChildren; procedure TMDIFileViewer.CloseAllChildren; Var i : Integer; Begin For i := 0 To MDIChildCount do MDIChildren[i].Close End; 20. ПЕЧАТЬ ТЕКСТА Необходимо получить параметры печати, открыть печатающее устройство для вывода и переслать на него каждую строку текста. Получение готовности к печати Из страницы палитры компонентов Additional (Дополнительные) выберите компоненты PrintDialog и PrinterSetupDialog и разместите их на форме TextViewer. Добавьте обработчики событий элементов Файл | Печать и Файл | Установка принтера. procedure TTextViewer.PrintSetuplClick(Sender: TObject); begin PrinterSetupDialog1.Execute; end; procedure TTextViewer.Print1Click(Sender: TObject); var Line: Integer; PrintText: System.Text; begin if PrintDialogI.Execute then begin AssignPrn(PrintText); { назначить файл типа Text устройству печати } Rewrite(PrintText) ; { открывает назначенный файл для вывода } Printer . Canvas . Font := Memol. Font; {устанавливаем шрифт для полотна принтера} for Line := 0 to Memol.Lines.Count do Writeln(PrintText, Memo1.Lines[Line]); { пересылаем каждую строку вывода в файл принтера } System.Close(PrintText) ; end; end; 21. Добавьте Printers к списку модулей в операторе uses модуля TextView. Он должен выглядеть следующим образом: uses ViewMain, Printers; 22. Проверьте правильность работы приложения. |