Работа со стандартными компонентами Delphi.
Лекции.ИНФО


Работа со стандартными компонентами Delphi.



 

Целью шестой лабораторной работы является приобре­тение опыта работы с рядом стандартных компонент системы 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


 

Учебное издание

 

«Программирование в системе Delphi»

 

 

Методические указания к лабораторным работам для студентов
1 курса физического факультета

 

 

Авторы

ГневкоСергей Владимирович

Крылов Георгий Геннадьевич

Шапочкина Ирина Викторовна

 

 

В авторской редакции

 

 

Ответственный за выпуск Г.Г. Крылов

 

 

Белорусский государственный университет.

Лицензия на осуществление издательской деятельности
№ 02330/0056804 от 02.03.2004.

220050, Минск, проспект Независимости, 4.

 

 

Отпечатано с оригинала-макета заказчика.

 









Читайте также:

Последнее изменение этой страницы: 2016-03-17; Просмотров: 98;


lektsia.info 2017 год. Все права принадлежат их авторам! Главная