Расширение существующего компонента

Автор: Пользователь скрыл имя, 11 Октября 2011 в 14:17, лабораторная работа

Описание работы

Цель:


Изучение способа расширения существующего компонента.


Задания:


Расширить модуль, созданный ранее (лаб. работа 1, зад. 1), добавив две кнопки “ОК” и “Cancel”. Примечание: Конструктор для свойства “ОК” устанавливает его в значение Default – не путайте с одноименной директивой – в True и ModalResult в MrOk. Конструктор для свойства “Cancel” устанавливает его в значение True и ModalResult в MrCancel.
Расширить модуль, созданный ранее (лаб. работа 1, зад. 2), добавив маску для ввода значений только определенного формата.
Расширить модуль, созданный ранее (лаб. работа 1, зад. 3), добавив свойство, позволяющее отражать цифрой положение указателя (включать и отключать цифру).

Работа содержит 1 файл

Министерство образования и науки РФ.doc

— 956.50 Кб (Скачать)

Министерство  образования и науки РФ

ГОУ ВПО  Череповецкий государственный университет

Институт  информационных технологий 
 
 
 

                Кафедра: ПО ВТ и ИС

                Дисциплина: Компонентное программирование

                
               
               
               
               
               
               

Лабораторная  работа №2

РАСШИРЕНИЕ  СУЩЕСТВУЮЩЕГО КОМПОНЕНТА

 
 
 
 
 
 
 

                        Выполнил: студент 

                    группы 1ПО-51

                    Фарутин Е.В.

                    Проверил: преподаватель 

                    Сивков Н.Е. 
                   
                   
                   
                   
                   
                   
                   

Череповец, 2011 год.

Цель:  

  Изучение способа расширения существующего компонента. 

Задания: 

  1. Расширить модуль, созданный ранее (лаб. работа 1, зад. 1), добавив две кнопки “ОК” и  “Cancel”. Примечание: Конструктор для свойства “ОК”  устанавливает его в значение  Default  – не путайте с одноименной директивой – в True и ModalResult в MrOk. Конструктор для свойства  “Cancel” устанавливает его в значение True и ModalResult в MrCancel.
  2. Расширить модуль, созданный ранее (лаб. работа 1, зад. 2), добавив маску для ввода значений только определенного формата.
  3. Расширить модуль, созданный ранее (лаб. работа 1, зад. 3), добавив свойство, позволяющее отражать цифрой положение указателя (включать и отключать цифру).
 

Код: 

unit All_2; 

interface 

uses

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

  Dialogs, StdCtrls, ExtCtrls; 

type

  TKind=(Ok, Cancel);

  TButton2 = class(TButton)

  private 

  protected

    KindV: TKind;

    function GetKindV: TKind;

    procedure SetKindV(Value: TKind);

  public

    Constructor Create(AOwner:TComponent );override;

  published

    property Kind: TKind read GetKindV write SetKindV default Ok;

  end; 

  type

    TEdit2 = class(TEdit)

  private

  protected

  public

    Constructor Create(AOwner:TComponent );override;

    procedure KeyPress(var Key:char); override;

  published

  end; 

  type

  TScrollBar2 = class(TScrollBar)

  private 

  protected

  public

   label_n: tlabel;

    procedure Change; override;

    Constructor Create(AOwner:TComponent );override;

  published

  end; 

    type

  TCustomPanel2 = class(TCustomPanel)

  private

  protected

  public

        label_n: tlabel;

        scroll_n: tscrollbar;

        edit_n: tedit;

    Constructor Create(AOwner:TComponent );override;

    procedure WMSize(var Message:Tmessage); message WM_SIZE;

    procedure Change(Sender:TObject);

  published

  end; 

procedure Register; 

implementation 

  function TButton2.GetKindV: TKind;

begin

  result := KindV;

end; 

  procedure TButton2.SetKindV(Value: TKind);

begin

KindV:=Value;

  if KindV=Ok then

  begin

  Default:=True;

  ModalResult:=mrOk;

  Cancel:=False;

  Caption:='Ok';

  end

  else

  begin

  Cancel:=True;

  ModalResult:=mrCancel;

  Default:=false;

  Caption:='Cancel';

  end;

end; 

Constructor TButton2.Create(AOwner:TComponent);

Begin

inherited Create(AOwner);

Height:=40;

Width:=100;

SetKindV(Ok);

end; 

Constructor TEdit2.Create(AOwner:TComponent);

Begin

inherited Create(AOwner);

Font.Style:=[fsStrikeOut];

Font.Color:=clRed;

Font.Name:='Times New Roman';

Height:=20;

Width:=100;

Font.Size:=20;

end; 

Constructor TScrollBar2.Create(AOwner:TComponent);

Begin

inherited Create(AOwner);

Width:=100;

Height:=40;

Position:=trunc((Max-Min)/2);

label_n:=tlabel.Create(AOwner);

label_n.Parent:=parent;

label_n.name:='label_n';

label_n.Left:=Left;

label_n.Top:=Top-trunc(Height/2)-10;

label_n.Visible:=true;

label_n.caption:=inttostr(position);

end; 

procedure TScrollBar2.Change;

begin

inherited Change;

label_n.caption:=inttostr(Position);

end; 

procedure Register;

begin

  RegisterComponents('Samples', [TButton2]);

  RegisterComponents('Samples', [TEdit2]);

  RegisterComponents('Samples', [TScrollBar2]);

  RegisterComponents('Samples', [TCustomPanel2]);

end; 

Constructor TCustomPanel2.Create(AOwner:TComponent);

Begin

inherited Create(AOwner);

  scroll_n:=TScrollBar.Create(Self);

  scroll_n.Parent:=Self;

  scroll_n.Width:=100;

  scroll_n.Height:=50;

  scroll_n.Left:=0;

  scroll_n.Top:=20;

  scroll_n.Position:=trunc((scroll_n.Max-scroll_n.Min)/2);

  Height:=70;

label_n:=TLabel.Create(Self);

label_n.Parent:=Self;

label_n.Left:=scroll_n.Left;

label_n.Top:=Height-scroll_n.Height-label_n.Height;

label_n.Visible:=true;

label_n.caption:=inttostr(scroll_n.position);

scroll_n.OnChange:=Change;

caption:='';

end; 

procedure TCustomPanel2.Change(Sender:TObject);

begin

label_n.caption:=inttostr(Scroll_n.Position);

end; 

procedure TCustomPanel2.WMSize(var Message:TMessage);

begin 

  inherited;

scroll_n.Width:=Width;

  if Height<70 then

  begin

  scroll_n.Height:=(Height-20);

  scroll_n.Top:=20;

  label_n.Top:=Height-scroll_n.Height-20

  end

  else

  begin

  scroll_n.Height:=Height-20;

  scroll_n.Top:=20;

  label_n.Top:=Height-scroll_n.Height-label_n.Height;

  end;

end; 

procedure TEdit2.KeyPress(var Key: Char);

begin

inherited;

if Key in ['0'..'9'] then Key:=Key

else Key:=#0;

end;

end.

 

Пример:

 

 

Контрольные вопросы:

 

  1. Как можно добавить классы в компонент?
 

  Создание  файла модуля осуществляется выбором  элемента меню File/New Unit. Работа по созданию компонента разбивается на четыре основные задачи:

  1. Определение раздела модуля компонента – Uses.

  2. Объявление класса компонента.

  3. Реализация методов компонента.

  4. Написание процедуры Register.

 

  Добавляемые к компоненту классы переопределяют свои конструкторы и соответствующие  значения свойств.

 
 
  1. Как дополняется модуль процедурой Register?
 

  В раздел реализации помещается процедура Register, которая используется во время  установки созданного программистом  компонента на указанную вкладку  палитры компонентов Delphi для регистрации  нового класса. Например, так:

 

procedure Register;

begin

  RegisterComponents('Samples', [TButton2]);

  RegisterComponents('Samples', [TEdit2]);

  RegisterComponents('Samples', [TScrollBar2]);

  RegisterComponents('Samples', [TCustomPanel2]);

end;

 

  Указывается вкладка, на которую будет помещен  компонент и имя класса этого компонента.

 
  1. Назовите, какие модули должны содержаться в  разделе Uses?
 

  Раздел  uses должен, по меньшей мере, содержать модуль Classes и обычно включают модули Controls и Forms. Если компонент происходит от существующего визуального компонента, то модуль, где этот компонент объявлен, также включается. Другие часто используемые модули – это Messages, WinTypes, WinProcs, Graphics и SysUtils. Для задания 1 добавляется модуль StdCtrls, который содержит объявление класса TButton, поскольку новый компонент будет прямым потомком данного класса. Раздел модуля компонента Uses можно заполнять большим количеством модулей, чем требуется для компиляции, так как добавление лишних модулей не приводит к перерасходу ресурсов.

Информация о работе Расширение существующего компонента