Вторник
17.10.2017
07:03


Форма входа

Приветствую Вас Гость | RSS
Borland Delphi 7
Главная Регистрация Вход
Главная » 2009 » Февраль » 23 » Модуль компонента NkEdit
Модуль компонента NkEdit
18:49
unit NkEdit; 

interface

uses

Windows, Messages, SysUtils,

Classes, Graphics, Controls, 

Forms, Dialogs, StdCtrls; 

type

TNkEdit = class(TEdit) 

private

FNumb: single; // число, находящееся в поле редактирования

// Это описание функции доступа

// и процедуры установки поля FNumb

function GetNumb: single;

procedure SetNumb(value:single); 

protected

procedure KeyPress(var Key: Char); 

override; 

public

published

constructor Create(AOwner:TComponent);

override; property Numb : single 

// свойство компонента 

read GetNumb write SetNumb;

end;

procedure Register; 

implementation

// процедура регистрации компонента

procedure Register;

begin

RegisterComponents('Samples',[TNkEdit]);

end;

// конструктор компонента

constructor TNkEdit.Create(AOwner:TComponent);

begin

// don't forget to call the ancestors' constructor

inherited Create(AOwner); 

end;

// функция доступа к полю FNumb 

function TNkEdit.GetNumb:single;

begin

try // поле Text может быть пустым Result:=StrToFloat(text); except

on EConvertError do begin

Result:=0; text: =' ' ;

end; 

end; 

end;

// процедура записи в поле FNumb

procedure TNkEdit.SetNumb(Value:single);

begin

FNumb:=Value;

Text:=FloatToStr(value); 

end;

// процедура обработки события KeyPress

procedure TNkEdit.KeyPress(var key:char) ; 

begin

case key of

'0'.. '9', #8, #13: ;

'-': if Length(text)<>0 then key:=#0;

else

if not ((key = DecimalSeparator) and

(Pos(DecimalSeparator,text)=0)) 

then key:= #0;

end;

inherited KeyPress(key); 

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

// OnKeyPress родительского класса

end; 

end.

В описание класса TNkEdit добавлено объявление свойства Numb, которое представляет собой число, находящееся в поле редактирования. Для хранения Значения свойства Numb используется поле FNumb. Функция GetNumb необходима для доступа к полю FNumb, а процедура setNumb — для установки значения свойства.

Конструктор класса TNkEdit сначала вызывает конструктор родительского класса (TEdit), присваивает значение свойству Text, затем устанавливает значение свойства Numb.

Реакция компонента NkEdit на нажатие клавиши клавиатуры определяется процедурой обработки события TNkEdit.KeyPress, которая замещает соответствующую процедуру базового класса. В качестве параметра процедура TNkEdit.KeyPress получает код нажатой клавиши. Перед вызовом процедуры обработки события OnKeyPress родительского класса код нажатой клавиши проверяется на допустимость. Если нажата недопустимая для компонента NkEdit клавиша, то код символа заменяется на ноль. Допустимыми для компонента NkEdit являются цифровые клавиши, разделитель целой и дробной частей числа (в зависимости от настройки Windows: точка или запятая), "минус", <Backspase> (позволяет удалить ошибочно введенный символ) и <Enter>.

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

DecimalSeparator, которая содержит символ-разделитель, используемый в Windows в данный момент.

После ввода текста модуля компонента модуль нужно откомпилировать и сохранить.

Категория: Статьи участников клуба | Просмотров: 898 | Добавил: delphi | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Меню сайта

Разделы новостей
Программные обеспечения [6]
Учебники и справочники Delphi [15]
Лабораторные работы [2]
Статьи участников клуба [36]
Советы и трюки [1]

Календарь новостей
«  Февраль 2009  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
232425262728

Поиск

Друзья сайта

Мини-чат

Наш опрос
Оцените мой сайт
Всего ответов: 71

Статистика

Copyright MyCorp © 2017