Вы часто используете в своих программах одни и те же куски кода для обработки стандартных компонент? Если да, то вам стоит прочитать эту статью. Здесь мы рассмотрим основы создания компоненты, и в качестве примера создадим одну простую компоненту.
Для начала нужно определиться, какую компоненту будем создавть. Для примера сделаем компоненту на базе стандартной компоненты дельфи TEdit. Эта компонента будет представлять собой поле ввода, в которое можно будет ввести только число с возможностью ввода одного знака "минус" в начале числа. Пусть компонента будет называться TNEdit. Создайте отдельную папку для компоненты.
Для начала создания новой компоненты запустите дельфи и выбирите из меню Component команду New Component. В появившемся окне в поле Ancestor Type впишите TEdit [StdCtrls] (или можно выбрать из ниспадающего списка). В поле Class Name нужно вписать имя класса компоненты - TNEdit. Из списка Palette Page выберите существущюю вкладку палитры компонент, либо введите свое название вкладки (она будет создана), где будет размещаться наша компонента. В поле Unit file name введите путь до папки, где будут размещаться модуль компоненты. Все. Жмите Ok (не Install!!!) и к текущему проекту добавится сгенерированная дельфи заготовка модуля компоненты.
Редактируем шаблон
Тут я просто приведу текст шаблона, к какому виду его нужно привести. А в конце кода опишу все изменения.
unit NEdit1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
TNEdit1 = class(TEdit)
private
EditNumber : single;
function getNum : single;
procedure setNum(val : single);
protected
procedure KeyPress(var Key : Char); override;
public
{ Public declarations }
published
Constructor Create(AOwner : TComponent); override;
property Num : single
read getNum
write setNum;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TNEdit1]);
end;
constructor TNEdit1.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
end;
function TNEdit1.getNum : Single;
begin
try
Result := StrToFloat(text);
except begin
Result := 0;
text := '';
end;
end;
end;
procedure TNEdit1.setNum(val: Single);
begin
EditNumber:=val;
text:=FloatToStr(val);
end;
procedure TNEdit1.KeyPress(var key:char);
begin
case key of
'0'..'9', #13, #8: ;
'-' : if Length(text)<>0 then key := #0;
else
if not ((key=DecimalSeparator)and(pos(DecimalSeparator,text)=0)) then Key:=#0;
end;
inherited KeyPress(key);
end;
end.
Компонента реагирует на нажатие пользователем клавиши в поле ввода процедурой TNEdit.KeyPress. Eю мы заменили соответствующюю процедуру базового класса. В качестве параметра процедуре передается нажатая клавиша (вернее её код). Перед выводом в рабочую область числа мы проверяем это число. Если оно не содержит цифру, код клавиш Enter и Backspace, или вводится минус в середине числа, либо вводится второй разделитель(.), то соответствующему коду клавиши присваевается #0 и символ не выводится в рабочюю область. Для проверки работоспособности компоненты мы её протестируем.
Тестируем компоненту
Положите на форму кнопку (Button1) и метку (Label1). В Uses добавьте имя нашего модуля TNEdit. В раздел обьявления приложения добавьте инструкцию обьявления компоненты. А в событии OnCreate формы добавьте процедуру создания компоненты. Вот что должно у вас получиться:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, NEdit1;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
NEdit_ : TNEdit1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
NEdit_ := TNEdit1.Create(self);
NEdit_.Parent :=self;
NEdit_.Top := 16;
NEdit_.Left := 24;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := FloatToStr(NEdit_.Num);
end;
end.
Наша компонента динамически создается в процедуре создания формы, т.е. в момент создания формы. Скомпилируйте программу, запустите и убедитесь, что все работает как надо. Если возникли ошибки при компиляции либо какие то вопросы, то милости просим на наш форум.
Устанавливаем компоненту на палитру компонент.
У всех компонент на палитре есть свои значки. А мы то чем хуже? Давайте нарисуем иконку для нашей компоненты. В меню Tools выбирайте команду Image Editor (если вы его установили в момент установки дельфи). В появившемся окне выбираем File->New->Component Resource File. Создастся пустой файл ресурсов для компонент. Правой кнопкой щелкаем на Contents и выбираем New->Bitmap. Устанавливаем размер 24x24 и 16 цветов. Что бы переим
Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.