Главные составные части среды программирования




Ниже перечислены основные составные части Delphi:

1. Дизайнер Форм (Form Designer) (рис.3.1)

2. Окно Редактора Исходного Текста (Editor Window) (рис.3.2)

3. Палитра Компонент (Component Palette) (рис.3.3)

4. Инспектор Объектов (Object Inspector) (рис.3.4)

5. Справочник (On-line help) (рис.3.5)

Рис.3.1: Дизайнер Форм - то место, где Вы создаете визуальный интерфейс программы.

Рис.3.2: В окне Редактора Вы создаете логику управления программой

.

Дизайнер Форм первоначально состоит из одного пустого окна, которое Вы заполняете всевозможными объектами, выбранными на Палитре Компонент.

Несмотря на всю важность Дизайнера Форм, местом, где программисты проводят основное время является Редактор. Логика является движущей силой программы и Редактор - то место, где Вы ее "кодируете".

Палитра Компонент (см. рис.3.3) позволяет Вам выбрать нужные объекты для размещения их на Дизайнере Форм. Выбранный Вами объект появится на проектируемом окне и им можно манипулировать с помощью мыши.

Рис.3.3: Палитра Компонент - место, где Вы выбираете объекты, которые будут помещены на вашу форму

.

Предположим, Вы помещаете компонент TEdit на форму; Вы можете двигать его с места на место. Вы также можете использовать границу, прорисованную вокруг объекта для изменения его размеров. Большинством других компонент можно манипулировать тем же образом. Однако, невидимые во время выполнения программы компоненты (типа TMenu или TDataBase) не меняют своей формы.

Слева от Дизайнера Форм Вы можете видеть Инспектор Объектов (рис.3.4). Заметьте, что информация в Инспекторе Объектов меняется в зависимости от объекта, выбранного на форме. Важно понять, что каждый компонент является настоящим объектом и Вы можете менять его вид и поведение с помощью Инспектора Объектов.

Инспектор Объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий

Рис.3.4. Палитра Компонент - место, где Вы выбираете объекты, которые будут помещены на вашу форму

Последняя важная часть среды Delphi - Справочник (on-line help). Для доступа к этому инструменту нужно просто выбрать в системном меню пункт Help и затем Contents. На экране появится Справочник.

Рис.3.5. Справочник - быстрый поиск любой информации.

Справочник является контекстно-зависимым; при нажатии клавиши F1, Вы получите подсказку, соответствующую текущей ситуации. Например, находясь в Инспекторе Объектов, выберите какое-нибудь свойство и нажмите F1 - Вы получите справку о назначении данного свойства. Если в любой момент работы в среде Delphi возникает неясность или затруднение - жмите F1 и необходимая информация появится на экране.


4. Основная часть

Расчет стоимости разговора

Рис.4.1. Расчет стоимости разговора.

Исходный код:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

const

PAY=0.15; //цена одной минуты разговора 0,15 рубля

DISCOUNT=0.2; // скидка 20 процентов

var

Time:Real; // длительность разговора

Day:integer; // день недели

Summa:real; // стоимость разговора

begin

// получить исходные данные

Time:=StrToFloat(Edit1.Text);

Day:=StrToInt(Edit2.Text);

// Вычислить стоимость разговора

Summa:=PAY*Time;

// Если день суббота или воскресенье, то уменьшить

// стоимость на величину скидки

if (Day = 6) OR (Day=7)

then Summa:=Summa*(1-DISCOUNT);

// вывод результата вычисления

label3.caption:='К оплате'

+ FloatToStr(Summa)+'руб.';

end;

end.

Расчет оптимального веса:

Рис.4.2. Расчет оптимального веса.

Исходный код:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

w:real;{вес}h:real;{рост}opt:real;

{оптимальный вес}

d:real;

{отклонение от оптимального веса}

begin

w:=StrToFloat(Edit1.Text);

h:=StrToFloat(Edit2.Text);

opt:=h-100;

if w=opt then

Label3.Caption:='Вы в хорошей форме!'

else

if w<opt then

begin

d:=opt-w;

Label3.caption:='Вам надо поправиться, на '

+FloatToStr(d)+'кг.';

end

else

begin

d:=w-opt;

Label3.caption:='Вам надо немного похудеть, на '

+FloatToStr(d)+'кг.';

end;

end;

end.

Пример использования case:

Рис.4.3. Пример использования case.

Исходный код:

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

ListBox1: TListBox;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

funt:real; // вес в фунтах

kg:real; // вес в килограммах

k:real; // коэффициент пересчета

begin

case ListBox1.Itemindex of

0: k:=0.4095; // Россия

1: k:=0.453592; // Англия

2:k:=0.56001; // Австрия

3..5,7:k:=0.5; // Германия, Дания, Исландия, Нидерланды

6: k:=0.31762; // Италия

end;

funt:=StrToFloat(Edit1.Text);

kg:=k*funt;

label4.caption:=Edit1.Text

+ ' ф. — это ' + FloatToStrF(kg,ffFixed, 6,3) + 'кг.';

end;

end.

Сложение двух чисел:

Рис.4.4. Сложение двух чисел.

Исходный код:

unit Unit4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Button1: TButton;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

a,b:integer;

c:real;

begin

a:=StrToInt(Edit1.Text);

b:=StrToInt(Edit2.Text);

c:=a/b;

if b=0 then Edit3.Text:='На ноль делить нельзя!';

if b=0 then Edit3.Font.Color:=clRed

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

end.


Деление двух чисел:

Рис.4.5. Деление двух чисел.

Калькулятор:

Рис.4.6. Приложение «Калькулятор».

Исходный код:

unit Unit6;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

RadioGroup1: TRadioGroup;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

a,b:integer;

c:variant;

begin

if Edit1.Text='' then ShowMessage('Ошибка...незаданы значения!') else

if Edit2.Text='' then ShowMessage('Ошибка...незаданы значения!') else

begin

a:=StrToInt(Edit1.Text);

b:=StrToInt(Edit2.Text);

case RadioGroup1.ItemIndex of

0: c:=a+b;

1: c:=a-b;

2: c:=a*b;

3: c:=a/b;

end;

Edit3.Text:=IntToStr(c);

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in [ '0'.. '9', '+', '-' ]) then Key:=#0;

end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in [ '0'.. '9', '+', '-' ]) then Key:=#0;

end;

end.


Приложения для обработки строк:

Рис.4.7. Обработка строк.

Рис.4.8. Обработка строк(с функцией замены).

Исходный код:

unit Unit8;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

i,zam:integer;

s:string;

begin

begin

zam:=0;

s:=edit1.text;

if CheckBox1.Checked then

for i:=1 to length(s) do

if s[i]='а' then

begin

s[i]:='б';

zam:=zam+1;

end;

if CheckBox2.Checked then

for i:=1 to length(s) do

if s[i]=' ' then

begin

s[i]:='-';

zam:=zam+1;

end;

if CheckBox3.Checked then Edit3.Text:=IntToStr(zam);

Edit2.Text:=s;

end; end; end.


Работа с массивами:

Рис.4.9. Работа с одномерными массивами.

Исходный код:

unit Unit9;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Edit2: TEdit;

GroupBox1: TGroupBox;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Button2: TButton;

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

N:string;

i,max,min,Sum,plys:integer;

M:array[1..20] of integer;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if not (Key in [ '0'.. '9' ]) then Key:=#0;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Edit3.Clear;

Edit4.Clear;

Edit5.Clear;

Edit6.Clear;

N:=Edit1.Text;

if StrToInt(N)>20 then ShowMessage ('Дорогой пользователь, для вас специально написано, что указать размер массива не более 20') else begin

randomize;

for i:=1 to StrToInt(N) do begin

m[i]:=random(20);

Edit2.Text:=Edit2.Text+IntToStr(m[i])+ ', ';

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if CheckBox2.Checked then

begin

max:=m[1];

for i:=1 to StrToInt(N) do

begin

if m[i]>max then

begin

max:=m[i];

end;

end;

Edit4.Text:=IntToStr(max);

end;

if CheckBox1.Checked then

begin

min:=m[1];

for i:=1 to StrToInt(N) do

begin

if m[i]<min then

begin

min:=m[i];

end;

end;

Edit3.Text:=IntToStr(min);

end;

if CheckBox3.Checked then

begin

Sum:=0;

for i:=1 to StrToInt(N) do

begin

Sum:=m[i]+Sum;

end;

Edit5.Text:=IntToStr(Sum);

end;

if CheckBox4.Checked then

begin

plys:=0;

for i:=2 to StrToInt(N) do

begin

if m[i]>0 then

begin

plys:=plys+1;

end;

end;

Edit6.Text:=IntToStr(plys);

end;

end;

end.


Обработка двумерного массива:

Рис.4.10. Обработка двумерного массива(случайный ввод чисел в таблицу).

Рис.4.11. Обработка двумерного массива(ввод чисел производится пользователем с клавиатуры).

Исходный код:

unit Unit10;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

Button1: TButton;

GroupBox1: TGroupBox;

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

i,j,min,max,S:integer;

m: array[1..100,1..100] of integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

randomize;

with StringGrid1 do

begin

for i:=1 to ColCount-1 do

begin

for j:=1 to RowCount-1 do

begin

cells[i,j]:=IntToStr(random(100));

end;

end;

for i:=1 to RowCount-1 do

begin

cells[0,i]:=IntToStr(i);

cells[i,0]:=IntToStr(i);

end;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

if CheckBox2.Checked then

begin

max:=m[1,1];

for i:=1 to 100 do

for j:=1 to 100 do

begin

if m[i,j]>max then

begin

max:=m[i,j];

end;

end;

Edit1.Text:=IntToStr(max);

end;

if CheckBox1.Checked then

begin

min:=m[1,1];

for i:=1 to 100 do

for j:=1 to 100 do

begin

if m[i,j]<min then

begin

min:=m[i,j];

end;

end;

Edit2.Text:=IntToStr(min);

end;

if CheckBox3.Checked then

begin

S:=0;

for i:=1 to 100 do

for j:=1 to 100 do

begin

S:=m[i,j]+S;

end;

Edit3.Text:=IntToStr(S);

end;

end;

end.

Рис.4.12. Обработка файла.


Рис.4.13. Обработка файла.

Рис.4.14. Обработка файла.

Рис.4.15. Текстовый редактор.

Исходный код:

unit Unit5;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs,PRINTERS, Vcl.StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Button1: TButton;

Button2: TButton;

Memo1: TMemo;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

PrintDialog1: TPrintDialog;

Button3: TButton;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

S,f:string;

FN:TextFile;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

with OpenDialog1, Memo1 do

if Execute then

Lines.LoadFromFile(FileName);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Memo1.Lines.SaveToFile(OpenDialog1.FileName); // Сохраняем туда, откуда считали

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if PrintDialog1.Execute then

begin

AssignPrn(FN);{открыть доступ к принтеру}

Rewrite(FN);

Writeln(FN,Memo1.Text);

System.CloseFile(FN);{закрыть доступ к принтеру }

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

with SaveDialog1, Memo1 do

if Execute then

begin

Lines.SaveToFile(FileName);

OpenDialog1.FileName:=FileName; // Чтобы исправленный текст не затёр источник

end;

end;

end.

Многооконный текстовый редактор:

Рис.4.16. Многооконный текстовый редактор.

Исходный код:

unit main;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.ActnList, Vcl.StdActns,Printers,

Vcl.ExtActns;

type

TMainForm = 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;

N13: TMenuItem;

N14: TMenuItem;

N15: TMenuItem;

N16: TMenuItem;

N17: TMenuItem;

WindowMenu: TMenuItem;

N19: TMenuItem;

N20: TMenuItem;

N21: TMenuItem;

N22: TMenuItem;

N23: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

FontDialog1: TFontDialog;

PrintDialog1: TPrintDialog;

FindDialog1: TFindDialog;

ReplaceDialog1: TReplaceDialog;

ActionList1: TActionList;

N18: TMenuItem;

N24: TMenuItem;

N25: TMenuItem;

WindowCascade1: TWindowCascade;

WindowTileHorizontal1: TWindowTileHorizontal;

WindowTileVertical1: TWindowTileVertical;

EditCut1: TEditCut;

EditCopy1: TEditCopy;

EditPaste1: TEditPaste;

EditUndo1: TEditUndo;

EditDelete1: TEditDelete;

RichEditAlignLeft1: TRichEditAlignLeft;

RichEditAlignRight1: TRichEditAlignRight;

RichEditAlignCenter1: TRichEditAlignCenter;

SearchFind1: TSearchFind;

SearchReplace1: TSearchReplace;

procedure N4Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure FindDialog1Find(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure N23Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

FName:variant;

F:TextFile;

SPos:integer;

implementation

{$R *.dfm}

uses Child, AboutUnit;

procedure TMainForm.FindDialog1Find(Sender: TObject);

begin

with FindDialog1 do

begin

if frMatchCase In Options then {поиск с учетом регистра}

ChildForm.RichEdit1.SelStart:=Pos(FindText,Copy(ChildForm.RichEdit1.Lines.Text, SPos+1, Length(ChildForm.RichEdit1.Lines.Text)))+Spos-1

else {поиск без учета регистра}

ChildForm.RichEdit1.SelStart:=Pos(AnsiLowerCase(FindText), AnsiLowerCase(Copy(ChildForm.RichEdit1. Lines.text, SPos+1, Length(ChildForm.RichEdit1.Lines.Text))))+SPos-1;

if ChildForm.RichEdit1.SelStart>=SPos then

begin {выделение найденного текста}

ChildForm.RichEdit1.SelLength:=Length(FindText);

Spos:=ChildForm.RichEdit1.SelStart+ChildForm.RichEdit1.SelLength+1;

end

else

if MessageDlg('Текст «'+FindText+'» не найден. Продолжать диалог?',mtConfirmation,mbYesNoCancel,0) = mrYes then CloseDialog;

end;

ChildForm.RichEdit1.SetFocus;

end;

procedure TMainForm.N14Click(Sender: TObject);

begin

SPos:=(ActiveMDIChild as TchildForm).RichEdit1.SelStart; {запомнить позицию курсора}

with FindDialog1 do

begin

FindText:=(ActiveMDIChild as TChildForm).RichEdit1.SelText;

{начальное значение искомого текста - выделенный текст}

{позиционирование окна диалога поиска}

//Position:=Point(ChildForm.Left+ChildForm.Top+ChildForm.RichEdit1.Top+ChildForm.RichEdit1.Height);

Options:=Options+[frHideUpDown,frHideWholeWord];

{удаление из диалога кнопок «Вверх». «Вниз», «только слово целиком»}

Execute; {выполнение поиска}

end;

end;

procedure TMainForm.N15Click(Sender: TObject);

begin

SPos:=ChildForm.RichEdit1.SelStart; //(запомнить позицию курсора)

with ReplaceDialog1 do

begin

FindText:=ChildForm.RichEdit1.SelText; {начальное значение искомого текста -выделенный текст}

{позиционирование окна диалога поиска}

//Position:=Point(ChildForm.Left+ChildForm.Top+ ChildForm.RichEdit1.Top+ChildForm.RichEdit1.Height);

Options:=Options+[frHideUpDown,frHideWholeWord,frReplaceAll]; {удаление из диалога кнопок}

Execute; {выполнение поиска-замены}

end;

end;

procedure TMainForm.N16Click(Sender: TObject);

begin

if FontDialog1.Execute then {если пользователь выбрал шрифт}

begin

(ActiveMDIChild as TChildForm).RichEdit1.Font:=FontDialog1.Font; {установить выбранный шрифт}

end;

end;

procedure TMainForm.N23Click(Sender: TObject);

begin

About.ShowModal;

end;

procedure TMainForm.N4Click(Sender: TObject);

begin

TChildForm.Create(Self);

end;

procedure TMainForm.N5Click(Sender: TObject);

begin

if OpenDialog1.Execute then {если файл выбран, то выполнять следующее}

begin

ChildForm:=TChildForm.Create(Self); {создать дочернее окно}

ChildForm.RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); {загрузить в RichEditl выбранный файл}

ChildForm.Caption:=OpenDialog1.FileName; {установить в заголовок дочернего окна название файла}

ChildForm.RichEdit1.Tag:=0; {признак неизмененного файла}

end;

end;

procedure TMainForm.N6Click(Sender: TObject);

begin

if MDIChildCount=0 then Exit; {если нет MD1 дочерних окон, то выйти из процедуры}

if (ActiveMDIChild as TChildForm).Caption='Новый' then {если документ имеет заголовок окна «Новый»}

N5Click(Sender) {вызвать процедуру «Сохранить как...»}

else

begin {Сохранить файл с именем, указанным в заголовке}

(ActiveMDIChild as TChildForm).RichEdit1.Lines.

SaveToFile((ActiveMDIChild as TChildForm).Caption);

(ActiveMDIChild as TChildForm).RichEdit1.Tag:=0;

end;

end;

procedure TMainForm.N7Click(Sender: TObject);{сохранить как...}

begin

if MDIChildCount=0 then Exit; {если нет MDI дочерних окон, то выйти из процедуры}

SaveDialog1.FileName:=FName; {присвоить свойству FileName значение из FName}

SaveDialog1.Title:='Сохранить как...'; {заголовок диалогового окна сохранения файла}

if SaveDialog1.Execute then

begin

FName:=SaveDialog1.FileName; {открыть диалог и запомнить новое имя файла}

case SaveDialog1.FilterIndex of {Изменить расширение файла}

1: FName:=ChangeFileExt(FName,'.doc');

2: FName:=ChangeFileExt(FName,'.rtf');

3: FName:=ChangeFileExt(FName,'.txt');

end;

end;

(ActiveMDIChild as TChildForm).RichEdit1.Lines.SaveToFile(FName); {записать в файл содержимое из свойства Lines объекта RichEdit активного окна}

(ActiveMDIChild as TChildForm).Caption:=FName; {заменить имя файла в заголовке активного окна}

(ActiveMDIChild as TChildForm).RichEdit1.Tag:=0; {изменения в файле сохранены}

end;

procedure TMainForm.N8Click(Sender: TObject);

begin

if PrintDialog1.Execute then

begin

AssignPrn(F);{открыть доступ к принтеру}

Rewrite(F);

Writeln(F,(ActiveMDIChild as TChildForm).RichEdit1.Text);

System.CloseFile(F);{закрыть доступ к принтеру }

end;

end;

procedure TMainForm.N9Click(Sender: TObject);

begin

Close;

end;

end.

Медиаплеер:

Рис.4.17. Медиаплеер.

Исходный код:

unit Unit1;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.MPlayer, Vcl.StdCtrls, Vcl.ExtCtrls;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

Button1: TButton;

MediaPlayer1: TMediaPlayer;

Panel1: TPanel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

FileName:string;

x1, y1, x2, y2: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

MediaPlayer1.FileName:= OpenDialog1.FileName;

MediaPlayer1.Open;

MediaPlayer1.DisplayRect:= Rect(0, 0, 433, 257);

end;

end;

end.

Термометр(конвертор):

Рис.4.18. Термометр(конвертор).

Исходный код:

unit Unit1;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

PaintBox1: TPaintBox;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Edit2Enter(Sender: TObject);

procedure Edit1Enter(Sender: TObject);

procedure PaintBox1Paint(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

a,b:real;

x,y: integer; // координаты левого верхнего угла прямоугольника

w,h: integer; // ширина и высота прямоугольника

bs: TBrushStyle;// стиль заполнения области

k: integer; // номер стиля заполнения

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

b:=StrToFloat(Edit2.Text);

if b>212 then

begin

a:=(212-32)/1.8;

Edit1.Text:=FloatToStr(a);

Edit2.Text:=FloatToStr(212);

end else

if b<32 then

begin

a:=0;

Edit1.Text:=FloatToStr(a);

Edit2.Text:=FloatToStr(32);

end else

begin

a:=(b-32)/1.8;

Edit1.Text:=FloatToStr(a);

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

a:=StrToFloat(Edit1.Text);

if a>100 then

begin

b:=100*1.8+32;

Edit2.Text:=FloatToStr(b);

Edit1.Text:=FloatToStr(100);

end else

if a<0 then

begin

b:=32;

Edit2.Text:=FloatToStr(b);

Edit1.Text:=FloatToStr(0);

end else

begin

a:=StrToFloat(Edit1.Text);

b:=a*1.8+32;

Edit2.Text:=FloatToStr(b);

end;

end;

procedure TForm1.Edit1Enter(Sender: TObject);

begin

Button1.Visible:=False;

Button2.Visible:=True;

end;

procedure TForm1.Edit2Enter(Sender: TObject);

begin

Button2.Visible:=False;

Button1.Visible:=True;

end;

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

w:=81;h:=321; // размер области(прямоугольника)

y:=8;x:=232;

Canvas.Brush.Color:= clWhite; // цвет закраски - зеленый

Canvas.Brush.Style:= bs; // стиль закраски

Canvas.Rectangle(x,y,x+w,y+h);

Canvas.TextOut(245, 280,'C');

Canvas.TextOut(295,280,'F');

w:=17;h:=310; // размер области(прямоугольника)

y:=15;x:=264;

Canvas.Brush.Color:= clRed; // цвет закраски - белый

Canvas.Brush.Style:= bs; // стиль закраски

Canvas.Rectangle(x,y,x+w,y+h);

end;

end.


5. Индивидуальное задание. Арифметические операции, функции, выражения. Арифметический оператор присваивания

К арифметическим типам данных относятся группы вещественных и целых типов. К ним применимы арифметические операции и операции отношений.

Операции над данными бывают унарными (применимые к одному операнду) и бинарными (применимые к двум операндам). Унарная арифметическая операция одна. Это операция изменения знака. Ее формат:

Бинарные арифметические операции стандартного Паскаля описаны в табл. 3.3. В ней I обозначает целые типы, R — вещественные типы.

Таблица 3.3

К арифметическим величинам могут быть применены стандартные функции Паскаля. Структура обращения к функции представлена на рис. 16.

Функция выступает как операнд в выражении. Например, в следующем операторе присваивания

операндами являются три функции: sin, ln, cos. Их запись такая же, как в математике. Аргументы называются фактическими параметрами и являются в общем случае выражениями арифметического типа. Аргументы записываются в круглых скобках. Результат вычисления функции — величина соответствующего типа.

Табл. 3.4 содержит описания математических стандартных функций Турбо Паскаля.

Таблица 3.4

Арифметическое выражение задает порядок выполнения действий над числовыми величинами. Арифметические выражения содержат арифметические операции, функции, операнды, круглые скобки. Одна константа или одна переменная — простейшая форма арифметического выражения.

Например, запишем по правилам Паскаля следующее математическое выражение:

На Паскале это выглядит так:

Для того чтобы правильно записывать арифметические выражения, нужно соблюдать следующие правила:

1. Все символы пишутся в строчку на одном уровне. Проставляются все знаки операций (нельзя пропускать знак умножения).

2. Не допускаются два следующих подряд знака операций (нельзя A+-B; можно А+(-B)).

3. Операции с более высоким приоритетом выполняются раньше операций с меньшим приоритетом. Порядок убывания приоритетов:

• вычисление функции;

• унарная операция смены знака (-);

• *, /, div, mod;

• +, -.

4. Несколько записанных подряд операций одинакового приоритета выполняются последовательно слева направо.

5. Часть выражения, заключенная в скобки, вычисляется в первую очередь. (Например, (A+B) * (C—D) — умножение производится после сложения и вычитания.)

Не следует записывать выражений, не имеющих математического смысла. Например, деление на нуль, логарифм отрицательного числа и т. п.

Пример. Цифрами сверху указан порядок выполнения операций:

Данное арифметическое выражение соответствует следующей математической формуле:

В Паскале нет операции или стандартной функции возведения числа в произвольную степень. Для вычисления xy рекомендуется поступать следующим образом:

• если у — целое значение, то степень вычисляется через умножение; например, х3 → х ∙ х ∙ х; большие степени следует вычислять умножением в цикле;

• если у — вещественное значение, то используется следующая математическая формула: хy = eyln(x).

На Паскале это будет выглядеть так:

Очевидно, что при вещественном у не допускается нулевое или отрицательное значение х. Для целого у такого ограничения нет.

Например,

На Паскале это будет так:

Выражение имеет целый тип, если в результате его вычисления получается величина целого типа. Выражение имеет вещественный тип, если результатом его вычисления является вещественная величина.

Арифметический оператор присваивания имеет структуру, представленную на рис. 17.

Например:

Порядок выполнения оператора присваивания нами уже рассматривался. Следует обратить особое внимание на следующее правило: типы переменной и выражения должны быть одинаковыми. Исключение составляет случай, когда выражение имеет целый тип, а переменная — вещественный.

Можно ли того же самого результата достичь более простым способом?

Ввод с клавиатуры и вывод на экран

Ввод данных — это передача информации от внешних устройств в оперативную память. Вводятся, как правило, исходные данные решаемой задачи. Вывод — обратный процесс, когда данные передаются из оперативной памяти на внешние носители (принтер, дисплей, магнитные устройства и т.д.). Результаты решения всякой задачи должны быть выведены на один из этих носителей.

Основными устройствами ввода-вывода у персонального компьютера являются клавиатура и дисплей (экран монитора). Именно через эти устройства главным образом осуществляется диалог между человеком и ПК.

Процедура ввода с клавиатуры имеет следующий формат:

Read(<cписок ввода>)

где <список ввода> — это последовательность имен переменных, разделенных запятыми. Слово read переводится как читать. (Точнее говоря, Read — это оператор обращения к стандартной процедуре ввода.)

Например,

При выполнении этого оператора происходит прерывание работы компьютера, после чего пользователь должен набрать на клавиатуре значения переменных а, b, с, d, отделяя их друг от друга пробелами. При этом вводимые значения высвечиваются на экране. В конце нажимают клавишу Enter. Значения должны вводиться в строгом соответствии с синтаксисом Паскаля.

Пример:

Набираем на клавиатуре:

Если в программе имеется несколько операторов Read, то данные для них вводятся потоком, т. е. после считывания значений переменных для одного оператора Read данные для следующего оператора читаются из той же строки на экране, что и для предыдущего до окончания строки, затем происходит переход на следующую строку.

Пример:

Набираем на клавиатуре:

Другой вариант оператора ввода с клавиатуры имеет вид:

Здесь слово ReadLn означает read line — читать строку. Этот оператор отличается от Read только тем, что после считывания последнего в списке значения для одного оператора ReadLn данные для следующего оператора будут считываться с начала новой строки. Если в предыдущем примере заменить операторы Read на ReadLn:

то ввод значений будет происходить из двух строк:

Оператор вывода на экран (обращение к стандартной процедуре вывода) имеет следующий формат:

Здесь элементами списка вывода могут быть выражения различных типов (в частности, константы и переменные).

Пример:

При выводе на экран нескольких чисел в строку они не отделяются друг от друга пробелами

Программист сам должен позаботиться о таком разделении. Пусть, например, I = 1; J = 2, К = 3. Тогда, написав в программе

получим на экране строку: 1 2 3. После вывода последнего символа курсор остается в той же строке. Следующий вывод на экран будет начинаться с этой позиции курсора.

Второй вариант процедуры вывода на экран:

Слово WriteLn — write line — означает писать строку. Его действие отличается от оператора Write тем, что после вывода последнего в списке значения происходит перевод курсора к началу следующей строки. Оператор WriteLn, записанный без параметров, вызывает перевод строки.

Форматы вывода. В списке вывода могут присутствовать указатели форматов вывода (форматы). Формат определяет представление выводимого значения на экране. Он отделяется от соответствующего ему элемента двоеточием. Если указатель формата отсутствует, то машина выводит значение по определенному правилу, предусмотренному по умолчанию.

Ниже кратко, в справочной форме, приводятся правила и примеры бесформатного и форматированного вывода величин различных типов. Для представления списка вывода здесь будут использованы следующие обозначения:

I, Р, Q — целочисленные выражения;

R — выражение вещественного типа;

В — выражение булевского типа;

Ch — символьная величина;

S — строковое выражение;

# — цифра;

* — знак «+» или «—»;

_ — пробел.

Форматы процедуры Write

I — выводится десятичное представление величины I, начиная с позиции расположения курсора:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: