Листинг 5.3. Процедура обработки события OnKeyPress




procedure TForm1.StringGrid1KeyPress(Sender:TObject;

var Key:Char);

Begin

case Key of

#8,'0'..'9':; // цифры и клавиша <Backspace>

#13: // клавиша <Enter>

if StringGrid1.Col < StringGrid1.ColCount — 1

then StringGrid1.Col:= StringGrid1.Col + 1;

else key:= Chr(0); // остальные символы запрещены

end;

end;

Листинг 5.4. Ввод и обработка массива дробных чисел

unit getar_1;

Interface

Uses

Windows, Messages, SysUtils, Variants, Classes,

Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;

Type

TForm1= class(TForm)

Label1: TLabel;

StringGrid1: TStringGrid;

Button1: TButton;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

procedure StringGrid1KeyPress(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: array [1..5] of real; // массив

suram: real; // сумма элементов

sr: real; // среднее арифметическое

i: integer; // индекс

Begin

// ввод массива

// считаем, что если ячейка пустая, то соответствующий

// ей элемент массива равен нулю

for i:= 1 to 5 do

if Length(StringGrid1.Cells[i-1,0])<>0

then a[i]:= StrToFloat(StringGrid1.Cells[i-1, 0])

else a[i]:= 0;

summ:= 0; // обработка массива

for i:=1 to 5 do

summ:= summ + a[i]; sr:= summ/5;

// вывод результата

Label2.Caption:='Сумма элементов: ' + FloatToStr(summ)

+ #13+ 'Среднее арифметическое: ' + FloatToStr(sr);

end;

// Функция обеспечивает ввод в ячейку только допустимых символов

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

Begin

case Key of

#8,'0'..'9':; // цифры и <Backspace>

#13: // клавиша <Enter>

if StringGrid1.Col < StringGrid1.ColCount - 1

then StringGrid1.Col:= StringGrid1.Col + 1;

'.',',': // разделитель целой и дробной частей числа

Begin

if Key <> DecimalSeparator then

Key:= DecimalSeparator; // заменим разделитель

// на допустимый

if Pos(StringGrid1.Cells[StringGrid1.Col,0],

DecimalSeparator) <> 0

then Key:= Chr(O); // запрет ввода второго разделителя

end;

' -': // минус можно ввести только первым символом,

// т. е. когда ячейка пустая

if Length(StringGrid1.Cells[StringGrid1.Col, 0]) <>0

then Key := Chr(0)

else key:= Chr(0);// остальные символы запрещены

end;

End; end.

Использование компонента Memo

Рис. 5.4. Компонент Memo

Таблица 5.3. Свойства компонента Memo

       
  Свойство Определяет  
  Name Имя компонента. Используется в программе для доступа к свойствам компонента  
  Text Текст, находящийся в поле Memo. Рассматривается как единое целое  
  Lines Текст, находящийся в поле Memo. Рассматривается как совокупность строк. Доступ к строке осуществляется по номеру  
  Lines.Count Количество строк текста в поле Memo  
  Left Расстояние от левой границы поля до левой границы формы  
  Top Расстояние от верхней границы поля до верхней границы формы  
  Height Высоту поля  
  Width Ширину поля  
  Font Шрифт, используемый для отображения вводимого текста  
  ParentFont Признак наследования свойств шрифта родительской формы  
       

 

 

for i:=l to SIZE do

a [ i ]:= Memo1.Lines[i];

где:

  • SIZE — именованная константа, определяющая размер массива;
  • а — массив;
  • Memo1 — имя Memo-компонента;
  • Lines — свойство компонента Memo, представляющее собой массив, каждый элемент которого содержит одну строку находящегося в поле Memo текста.

Рис. 5.5. Диалоговое окно приложения Ввод массива

Листинг 5.5. Ввод массива строк из компонента Memo

unit fr_memo_;

Interface

Uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, Menus, StdCtrls;

Type

TForm1 = class(TForm)

Memo1: TMemo;

Button1: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

private { Private declarations }

public { Public declarations }

end;

Var

Form1: TForm1;

Implementation

($R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

Const

SIZE=5; // размер массива

Var

a:array[l..SIZE]of string[30]; //массив

n: integer; // количество строк, введенных в поле Memo

i:integer; // индекс элемента массива

st :string;

Begin

n:=Memo1.Lines.Count;{кол-во строк текста в поле Memo}

if n = 0 then begin

ShowMessage ('Исходные данные не введены!');

Exit; // выход из процедуры обработки события

end;

// в поле Memo есть текст

if n > SIZE then begin

ShowMessage ('Количество строк превышает размер массива.');

n:=SIZE; // будем вводить только первые SIZE строк

end;

for i:=1 to n do

a[i]:=Form1.Memo1.Lines[i-1]; // строки Memo пронумерованы с нуля

// вывод массива в окно сообщения

if n > 0 then begin

st:='Введенный массив:'+#13;

for i: =1 to n do

st:=st+IntToStr(i)+' '+ a[i]+#13;

ShowMessage(st);

end;

end;

End.

 

Рис. 5.6. Окно приложения Ввод массива

Рис. 5.7. Массив, введенный из Memo-поля



Поделиться:




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

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


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