Федеральное агентство по образованию
Delphi. Страница Additional
Учебно-методическое пособие (Практикум)
Составители:...
38 downloads
378 Views
514KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Федеральное агентство по образованию
Delphi. Страница Additional
Учебно-методическое пособие (Практикум)
Составители: В.В. Васильев Л.В. Хливненко
ВОРОНЕЖ 2007
2
Утверждено Научно-методическим советом математического факультета 31 января 2007 года, протокол № 5
Рецензент С.В. Писарева
Учебно-методическое пособие (практикум) подготовлен на кафедре математического моделирования математического факультета Воронежского государственного университета.
Рекомендовано для студентов 4-6 курсов всех форм обучения.
Для направления 010101 (010100) Математика
3 1. Подключение форм. Компонент BitBtn В данной лабораторной работе мы познакомимся с рядом компонент страницы Additional (дополнительные), которые, так же как и компоненты закладки Standard, используются в диалоговых окнах Windows: BitBtn – Командная кнопка с надписью и гравировкой. Bevel – Кромка (область формы с вложенными объемными бордюрами). SpeedButton – Кнопка с пиктограммой (используется на панели инструментов для быстрого доступа к команде меню). Image - Рисунок (предоставляет возможность включения рисунков в форму). Shape - Фигура (служит для включения в форму автофигур – прямоугольников, эллипсов и др.). StringGrid – Сетка строк (позволяет отображать текст в табличном виде). MaskEdit – Однострочный текстовый редактор (позволяет организовать ввод текста по заданной маске). ScrollBox – Панель с полосами прокрутки (автоматически вставляет полосы прокрутки, если размеры панели позволяют просматривать только часть ее элементов). В данной лабораторной работе продолжается разработка проекта с формой StandardTab (см. рис.1). На форме StandardTab появилась новая кнопка для перехода на вторую форму проекта. Рис.1. Окно работающей формы StandardTab с добавленной кнопкой Дальше. На рис. 2 показано окно добавленной формы, запущенной на исполнение. Ниже описан порядок работы компонент этой формы Порядок работы программы: 1. При нажатии кнопки первая форма должна закрываться, а в центре экрана должно открываться окно второй формы. При нажатии во втором окне кнопки вторая форма должна закрываться и снова открываться первая. При нажатии на кнопку окно второй формы закрывается, и вся программа выгружается из памяти.
4
Рис.2. Окно добавленной формы в режиме исполнения программы.
2. На второй форме сформирована панель инструментов, на которой присутствуют две быстрые кнопки и , фигура и рисунок , символизирующий логотип фирмы. При вызове окна второй формы кнопка (Показать логотип) невидима. При нажатии на кнопку (Убрать логотип) на панели инструментов второй формы становится меняется видимой кнопка , рисунок исчезает, а у фигуры цвет с желтого на зеленый. При установке мыши на кнопку всплывает сообщение-подсказка. При нажатии на кнопку рисунок снова становится видимым и восстанавливается желтый цвет заливки фигуры . На этом этапе с помощью встроенного в Delphi графического редактора Image Editor необходимо самостоятельно сделать гравировку для кнопки . Слева на линейке инструментов расположена внутренняя панель с надписью Логотип фирмы. 3. Ниже панели инструментов расположена сетка строк, имеющая 6 столбцов – Фамилия И.О., Должность, Отдел, Филиал, Телефон, Зар.плата. Слева от сетки строк находятся три поля с подписями Фамилия И.О., Телефон, Зар.плата. Поля Телефон и Зар.плата снабжены маской ввода, показывающей формат вводимой величины. Информацию, введенную в поля первой и второй страниц формы можно отправить в сетку строк нажатием клавиши Ввести данные. Очистить содержимое сетки строк можно нажатием на кнопку Очистить сетку. 4. Ниже расположено окно, через которое с помощью линеек прокрутки можно получить доступ к кнопкам Запись в файл, Считывание из файла, Помощь. Набор кнопок сопровождается строкой-заголовком. Как и в предыдущей работе, создание проекта разбивается на несколько этапов в соответствии с пунктами порядка работы программы. План примера 1. 1-7. Создание на форме StandardTab кнопки . 8-12. Добавление в проект второй формы AdditionalTab. 13-16. Подключение формы AdditionalTab к форме StandardTab. . 17-21. Добавление к форме AdditionalTab кнопки 22-25. Создание на форме AdditionalTab кнопки 26-29. Организация корректного завершения работы проекта.
.
5 Пример работы 1: Подсказка 1. Войдите в Delphi Пуск|Программы|Delphi 2. Откройте проект, созданный в преды- File|Open Project... дущей работе 3. Сделайте запасную копию проекта Используйте Мой компьютер 4. Положите на форму кнопку с гравиСтраница Additional ровкой BitBtn 5. Сделайте на кнопке надпись Дальше Свойство Caption Кнопка BitBtn является потомком класса TButton и представляет собой командную кнопку с гравировкой. Особенное свойство Glyph указывает растровое изображение, отображаемое на поверхности кнопки. Гравировка может быть стандартной, взятой из поставляемого с Delphi каталога Images/Button. Можно создать гравировку для кнопки самостоятельно с помощью встроенного графического редактора Image Editor. Кнопка BitBtn может находиться в одном из четырех состояний – нормальное, запрещенное, нажатое и утопленное. Поэтому максимальное количество различных гравировок на кнопке, характеризующих ее состояние, может равняться четырем. Свойство NumGlyphs устанавливает количество гравировок. Различные гравировки рисуются в виде одного растра, вытянутого по горизонтали. Если гравировка квадратная и для кнопки рисуется все 4 разновидности, то длина горизонтального растра будет в 4 раза больше, чем ширина. Стандартный размер одной гравировки 16х16 пикселей. Если для кнопки задана только одна гравировка, то при работе программы ее вид будет изменяться автоматически. Например, в состоянии «запрещенная» все цвета, кроме черного, меняются на оттенки серого, а черный цвет инвертируется в белый. 6. Положите на кнопку стандартную Щелкните по кнопке с тремя точками справа от свойства Glyph гравировку со стрелкой вправо В открывшемся окне Picture Editor для загрузки готового рисунка надо кликнуть по кнопке Load (загрузить). В диалоговом окне выбора файла нужно указать путь к каталогу Images/Buttons, поставляемому вместе с Delphi. При инсталляции Delphi дается возможность указания места на диске. Поэтому путь к нужному каталогу может быть разным на разных ПК. Попробуйте поискать этот каталог по адресу Program Files/Common Files/Borland Shared/Images/Buttons/ Посмотрите стандартные гравировки и выберите файл arrow1r.bmp с красной стрелкой вправо . Нажмите Open, а затем ОК. Вы можете переключить свойство Enabled (доступ) кнопки BitBtn между состояниями True и False и посмотреть различия в изображении нормального и запрещенного состояний кнопки. 7. Прижмите гравировку к пра- Свойство Layout. Значение blGlyphRight вому краю кнопки
6 Некоторые свойства компонента BitBtn: Расстояние в пикселах от края кнопки до гравировки • Margin • Spacing Расстояние в пикселах от гравировки до надписи Стиль оформления кнопки, зависящий от типа операцион• Style ной системы Добавим к нашему проекту вторую форму и подключим ее к первой 8. Добавьте в про- File|New Form… или клик по быстрой кнопке ект новую форму на панели инструментов 9. Назовите новую форму AdditionalTab Свойство Name 10. В строке заголовка формы напишите Компонен- Свойство Caption ты закладки Additional 11. Сохраните форму в каталог, где находится Ваш File|Save As… проект под именем forma2 Для того чтобы при вызове вторая форма появлялась в середине экрана, нужно изменить ее свойство Position. По умолчанию свойство установлено в poDesigned. Это означает, что координаты отображения формы во время выполнения программы будут совпадать с координатами отображения формы во время ее создания. 12. Сделайте так, чтобы при открытии вто- Значение poScreenCenter рой формы она появлялась в центре экрана свойства формы Position Для того чтобы формы «видели» друг друга, нужно к модулю каждой формы подключить модуль другой из них. Для корректной работы формы это надо сделать не в интерфейсной части (как обычно), а в исполняемой части модуля после служебного слова Implementation. Напомним, что при работе с формой переход от формы к ее модулю и обратно осуществляется с помощью клавиши F12. Для вызова другой формы можно вызвать меню форм командой Veiw|Forms и выбрать нужное имя формы из списка. 13. Подключите к модулю второй формы F12. Найдите нужный участок модуль первой кода и допишите его: implementation uses forma1; 14. Откройте форму StandardTab Veiw|Forms или Shift+F12 15. Подключите к F12. Найдите нужный участок кода и допишите его: implementation модулю первой uses forma2; формы модуль второй 16. Напишите об- procedure TStandardTab. BitBtn1Click(Sender: TObject); работчик собыbegin тия OnClick кноп{Убрать с экрана окно формы StandardTab} ки Дальше, убиStandardTab.Hide; рающий с экрана {Показать на экране окно формы AdditionalTab} форму Standard-
7 AdditionalTab.Show; Tab и открываюend; щий форму AdditionalTab Организуем переход в обратную сторону так, чтобы клик по кнопке Назад в окне второй формы выводил бы на экран первую. 17. Откройте модуль формы AdditionalTab Veiw|Forms или Shift+F12 18. Положите на форму кнопку BitBtn Страница Additional 19. Сделайте на кнопке надпись Назад Свойство Caption 20. Положите на кнопку стандарт- Свойство Glyph. Кнопка Load. Файл ную гравировку с красной стрел- arrow1l.bmp кой влево procedure TAdditional21. Напишите Tab.BitBtn1Click(Sender: TObject); обработчик соbegin бытия OnClick {Показать на экране окно формы StandardTab} кнопки Назад, StandardTab.Show; убирающий с {Убрать с экрана окно формы AdditionalTab} экрана форму AdditionalTab.Hide; AdditionalTab и end; открывающий форму StandardTab На данном этапе при запуске программы должно открываться окно первой формы, а затем по нажатию на кнопку Дальше первое окно исчезает и появляется второе, клик по кнопке Назад скрывает окно второй формы и выводит первую. Если на данном этапе Вы запустите проект на исполнение, то увидите, что выход из программы происходит некорректно. Несмотря на то что формы закрываются, приложение остается в памяти, впустую расходуя ресурсы компьютера и мешая Вам работать с макетом формы. Научимся корректно завершать работу проекта, состоящего из нескольких форм. Для начала положим на вторую форму кнопку Выход. 22. Положите на форму Additional- Страница Additional Tab кнопку BitBtn2 Рис.3. Стандартные виды оформления кнопки BitBtn. У компонента BitBtn есть еще одно интересное свойство Kind, позволяющее указать одну из 11 стандартных видов кнопки, показанных на рис.3. Если пользователь сам положил на кнопку гравировку , то значение свойства Kind автоматически изменится на bkCustom. 23. Оформите BitBtn2 как кнопку bkClose
Свойство Kind
8 24. Сделайте на кнопке надпись Выход
Значение &Выход свойства Caption 25. Напишите обра- procedure TAdditionalTab.BitBtn2Click (Sender: TObject); ботчик события Onbegin Click кнопки Выход, {Закрыть форму AdditionalTab} закрывающий форAdditionalTab.Close; му AdditionalTab end; Для корректной работы кнопки Выход в событие OnClose формы AdditionalTab нужно добавить обработчик, завершающий работу приложения и выгружающий его из памяти. Клик в свободном месте формы. Клик 26. Откройте вкладку Events инспектора объектов для формы Ad- по закладке Events ditionalTab procedure TAdditionalTab.FormClose 27. Напишите обра(Sender: TObject; var Action: ботчик события OnTCloseAction); Close формы Additionbegin alTa {Завершить работу приложения} Application.Terminate; end; 28. Сохраните формы и проект File|Save All F9 29. Проверьте работу программы Первый этап работы закончен. В остальных примерах работы будет рассматриваться создание второй формы проекта. 2. Компоненты Bevel, Image, Shape, SpeedButton Приступим к реализации второго этапа нашего проекта. В примере работы 2 будет оформлена панель инструментов формы AdditionalTab. Макет формы после выполнения примера работы 2 показан на рис. 4. План примера 2 1-3. Оформление кнопок Назад и Выход с помощью компонента Bevel. 4-7. Создание линейки инструментов с заголовком Логотип фирмы. 8-10. Работа с компонентом Image. 11-14. Создание фигуры Shape. 15-18. Добавление быстрой кнопки SpeedButton со стандартной гравировкой. 19-25. Изготовление собственной гравировки во встроенном редакторе. 26-29. Оформление быстрой кнопки с собственной гравировкой.
Рис.4. Макет формы AdditionalTab после выполнения примера работы 2.
9 30-33. Написание обработчиков нажатий быстрых кнопок и тестирование работы программы. Пример работы 2: Подсказка 1. Сделайте запасную копию проекта Используйте Мой компьютер Познакомимся с компонентом Bevel, предназначенным для выделения группы элементов формы. 2. Оформите кнопки Назад и Выход с поСтраница Additional мощью компонента Bevel 3. Положите над кнопками надпись Кнопки Компонент Label навигации Некоторые свойства компонента Bevel: Shape Вид компонента Bevel. Значения – bsBox (объемный прямоугольник), bsFrame (прямоугольник), bsTopLine (верхняя линия), bsButtomLine (нижняя линия), bsLeftLine (линия слева), bsRightLine (линия справа) Style Стиль (bsRaised - выпуклый, bsLowered - вдавленный) Для создания линейки инструментов используем компонент Panel из закладки Standard. 4. Положите на форму панель для ин- Компонент Panel струментов 5. Удалите надпись на панели Свойство Caption 6. Выровняйте панель по верхнему Значение alTop свойства Align краю формы 7. Сделайте на панели заголовок Ло- Компонент Panel готип фирмы Положим справа от заголовка логотип фирмы – картинку. Для этого познакомимся с компонентом Image, способным отображать графику. Свяжем компонент с одной из стандартных пиктограмм, поставляемых с Delphi. 8. Положите справа от заголовка Страница Additional компонент Image Главным свойством компонента Image является свойство Picture, связывающее компонент и рисунок. Логическое свойство Stretch разрешает либо запрещает масштабирование изображения под размеры компонента Image. 9. Свяжите компонент Image1 с Свойство Picture. Каталог Images/ Icons/ рисунком finance.ico 10. Разрешите масштабирование Значение True свойства Stretch рисунка Справа от компонента Image расположим стандартную фигуру Shape. Свойство Shape этого компонента определяет вид фигуры – stRectangle (прямоугольник), stSquare (квадрат), stRoundRect (прямоугольник с округ-
10 лыми краями), stRoundSquare (квадрат с округлыми краями), stEllipse (эллипс), stCircle (окружность). 11. Положите справа от рисунка Страница Additional компонент Shape 12. Определите вид фигуры - ок- Значение stCircle свойства Shape ружность Группа свойств Pen (перо) определяет стиль границы фигуры, а группа свойств Brush (кисть) – стиль заливки. 13. Сделайте цвет грани- Значение clGreen свойства Color группы Pen цы зеленым 14. Залейте окружность Значение clYellow свойства Color группы желтым цветом Brush Создадим кнопки управления элементами Image и Shape. Положим на панель инструментов быструю кнопку SpeedButton , клик по которой будет скрывать логотип фирмы, менять заливку окружности и проявлять кнопку возврата в исходное состояние. 15. Добавьте на панель кнопку Страница Additional SpeedButton Быстрые кнопки SpeedButton похожи по свойствам на кнопки BitBtn. Отличительной чертой кнопок SpeedButton является возможность фиксации утопленного состояния. Кнопки SpeedButton можно группировать. Зафиксированная в нажатом состоянии кнопка отпускается при выборе другой кнопки из группы. Значение 0 свойства GroupIndex определяет вариант одиночной фиксируемой кнопки. Логическое свойство AllowAllUp определяет порядок освобождения кнопки. При значении True утопленная кнопка освобождается только при нажатии другой кнопки группы. При значении False кнопка освобождается повторным кликом. Положим на добавленную быструю кнопку стандартную гравировку из файла abort.bmp . 16. Положите на кнопку SpeedBut- Свойство Glyph ton гравировку abort.bmp У всех визуальных компонент есть свойство Hint (подсказка). В свойстве Hint хранится строка текста, которая загорается рядом с курсором мыши, когда пользователь останавливает его на короткое время над соответствующим компонентом. Для разрешения отображения подсказки нужно свойству ShowHints задать значение True. 17. Сделайте подсказку «Убрать лого- Свойства Hint, ShowHints тип» к быстрой кнопке 18. Организуйте группу быстрых Значение 1 свойства GroupIndex кнопок
11 При выборе быстрой кнопки из группы она переходит в состояние «утопленная», а все остальные кнопки возвращаются в «нормальное» состояние. Создадим на линейке инструментов вторую быструю кнопку , клик по которой будет вновь выводить логотип фирмы и восстанавливать первоначальный цвет заливки фигуры. 19. Положите слева от кнопки Страница Additional SpeedButton1 кнопку SpeedButton2 С помощью встроенного редактора Image Editor нарисуем свою гравировку для второй быстрой кнопки. Image Editor – это простая «рисовальная» программа, предназначенная для создания пиктограмм, битовых матриц, … Наша гравировка будет представлять собой горизонтальный растр 64х16 пикселей, состоящих из 4-х разноцветных букв Л (Логотип) . 20. Вызовите окно Image Editor Tools|Image Editor... 21. Создайте новый файл File|New|Bitmap File (.bmp) 22. Укажите размеры рисунка Width (ширина)=64, Height (высота)=16 – растра Инструмент Zoom (изменение масшта23. Увеличьте размер изоба) бражения Пользуйтесь инструментами редактора 24. Создайте изображение Изображение должно состоять из четырех одинаковых квадратных зон (гравировок для четырех состояний кнопки). В центре каждой зоны поместите большую букву Л (синюю, серую, красную, фиолетовую). 25. Сохраните рисунок в файле my_pic.bmp File|Save As... 26. Положите на кнопку SpeedButton2 созСвойство Glyph данную гравировку my_pic.bmp Посмотрите значение свойства NumGlyphs (количество гравировок). Оно автоматически должно получить значение 4. 27. Включите кнопку SpeedButton2 Значение 1 свойства GroupIndex в группу 28. Сделайте кнопку SpeedButton2 Значение False свойства Visible невидимой 29. Сделайте подсказку «Показать ло- Свойства Hint, ShowHints готип» к SpeedButton2 Добавим коды обработки нажатий кнопок SpeedButton1 и SpeedButton2. procedure TAdditionalTab.SpeedButton1Click 30. Напи(Sender: TObject); шите обbegin работчик {Если кнопка SpeedButton1 нажата, то выполнить действия} события if SpeedButton1.Down=True then OnClick begin кнопки {Сделать видимой вторую быструю кнопку SpeedButton2} Speed-
12 SpeedButton2.Visible:=True; {Сделать невидимой картинку Image1} Image1.Visible:=False; {Поменять цвет заливки фигуры Shap1 на ярко-зеленый} Shape1.Brush.Color:=clLime end; end; procedure TAdditionalTab.SpeedButton2Click 31. Напи(Sender: TObject); шите обbegin работчик {Если кнопка SpeedButton2 нажата, то выполнить действия} события if SpeedButton2.Down=True then OnClick begin кнопки {Сделать видимой картинку Image1} SpeedImage1.Visible:=True; Button2 {Восстановить желтый цвет заливки фигуры Shap1} (Показать Shape1.Brush.Color:=clYellow логотип) end; end; 32. Сохраните формы и File|Save, File|Save Project As... проект на диск 33. Проверьте работу про- F9. Обратите внимание на подсказки к кнопкам граммы На этом этап, посвященный украшению второй формы нашего проекта, будем считать завершенным и приступим к содержательному наполнению формы AdditionalTab. Button1 (Убрать логотип)
3. Компоненты MaskEdit и StringGrid Дополним форму AdditionalTab полями для ввода личной информации о сотруднике – Фамилия И.О., Телефонный номер, Заработная плата. Организуем ввод всей введенной информации о сотруднике с двух форм в сетку строк. После завершения примера работы 3 наша форма должна выглядеть так, как показано на рисунке 5. План примера 3 1-4. Добавление компонента Edit1 – поля Фамилия И.О.. 5-12. Работа с полями MaskEdit – Телефон и Заработная плата. 13-16. Оформление сетки строк StringGrid1. 17-22. Добавление кнопок BitBtn – Ввести данные и Очистить сетку. 23-26. Написание обработчиков нажатий кнопок BitBtn и тестирование работы программы. Рис.5. Макет формы AdditionalTab после выполнения примера работы 3.
13
Пример работы 3: Подсказка 1. Сделайте запасную копию проекта Используйте Мой компьютер 2. Положите на форму однострочный текСтраница Standard стовый редактор Edit1 3. Удалите надпись в компоненте Edit1 Свойство Text 4. Подпишите добавленное Компонент Label, страница Standard поле Фамилия И.О. 5. Положите на форму поле с маской ввода Страница Additional MaskEdit1 6. Удалите надпись в компоненте MaskEdit1 Свойство Text 7. Подпишите добавленное Компонент Label, страница Standard поле Телефон Компонент MaskEdit представляет собой однострочный текстовый редактор и предназначен для ввода текста по шаблону (по маске). Специальное свойство EditMask содержит маску шаблона. Маска состоит из трех частей, отделенных друг от друга точкой с запятой. Первая часть содержит маску ввода. Вторая – «0» или «1». «0» означает, что в свойство Text записывается текст, введенный пользователем без маски ввода. «1» - в свойство Text записывается текст с символами маски. В третьей части указывается символ, который в шаблоне обозначает позицию, вводимую пользователем. Приведем некоторые специальные символы, использующиеся при составлении масок. L – поле должно содержать букву, l – поле может содержать букву, 0 – поле должно содержать цифру, 9 – поле может содержать цифру, a – поле может содержать букву или цифру, с – поле может содержать любой символ, \ - следующий символ надо включить в маску. Пусть в нашем примере все номера служебных телефонов начинаются, как в ВГУ, с 208. В этом случае шаблон маски будет выглядеть так: \2\0\8\-999;1;#. В поле MaskEdit при работе программы пользователь увидит 208-###. Вместо # он сможет ввести только цифры. 8. Задайте маску ввода номера слуСвойство EditMask жебного телефона 9. Положите на форму поле с маской ввода Страница Additional MaskEdit2 10. Удалите надпись в компоненте MaskEdit2 Свойство Text 11. Подпишите добавленное поле Компонент Label, страница Standard Заработная плата Для того чтобы задать маску ввода, щелкните по кнопке с тремя точками правее свойства EditMask компонента MaskEdit2. При этом запускается редактор маски ввода. В нем можно выбрать стандартную маску из стандартного файла с расширением dem. Можно ввести свою маску в поле Input Mask. Для поля Заработная плата введем, например, маску 999999 р.;0;_. При вызове формы AdditionalTab пользователь увидит _________ р.
14 12. Задайте маску ввода размера заработной платы Свойство EditMask Справа от столбика полей расположим сетку строк – компонент StringGrid, который предназначен для отображения на экране строк – величин типа String (и только такого типа!) в виде таблицы. В сетке строк мы будем записывать фамилии, должности, отделы, филиалы, номера телефонов и заработную плату наших сотрудников. 13. Положите справа от столбца поле сетку Страница Additional строк StringGrid1 Таблица StringGrid делится на две части – фиксированную и рабочую. В фиксированной части расположены названия строк и столбцов. В рабочей части – текстовые данные таблицы. Если размеры рабочей части больше размеров компонента, то автоматически появляются нужные полосы прокрутки. Научимся управлять видом компонента StringGrid. Некоторые свойства компонента StringGrid: Стиль внешней рамки таблицы • BorderStyle Номер столбца, строки сфокусированной ячейки • Col,Row • ColCount, Row- Количество столбцов, строк таблицы Count Одномерный массив, i-й элемент которого содер• ColWidth[i], RowHeights[i] жит ширину столбца, высоту строки номер i Количество столбцов, строк в фиксированной зоне. • FixedCols, FixedRows Двумерный массив, обеспечивающий доступ к • Cells[i,j] данным из ячеек таблицы StringGrid Оформим внешний вид компонента StringGrid нашей формы. Свойства ColCount и RowCount 14. Задайте в таблице StringGrid1 - 6 столбцов и 4 строки 15. Уберите из фиксированной части Значение 0 свойства FixedCols таблицы столбцы На макете формы мы получим таблицу, состоящую из 4 строк и 6 столбцов. При этом по умолчанию запрещено редактирование первой строки (она входит в фиксированную часть таблицы), в которой мы расположим заголовки столбцов таблицы. Зададим сами ширину каждого поля (ширина по умолчанию может оказаться мала для полного отображения данных). Для этого напишем обработчик события OnCreate (при создании) формы AdditionalTab. procedure TAdditionalTab.FormCreate (Sender: 16. НапиTObject); шите обbegin работчик {Задание ширины столбцов таблицы StringGrid1} события StringGrid1.ColWidths[0]:=100; OnCreate StringGrid1.ColWidths[1]:=80; формы StringGrid1.ColWidths[2]:=90; Addition-
15 StringGrid1.ColWidths[3]:=100; StringGrid1.ColWidths[4]:=50; StringGrid1.ColWidths[5]:=70; {Задание данных фиксированной зоны таблицы StringGrid1} StringGrid1.Cells[0,0]:='Фамилия И.О.'; StringGrid1.Cells[1,0]:='Должность'; StringGrid1.Cells[2,0]:='Отдел'; StringGrid1.Cells[3,0]:='Филиал'; StringGrid1.Cells[4,0]:='Телефон'; StringGrid1.Cells[5,0]:='Зар.плата,р.'; end; Сделанные установки начнут действовать сразу по открытию окна формы AdditionalTab. Положим ниже сетки строк две кнопки BitBtn – Ввести данные и Очистить сетку. 17. Положите ниже сетки строк Страница Additional кнопку BitBtn3 18. Сделайте на кнопке надпись Свойство Caption Ввести данные Свойство Glyph. Кнопка Load. Файл 19. Положите на кнопку станedit.bmp. Кнопки Open и ОК дартную гравировку 20. Положите ниже сетки строк кнопку BitBtn4 Страница Additional 21. Сделайте на кнопке надпись Свойство Caption Очистить сетку Свойство Glyph. Кнопка Load. Файл 22. Положите на кнопку станsort.bmp. Кнопки Open и ОК дартную гравировку Нажатие на кнопку Ввести данные переводит содержимое полей Фамилия И.О., Должность, Отдел, Филиал, Телефон, Заработная плата в сетку строк. Для этого напишем обработчик события OnClick кнопки BitBtn3. В рабочей зоне таблицы StringGrid1 три строки. Информация о сотруднике будет выводиться во вторую строку рабочей зоны. alTab
В двухмерном массиве StringGrid1.Cells первый индекс определяет номер столбца, а второй номер строки. procedure TAdditionalTab.BitBtn3Click(Sender: 23. НаTObject); пишите обработ- begin {Копирование в ячейки таблицы StringGrid1 содержимого почик солей} бытия StringGrid1.Cells[0,2]:=Edit1.Text; OnClick Stringкнопки BitBtn3 Grid1.Cells[1,2]:=StandardTab.Edit1.Text; String- ВвеGrid1.Cells[2,2]:=StandardTab.ListBox1.Items сти [Standardданные Tab.ListBox1.ItemIndex];
16 StringGrid1.Cells[3,2]:=StandardTab.ComboBox 1.Text; StringGrid1.Cells[4,2]:=MaskEdit1.Text; StringGrid1.Cells[5,2]:=MaskEdit2.Text; end; Введем обработчик нажатия кнопки Очистить сетку. Для этого опишем в процедуре локальную переменную i – параметр цикла. procedure TAdditionalTab.BitBtn4Click(Sender: 24. НапиTObject); шите обработчик со- var i:integer; begin бытия On{В таблице StringGrid1 обнулить 6 первых ячеек Click кнопки BitBtn4 3-й строки} with StringGrid1 do – Очиfor i:=0 to 5 do Cells[i,2]:=''; стить end; сетку 25. Сохраните формы и проект File|Save All F9 26. Проверьте работу программы При работе с проектом обратите внимание на то, что в полях MaskEdit можно вводить только цифры или ничего. Свойство Text компонента MaskEdit1 содержит символы маски (208-), отображаемые в колонке Телефон таблицы. Свойство Text компонента MaskEdit2 не содержит символов маски (р.), отображаемых в колонке Зар.плата,р. таблицы. 4. Компонент ScrollBox. Работа с файлами В правом нижнем углу формы расположим компонент ScrollBox (панель с полосой прокрутки), служащий контейнером для других элементов. ScrollBox экономит место на форме, так как позволяет включать в нее блоки, по размеру превосходящие на форме место, отведенное под компонент ScrollBox. Добавленный контейнер ScrollBox мы наполним командными кнопками – Запись в файл, Считывание из файла, Помощь. После выполнения примера работы 4 макет формы AdditionalTab будет выглядеть так, как показано на рисунке 6. Рис.6. Макет формы AdditionalTab после выполнения примера работы 4. План примера 4 1-2. Добавление компонента ScrollBox1. 3-10. Создание внутри ScrollBox1 панели с названиями кнопок.
17 11-19. Оформление кнопок Запись в файл, Считывание из файла и Помощь. 20-25. Написание обработчиков для кнопок и проверка их работы. Пример работы 4: Подсказка 1. Сделайте запасную копию проекта Используйте Мой компьютер 2. Положите на форму панель с полосой Страница Additional прокрутки ScrollBox1 Некоторые свойства компонента ScrollBox: Группа свойств горизонтальной полосы прокрутки • HorzScrollBar • VertScrollBar Группа свойств вертикальной полосы прокрутки Обратите внимание на размеры компонента ScrollBar (свойства Height и Width). В нашем примере фактические размеры компонента не превышают 100 по вертикали и 400 по горизонтали. Положим на форму для заголовков кнопок компонент Panel, размеры которого превышают размеры контейнера ScrollBox. 3. Положите на контейнер ScrollBox панель Страница Standard Panel2 4. Увеличьте ширину панели Panel2 Свойство Width Автоматически должна появиться горизонтальная полоса прокрутки у компонента ScrollBox, с помощью которой можно работать с панелью по всей ее длине. Положим на панель два компоненты Bevel. Один из которых имеет вид вертикальной полосы справа, а другой слева. Панель при этом разобьется на три объемные части. На каждую из частей положим элемент Label, в свойстве Caption которого укажем подписи к кнопкам. 5. Удалите надпись на панели Свойство Caption 6. Положите на Panel2 первую справа Элемент Bevel, свойство Shape вертикальную полосу 7. Положите на Panel2 первую слева Элемент Bevel, свойство Shape вертикальную полосу 8. Сделайте надпись Запись в Элемент Label, свойство Caption файл 9. Сделайте надпись Считывание Элемент Label, свойство Caption из файла 10. Сделайте надпись Помощь Элемент Label, свойство Caption Положим под сделанными надписями кнопки BitBtn, клик по которым будет запускать нужный обработчик. 11. Положите ниже сетки строк Страница Additional кнопку BitBtn5 12. Удалите надпись BitBtn5 Свойство Caption 13. Положите на кнопку стандарт- Свойство Glyph. Кнопка Load. Файл filesave.bmp. Кнопки Open и ОК ную гравировку 14. Положите ниже сетки строк Страница Additional кнопку BitBtn6
18 15. Удалите надпись BitBtn5 Свойство Caption 16. Положите на кнопку стандарт- Свойство Glyph. Кнопка Load. Файл fileopen.bmp. Кнопки Open и ОК ную гравировку 17. Положите ниже сетки строк Страница Additional кнопку BitBtn7 18. Удалите надпись BitBtn5 Свойство Captio Свойство Glyph. Кнопка Load. Файл 19. Положите на кнопку станhelp.bmp. Кнопки Open и ОК дартную гравировку Напишем обработчик нажатия кнопки Помощь, клик по которой будет выводить окно с известной фразой «Если долго мучиться, что-нибудь получится!» и одной кнопкой ОК. procedure TAdditionalTab.BitBtn7Click 20. Напишите об(Sender: TObject); работчик события begin OnClick кнопки ShowMessage('Если долго мучиться, BitBtn7 – Почто-нибудь получится!'); мощь end; Сделаем часть проекта, обеспечивающую запись содержимого сетки строк в файл people.dat по нажатию кнопки BitBtn5 и считывание содержимого этого файла в сетку строк по нажатию кнопки BitBtn6. Ввиду того, что в нашей сетке всего три строки, для корректного отображения данных файл должен содержать не более трех записей о сотрудниках. Программный код будет содержать переменные и типы, которые необходимо описать в интерфейсной части модуля. Тип stroka_grid описывает запись с текстовыми полями fio, job, division, city, phone, money. Тип fff – это файл из записей stroka_grid. В разделе описания переменных объявлены глобальные переменные – FileSave файлового типа fff, запись text_str типа stroka_grid, целочисленный счетчик записей Cur_Rec, целочисленные индексы массива x,y. Строковая переменная FileName содержит полное имя файла с записями о сотрудниках. 21. Опишите нужные type stroka_grid=record типы и переменные, fio:string[25]; вставив код перед job:string[25]; автоматически созdivision:string[20]; данным служебным city:string[20]; словом var phone:string[7]; money:string[10] end; fff=file of stroka_grid; var FileSave:fff; FileName:string; text_str:stroka_grid;
19 x,y,CurRec:integer; procedure TAdditional22. Напишите обраTab.BitBtn5Click(Sender: TObботчик события Onject); Click кнопки BitBtn5 begin – Запись в файл {Заполнить поля записи text_str содержимым ячеек 2-й строки таблицы StringGrid1} text_str.fio:=AdditionalTab.StringGri d1.Cells[0,2]; text_str.job:=AdditionalTab.StringGri d1.Cells[1,2]; text_str.division:=AdditionalTab.Strin gGrid1.Cells[2,2]; text_str.city:=AdditionalTab.StringGr id1.Cells[3,2]; text_str.phone:=AdditionalTab.StringG rid1.Cells[4,2]; text_str.money:=AdditionalTab.StringG rid1.Cells[5,2]; {Переменной FileName присвоить имя файла в каталоге, где сохранен проект} FileName:='people.dat'; {Связать переменную FileSave с файлом на диске} AssignFile(FileSave,FileName); {Если FileSave существует на диске, то открыть его для чтения и переместить указатель текущего компонента в конец файла, иначе создать файл и открыть для записи} if FileExists(FileName) then begin reset(FileSave);
23. Напишите обра-
Seek(FileSave,FileSize(FileSav e)) end else rewrite(FileSave); {Записать в файл FileSave содержимое записи text_str} write(FileSave,text_str); {Закрыть файл FileSave и для чтения, и для записи} CloseFile(FileSave); end; procedure TAdditional-
20 Tab.BitBtn6Click(Sender: TObботчик события Onject); Click кнопки BitBtn6 begin – Считывание из FileName:='people.dat'; файла AssignFile(FileSave,FileName); {Номеру строки х присвоить 1, номеру столбца у присвоить 0} x:=1; y:=0; if FileExists(FileName) then begin reset(FileSave); {Пока не конец файла читать его компоненты в запись text_str, содержимое полей которой присвоить ячейкам рабочей зоны таблицы StringGrid} while not eof(FileSave) do begin read(FileSave,text_str); AdditionalTab.StringGrid1.Cells[y,x]:= text_str.fio; AdditionalTab.StringGrid1.Cells[y+1,x]:= text_str.job; AdditionalTab.StringGrid1.Cells[y+2,x]:= text_str.division; AdditionalTab.StringGrid1.Cells[y+3,x]:= text_str.city; AdditionalTab.StringGrid1.Cells[y+4,x]:= text_str.phone; AdditionalTab.StringGrid1.Cells[y+5,x]:= text_str.money; x:=x+1 end end else rewrite(FileSave); CloseFile(FileSave); end; 24. Сохраните формы и File|Save, File|Save Project As... проект на диск F9 25. Проверьте работу программы Теперь информацию о сотруднике, введенную в сетку строк, можно записать в файл. Затем, не закрывая проекта, вернуться на первую форму и ввести информацию о другом сотруднике. Также отобразить новую информацию в сетке строк и записать в файл и т.д. Если Вы очистите сетку строк и нажмете кнопку Считывание из файла, то сетка заполнится записями, сохраненными на диск. В каталоге с файлами Вашего проекта появился новый файл people.dat. Количество записей в файле не должно превышать количества строк в рабочей зоне таблицы StringGrid.
21 Delphi снабжает exe-файл нашего проекта стандартной иконкой Изменить стандартный значок можно, выполнив команду Project| Options… На вкладке Application в поле Title можно ввести название проекта, например, «Проект № 1 <Ваша Фамилия и Имя>». Если Вы хотите использовать другой значок для своего приложения, нажмите кнопку Load Icon (Загрузить значок). В окне для выбора файла откройте поставляемый с Delphi каталог Images/Icons. Подберите в этом каталоге подходящую иконку, например, логотип фирмы – finance.ico. С помощью встроенного редактора Image Editor можно создать собственную иконку. В Image Editor нужно выбрать File|New|Icon File (*.ico). Появится окно, в котором задаются параметры иконки. Стандартной считается 16-цветная иконка размером 32х32 пикселя.
©
22
Учебное издание
Delphi. Страница Additional Учебное пособие для вузов (Практикум)
Составители: Васильев Валерий Викторович, Хливненко Любовь Владимировна Редактор
Бунина Т.Д.