Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Работа со стандартными компонентами Delphi. ⇐ ПредыдущаяСтр 6 из 6
Целью шестой лабораторной работы является приобретение опыта работы с рядом стандартных компонент системы Delphi, взаимодействия между ними и разработка простой системы контекстной помощи. Последняя строится с использованием подготавливаемого студентом файла MSWord в формате *.rtf, и инструментального средства Microsoft Help Workshop. Описание основных этапов подготовки файла справки доступно студенту в электронном виде.
Материал Уч. Д1, необходимый для написания работы, – LES01.htm – LES07.htm, LES10.htm
Материал Уч. Д2, необходимый для написания работы, – Глава 3, пп. 1-3, Глава 4, пп. 1-2
Перечень основных компонент, необходимых для выполнения работы TForm, TLabel, TButton, TRadioButton, TListBox, TComboBox, TGroupBox, Ttimer, TOKRightDlg, Timage, TOpenPictureDialog, TFontDialog, TColorDialog, TPagesDlg, TPageControl, TMediaPlayer, TstringGrid, MessageDlg, MessageBox
Пример разработки приложения с минимальной функциональностью.
Ниже приведена программа, обладающая следующей функциональностью. Имеется меню, содержащее пункты – Работа с компонентами и О программе, Подпункты меню Работа позволяют работать с рядом стандартных компонент системы Delphi, открывая, при необходимости, дополнительную диалоговую (модальную) форму. Компоненты на главной форме приложения взаимно связаны, синхронизация готовности формы (в виде запроса на комплектующие компьютера) осуществляется с использованием проверки при генерации события таймера. Каждый видимый элемент (кроме меню) имеет номер контекстной справки, отсылающий к разделу справочной системы. Диалоговое окно О программе реализовано как отдельный модуль (форма) и (вследствие его простоты) в методичке не показано, но доступно на диске.
// Главная форма приложения unit Unit1; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Unit2, StdCtrls, ExtCtrls, Unit5, MPlayer; Type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; N6: TMenuItem; N7: TMenuItem; N8: TMenuItem; N9: TMenuItem; N10: TMenuItem; N11: TMenuItem; N12: TMenuItem; ListBox1: TListBox; ComboBox1: TComboBox; Label1: TLabel; Label2: TLabel; GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; GroupBox2: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Button1: TButton; Button2: TButton; CheckBox3: TCheckBox; Timer1: TTimer; procedure N11Click(Sender: TObject); procedure N10Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure N6Click(Sender: TObject); procedure N8Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure N12Click(Sender: TObject); end; {class}
Var Form1: TForm1;
Implementation
uses Unit4; {$R *.dfm}
// Показать элементы формы procedure ShowChoices; begin with Form1 do begin Label1.Visible: =true; Label2.Visible: =true; ComboBox1.Visible: =true; ListBox1.Visible: =true; GroupBox2.Visible: =true; GroupBox1.Visible: =true; Button1.Visible: =true; Button2.Visible: =true; end; end; {proc}
// Спрятать элементы формы procedure HideChoices; begin with Form1 do begin Label1.Visible: =false; Label2.Visible: =false; ComboBox1.Visible: =false; ListBox1.Visible: =false; GroupBox2.Visible: =false; GroupBox1.Visible: =false; Button1.Visible: =false; Button2.Visible: =false; end; end; {proc}
// Запомнить комбинированный список в соответствии с выбором типа процессора procedure FillComboBox; begin with Form1 do begin if RadioButton1.Checked then begin // Intel Platform ComboBox1.Clear; ComboBox1.AddItem('Pentium II 600Mz', nil); ComboBox1.AddItem('Celeron 900Mz', nil); ComboBox1.AddItem('Pentium III 1100Mz', nil); end else begin ComboBox1.Clear; ComboBox1.AddItem('AMD K6 600Mz', nil); ComboBox1.AddItem('AMD K7 900Mz', nil); ComboBox1.AddItem('AMD K7 1500Mz', nil); // AMD platform end; end; end; {proc}
// Выбор пункта меню «О программе» procedure TForm1.N11Click(Sender: TObject); begin Form2: =TForm2.Create(self); end; {proc}
// Выбор пункта меню «Выход» procedure TForm1.N10Click(Sender: TObject); begin Close; end; {proc}
// Выбор пункта меню “Cписки” procedure TForm1.N2Click(Sender: TObject); begin ShowChoices; Label1.Visible: =true; Label2.Visible: =true; ListBox1.Enabled: =true; if(GroupBox2.Enabled) then begin ComboBox1.Enabled: =true; end; Button2.Enabled: =true; end; {proc}
//Выбор кнопки Cancel на форме procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin MessageDlg('Вы отказались от выбора', mtInformation, [mbOK], 0); HideChoices; ListBox1.Enabled: =false; ComboBox1.Enabled: =false; Button1.Enabled: =false; Label1.Visible: =false; Label2.Visible: =false; Button2.Enabled: =false; GroupBox1.Enabled: =false; GroupBox2.Enabled: =false; end; {proc}
//Выбор пункта меню “Кнопки” procedure TForm1.N4Click(Sender: TObject); begin ShowChoices; Button2.Enabled: =true; GroupBox1.Enabled: =true; end; {proc}
// Выбор пункта меню “Радиокнопки” procedure TForm1.N5Click(Sender: TObject); begin ShowChoices;
Button2.Enabled: =true; if(ListBox1.Enabled) then begin // пункт меню Списки был выбран ранее GroupBox2.Enabled: =true; ComboBox1.Enabled: =true; end; RadioButton1.Checked: =true; FillComboBox; end; {proc}
// нажатие на радиокнопку Intel procedure TForm1.RadioButton1Click(Sender: TObject); begin FillComboBox; Form1.ComboBox1.ItemIndex: =0; end; {proc}
// нажатие на радиокнопку AMD procedure TForm1.RadioButton2Click(Sender: TObject); begin FillComboBox; Form1.ComboBox1.ItemIndex: =0; end; {proc}
// проверка готовности заполнения формы procedure TForm1.Timer1Timer(Sender: TObject); begin if ((ComboBox1.ItemIndex< > -1) AND (ListBox1.ItemIndex< > -1) AND (GroupBox1.Enabled) AND (GroupBox2.Enabled)) then begin Button1.Enabled: =True; end; end; {proc}
// Обработка нажатия кнопки «Готово» procedure TForm1.Button1Click(Sender: TObject); var st: string; begin st: = 'Ваш выбор'+#13+#13+ ' Процессор '+ComboBox1.Items[ListBox1.ItemIndex]+ #13+ ' жесткий диск '+ListBox1.Items[ListBox1.ItemIndex] + #13; if(CheckBox1.Checked) then begin st: =st+' Модем'+#13; end; if(CheckBox2.Checked) then begin st: =st+' '+CheckBox2.Caption+#13; end; if(CheckBox3.Checked) then begin st: =st+' '+CheckBox3.Caption+#13; end; ShowMessage(st); HideChoices; ListBox1.Enabled: =false; Label1.Visible: =false; Label2.Visible: =false; ComboBox1.Enabled: =false; Button1.Enabled: =false; Button2.Enabled: =false; GroupBox1.Enabled: =false; GroupBox2.Enabled: =false; end; {proc}
// Пункт меню «Диалоги» procedure TForm1.N6Click(Sender: TObject); begin if OKRightDlg.ShowModal= mrCancel then begin Beep; end else begin end; end; {proc}
// Пункт меню «Мультимедиа» procedure TForm1.N8Click(Sender: TObject); begin // открыт для работы с плэйером Timer1.Enabled: =false; //таймер был нужен для синхронизации в части 1 PagesDlg.PageControl1.TabIndex: =0; PagesDlg.Label1.Visible: =True; PagesDlg.Label2.Visible: =false; PagesDlg.Button1.Visible: =false; PagesDlg.OKBtn.enabled: =true;
if(PagesDlg.ShowModal=1) then begin // закончился по кнопко ОК PagesDlg.Label1.Visible: =false; end else begin PagesDlg.OKBtn.enabled: =false; PagesDlg.Label1.Visible: =false; beep; // закончился через Cancel или закрытие окна end; end; {proc}
// Пункт меню «Таблица» procedure TForm1.N7Click(Sender: TObject); begin // открыт для работы с таблицей Timer1.Enabled: =false; //таймер был нужен для синхронизации в части 1 PagesDlg.Timer1.Enabled: =True; //таймер нужен для оценки готовности таблицы 1 PagesDlg.PageControl1.TabIndex: =1; PagesDlg.StringGrid1.Enabled: =true; PagesDlg.TableClear; if(PagesDlg.ShowModal=1) then begin // закончился по кнопко ОК end else begin beep; // закончился через Cancel или закрытие окна end; PagesDlg.OKBtn.enabled: =false; PagesDlg.Timer1.Enabled: =false; //таймер нужен для оценки готовности таблицы 1 end; {proc}
// Выбор пункта меню «Мини Помощь» procedure TForm1.N12Click(Sender: TObject); begin winhelp(Form1.Handle, 'project_l2_6.hlp', HELP_CONTEXT, 1); end; {proc}
end. //unit1
// Диалоговая (модальная) форма для стандартных диалогов
unit Unit4;
Interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, Dialogs, ExtDlgs;
Type TOKRightDlg = class(TForm) OKBtn: TButton; CancelBtn: TButton; Bevel1: TBevel; OpenPictureDialog1: TOpenPictureDialog; FontDialog1: TFontDialog; ColorDialog1: TColorDialog; Image1: TImage; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; {class}
Var OKRightDlg: TOKRightDlg;
Implementation {$R *.dfm}
// Обработка нажатия кнопки диалога выбора картинки procedure TOKRightDlg.BitBtn1Click(Sender: TObject); begin if (OpenPictureDialog1.Execute)then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); end; end; {proc}
// Обработка нажатия кнопки диалога выбора фонта procedure TOKRightDlg.BitBtn2Click(Sender: TObject); begin if (FontDialog1.Execute)then begin BitBtn2.Font: =FontDialog1.Font; end; end; {proc}
// Обработка нажатия кнопки диалога выбора цвета procedure TOKRightDlg.BitBtn3Click(Sender: TObject); begin if(ColorDialog1.Execute)then begin OKRightDlg.Color: =ColorDialog1.Color; end; end; {proc}
end. // unit4;
// Диалоговая форма для демонстрации страничного доступа, работы с таблицей и использования медиапроигрывателя.
unit Unit5; Interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ComCtrls, ExtCtrls, MPlayer, Grids, QDialogs;
Type TPagesDlg = class(TForm) Panel1: TPanel; Panel2: TPanel; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; OKBtn: TButton; CancelBtn: TButton; StringGrid1: TStringGrid; MediaPlayer1: TMediaPlayer; Label1: TLabel; Label2: TLabel; Button1: TButton; Label3: TLabel; Timer1: TTimer; procedure FormActivate(Sender: TObject); procedure FormDeactivate(Sender: TObject); procedure StringGrid1KeyPress(Sender: TObject; var Key: Char); procedure Button1Click(Sender: TObject); procedure TableClear; procedure Timer1Timer(Sender: TObject); //очистка таблицы private { Private declarations } public { Public declarations } end;
Var PagesDlg: TPagesDlg;
Implementation Uses unit1; {$R *.dfm}
// Обработка входа в диалоговую форму procedure TPagesDlg.FormActivate(Sender: TObject); begin if (PageControl1.TabIndex=0) then begin // работа с плеером
StringGrid1.Enabled: =false; StringGrid1.Visible: =false; MediaPlayer1.Enabled: =true; MediaPlayer1.Visible: =true; MediaPlayer1.Open; MediaPlayer1.Play; end else begin // работа с таблицей MediaPlayer1.Enabled: =false; end; end; {proc}
// Обработка выхода их диалоговой формы procedure TPagesDlg.FormDeactivate(Sender: TObject); begin if (PageControl1.TabIndex=0) then begin // работа с плеером MediaPlayer1.Stop; StringGrid1.Enabled: =true; StringGrid1.Visible: =true; end else begin // работа с таблицей MediaPlayer1.Enabled: =true; end; end; {proc}
// разрешает ввод только цифр и знака минус в поле Таблицы procedure TPagesDlg.StringGrid1KeyPress(Sender: TObject; var Key: Char); begin case key of #8, '0'..'9': ; //Допустимые коды #13: begin // клавиша ввода, переход в следующую колонку if StringGrid1.Col< StringGrid1.ColCount-1 then begin StringGrid1.Col: =StringGrid1.Col+1 end else begin StringGrid1.Col: =0; StringGrid1.Row: =(StringGrid1.Row+1) mod StringGrid1.RowCount; // или строку, если последний столбец end;
end; //#13 '-': begin if Length(StringGrid1.Cells[ StringGrid1.Col, StringGrid1.Row])< > 0 then Key: =Chr(0); //Игнорируем ввод, если символ не первый end; else key: =chr(0); // остальные символы запрещены end; //case end; {proc}
// Расчет суммы по нажатию на кнопку procedure TPagesDlg.Button1Click(Sender: TObject); var i, j, summa: integer; begin summa: =0; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!! Обработка исключений корректно работает!!! //!!! только вне среды разработки Delphi!!! //!!! В среде разработки исключение первым!!! //!!! перехватывает обработчик среды!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! try for i: =0 to StringGrid1.ColCount-1 do begin for j: =0 to StringGrid1.RowCount-1 do begin summa: =summa+StrToInt(StringGrid1.Cells[i, j]); end; end; Label3.Caption: =IntToStr(summa); except on EConvertError do ShowMessage('Не сформирована матрица'); end; end; {proc}
procedure TPagesDlg.TableClear; //очистка таблицы var i, j: integer; begin for j: =0 to StringGrid1.RowCount-1 do begin for i: =0 to StringGrid1.ColCount-1 do begin StringGrid1.Cells[i, j]: =''; end; end; end; {proc}
// таймер используется для выставления флага готовности данных в таблице ( включения доступности кнопки ОК) procedure TPagesDlg.Timer1Timer(Sender: TObject); var i, j: integer; flag: Boolean; begin flag: =False; for i: =0 to StringGrid1.RowCount-1 do begin for j: =0 to StringGrid1.ColCount-1 do begin if StringGrid1.Cells[i, j]='' then begin // есть незаполненный элемент, запретить кнопку ОК; flag: =True; end; //if end; //j end; //i if flag then OKBtn.Enabled: =false else OKBtn.Enabled: =true; end; {proc}
end. //unit5
Задание для выполнения студентами
1. Разберитесь с демонстрационной программой, представленной выше. 2. Создайте систему контекстной пмощи для одной из своих ранее выполненных лабораторных работ
ЛИТЕРАТУРА
1. Уч. Д1 Справочная система по DELPHI, каталог /D1 2.Уч. Д2Учебник по Дельфи, каталог /D2
Учебное издание
Методические указания к лабораторным работам для студентов
Авторы ГневкоСергей Владимирович Крылов Георгий Геннадьевич Шапочкина Ирина Викторовна
В авторской редакции
Ответственный за выпуск Г.Г. Крылов
Белорусский государственный университет. Лицензия на осуществление издательской деятельности 220050, Минск, проспект Независимости, 4.
Отпечатано с оригинала-макета заказчика.
Популярное:
|
Последнее изменение этой страницы: 2016-03-17; Просмотров: 1278; Нарушение авторского права страницы