![]() |
Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Работа со стандартными компонентами 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; Просмотров: 737; Нарушение авторского права страницы