Уроки Delphi
Прежде чем устанавливать вид и свойства вашего приложения надо подумать о том, какой вид приложения вы желаете создать. Это во многом зависит от его функционального назначения. Можно выбирать между так называемыми MDI- или SDI-приложениями.
MDI – сокращенно от Multiple Document Interface (интерфейс для одновременной работы со многими документами), а SDI – от Single Document Interface (интерфейс для работы с одним документом). В MDI приложениях два или более окон могут быть активны одновременно. В SDI-приложениях это невозможно. Здесь в каждый момент времени может быть активным только одно окно.
MDI-приложения являются удобным средством для одновременного выведения на экран текста или данных, которые хранятся в различных файлах. Такую структуру построения окон можно использовать для редактирования текстов, открывая и выводя на экран одновременно несколько различных документов. С помощь этих приложений можно также производить табличные вычисления, обрабатывая несколько таблиц одновременно, перенося или сравнивая данные из одной в другую. Пример такой работы над файлами – программа MS Word. Здесь файлы текстового и графического формата открываются в отдельных окнах, находящихся внутри главного окна программы.
Различные открываемые документы в окнах имеют общее рабочее пространство, в пределах которого они отображаются, называемое родительским окном. Всегда в MDI-приложении родительское окно является главной формой приложения. Все внутренние формы, называемые дочерними окнами отображаются в пределах рабочего пространства родительского окна и не могут быть помещены за ее пределы. Даже при свертывании. При максимизации таких окон, они занимают все рабочее пространство родительского окна, оставаясь внутри его.
Родительское окно может быть в MDI-приложениях только одно, а дочерних окон может быть теоретически бесконечно.
Большинство MDI-приложений имеют меню «Window» («Окно») со следующими пунктами: Cascade, Arrange Icons, Tile Horizontal, Tile Vertical. С их помощью пользователь может управлять дочерними окнами приложения. Обычно нижняя часть меню отделена и представляет список всех открытых окон. Это свойство весьма удобно для быстрого перехода к тому или иному редактируемому файлу.
Модальные окна.
Все SDI-окна можно разделить по свойствам доступа друг к другу как модальные и немодальные. Они определяют, может пользователь или нет переключаться на другие окна. Когда модальное окно открыто, все другие открытые окна становятся недоступными. Пример можно увидеть практически из любой программы, вызвав пункт меню «About» («О программе»). Отображаемое окно в приложении, как правило, не дает переключится на другое, пока не будет закрыто. Такое свойство иногда бывает очень полезным. Например, когда нужно чтобы пользователь ввел пароль, а затем получил доступ к определенному окну с данными, или окно фильтра данных, указав условия отбора, получает доступ к результату.
Итак, модальными или немодальными могут быть только SDI-окна.
С сегодняшнего урока мы с вами начинаем разрабатывать довольно сложный пример простого многооконного текстового редактора.
Пример MDI-приложения.
- Запускаем Delphi. В меню «File» выбираем пункт «New Application».
- Переименовываем свойство имени формы Name из Form1 в MainForm.
- Устанавливаем свойство в инспекторе объектов FormStyle в fsMDIForm. Его можно выбрать из ниспадающего списка доступных свойств. Свойство означает, что данное окно будет родительским в MDI-приложении.
- В палитре компонентов выбираем MainMenu. Это второй компонент слева на вкладке Standart. Помещаем его на проектировщик формы Form1. Дважды щелкаем по нему. Появляется конструктор меню окна. Здесь и далее для того, чтобы вызвать конструктор для размещенного в форме компонента главного меню (MainMenu), необходимо или дважды кликнуть по нему мышкой или дважды кликнуть в Object Inspector по свойству Items. Далее, пользуясь свойством Caption задайте меню такой вид, как на рисунке. Примечание: выбрать изменяемый пункт можно мышкой, для изменения названия выберите в инспекторе объектов свойство Caption, для отделения секций меню линией используйте знак тире в свойстве Caption для нужного пункта меню. Создание меню очень простое. Вы сразу видите результат изменения, добавления или удаления пунктов в редакторе формы. Вы всегда можете пополнить пункты меню, используя дополнения, выделенные пунктирной рамкой. Всегда можно вставить или удалить пункт меню в нужное место. Для этого воспользуйтесь правой клавишей мыши. Выбрать интересующее действие можно из выпадающего меню.
Итак, содержание главного меню:
Поскольку в этом окне создается другое, то в переименованный модуль MainUnit необходимо подключить ChildUnit. Для этого выбираем из меню «File» пункт «Use Unit…» и указываем модуль ChildUnit. Нажимаем OK.
Все, запускаем программу на выполнение. Во время работы обратите внимание на список появившихся окон в меню «Окна», по которым удобно переключаться на необходимое окно.
В следующих уроках мы подробнее остановимся на написании этого примера. Если в этом уроке у вас что-то не получается, то пример на данном этапе разработки можно скачать здесь (2 KB). Если вы в последствии открываете свой или скаченный проект, не забывайте, что нужно открывать DPR файл.
7.4. Несколько форм в приложении
Часто одной формы для решения задачи бывает мало. Поэтому сейчас мы рассмотрим, как добавить в проект новую форму, выбрать главную форму приложения, переключаться между формами. Затем мы расскажем, как на этапе работы приложения решается вопрос показа форм на экране.
7.4.1. Добавление новой формы в проект
Добавить в проект новую форму крайне просто: выберите команду меню File | New | Form и на экране сразу появиться вторая форма. При этом в окне редактора кода автоматически появится соответствующий новой форме программный модуль. Только что созданной форме дайте имя SecondaryForm (свойство Name ) и заголовок Secondary (свойство Caption ) — рисунок 7.29.
Рисунок 7.29. Две формы в проекте Сохраните модуль с новой формой под именем Second.pas — форма нам еще понадобится.
7.4.2. Добавление новой формы из Хранилища Объектов
Существует и второй, более продуктивный, способ создания форм. Он основан на использовании готовых форм, существующих в Хранилище Объектов среды Delphi. Хранилище Объектов ( Object Repository ) содержит заготовки форм, программных модулей и целых проектов, которые вы можете либо просто скопировать в свой проект, либо унаследовать, либо вообще использовать напрямую. Чтобы взять новую форму из Хранилища объектов, выберите в меню команду File | New | Other. . Среда Delphi откроет окно, показанное на рисунке 7.30: 305
Рисунок 7.30. Окно создания новой формы или другого элемента проекта Если на вкладке New диалогового окна выбрать значок с подписью Form , то в проект добавится обычная пустая форма, как по команде меню File | New Form . Если вас интересуют формы с «начинкой», обратитесь к вкладкам Forms и Dialogs (рисунок 7.31). Рисунок 7.31. Быстрое создание формы с «начинкой» На вкладках Forms и Dialogs существует переключатель, указывающий, что нужно сделать с формой-заготовкой: копировать ( Copy ), наследовать ( Inherit ) или использовать ( Use ). Отличие между ними состоит в следующем: Copy — означает, что в проект помещается полная копия формызаготовки. 306
Inherit — означает, что добавляемая в проект форма создается методом наследования от формы-заготовки, находящейся в Хранилище Объектов; Use — означает, что в проект добавляется сама форма-заготовка; изменение формы в проекте означает изменение формы-заготовки в Хранилище Объектов. Какой из режимов использовать — зависит от условия задачи. Режим Copy хорош просто тем, что не с нуля начинает разработку новой формы. Режим Inherit полезен, когда в проекте существует несколько форм, у которых совпадают некоторые части. В этом случае все похожие между собой формы порождаются от какой-то одной формы, реализующей общую для всех наследников часть. Режим Use позволяет подкорректировать формузаготовку прямо в Хранилище Объектов. Для нашего учебного примера двух форм достаточно, поэтому вернемся к уже созданным формам, нажав кнопку Cancel.
7.4.3. Переключение между формами во время проектирования
Иногда за формами становиться трудно уследить. Навести порядок помогает окно View Form , для вызова которого служит команда меню View | Forms. (рисунок 7.32). Рисунок 7.32. Окно для переключения на другую форму Выберите в этом окне форму, с которой собираетесь работать, и щелкните по кнопке OK . Выбранная форма сразу же станет активной.
Использование 2 форм
Помогите пожалуйста очень нужно. Объясните подробно, как создать две формы, чтобы при нажатии на кнопку в первой форме открывалась вторая форма и выполнялись какие-то процедуры. У меня никак не выходи, как их связывают и т. д.
Добавлено через 14 минут
Их прописывать в одном unit
Связывание двух форм по расположению на мониторе(Синхронизация форм)
Такая проблема, представим если 2 формы, на первой форме есть клавиша "На вторую форму", которая.
Использование форм
Добрый вечер! Есть 2 навигационные формы: одна будет использоваться только для ввода данных.
Использование нескольких форм
Добрый день. Подскажите, пожалуйста, как исправить синтаксическую ошибку: begin expected but uses.
Использование двух форм
Приветствую форумчане! Только начал изучать С++ и Qt, поэтому прошу помогите с вопросом. Вопрос.
Kristina92,
Вобработчике кнопки напиши Form2.Show и тогда откроется 2-я форма.
Но перед этим создать надо эту форму. Выбери в меню Delphi File, там New, и уже там кликни по
Form. У тебя создастся очередная форма.
Сообщение от Kristina92
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, main ;
implementation uses unit2; procedure tform1.button1click(sender); begin form2.show; end;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
procedure TForm1.Button2Click(Sender: TObject);(создание формы3 из формы1 на которой будут 2 кнопки и 1 stringgrid. но в этом случае надо будет описывать полностью все параметры элементов в коде) begin form3 := tform.Create(application); try srt:=tstringgrid.create(nil); with srt do begin Left:=5; Top:=8; Width:=612; Height:=265; ColCount:=11; RowCount:=2; Options:=[goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRowSizing, goColSizing, goRowSelect]; TabOrder:=0; ondblclick:=StringGrid1DblClick; Parent:=form3; end; b1:=tbutton.Create(nil); with b1 do begin left:=208; top:=288; width:=75; height:=25; TabOrder:=1; caption:='Заполнить'; onclick:=StringGrid1DblClick; parent:=form3; end; b3:=tbutton.Create(nil); with b3 do begin left:=288; top:=288; width:=75; height:=25; TabOrder:=2; caption:='Закрыть'; onclick:=B2; parent:=form3; end; with form3 do begin Left:=192; Top:=114; Width:=636; Height:=388; Caption:='Архив'; form3pok(sender); ShowModal; end; finally form3.Release; end; end;