Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.03.07;
Скачать: CL | DM;

Вниз

Добавить компонент в класс. Получилось.   Найти похожие ветки 

 
oleg1963 ©   (2009-12-29 11:05) [0]

Здравствуйте уважаемые Мастера. Несколько дней назад я допрашивал Вас на предмет создания своего класса из нескольких компонентов.

Сбылась очередная мечта идиота и вот что у меня получилось:

unit Bevel;

interface

uses
 SysUtils, Classes, Controls, ExtCtrls, StdCtrls;

type
 TBevel1 = class(TBevel)
 public
    ElemBevel : TBevel;
    ChBox     : TCheckBox;
    constructor Create(AOwner:TComponent);override;
    destructor Destroy;override;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Samples", [TBevel1]);
end;

{ TBevel1 }

constructor TBevel1.Create(AOwner: TComponent);
begin
   inherited;
   ElemBevel:=TBevel.Create(AOwner);
   ChBox:=TCheckBox.Create(AOwner);
end;

destructor TBevel1.Destroy;
begin
    ChBox.Free;
    ElemBevel.Free;
    inherited;
end;

end.

//-------------------------------------------------
var
 Form1: TForm1;
 Bevel : array [1..6] of TBevel1;

procedure TForm1.FormCreate(Sender: TObject);
var
 BLeft,BTop : word;  {BevelLeft и BevelTop}
 i : byte;

begin
    BLeft:=150;
    BTop:=35;
    for i:=1 to 6 do
      begin
        Bevel[i]:=TBevel1.Create(Owner);
        with Bevel[i] do
          begin
            Parent:=(Panel5);
            Left:=BLeft;
            Top:=BTop;
            Width:=300;
            Height:=20;
            Visible:=True;
            Shape:=bsFrame;
            Style:=bsRaised;
            with ChBox do
              begin
                Parent:=(Panel5);
                Left:=BLeft+Bevel[i].Width+10;
                Top:=BTop;
                Width:=97;
                ChBox.Height:=17;
                Bevel[i].ChBox.Visible:=True;
              end;
          end;
          BTop:=BTop+30;
      end;
end;


В результате я имею прямой доступ к любому свойству любого элемента класса  (во нагородил-то). Понятно, что контейнер на TBevel не дело, а какой выгоднее применить не знаю.  Хотелось бы услышать Ваши комментарии


 
brother ©   (2009-12-29 11:28) [1]

если ты про:
> Bevel : array [1..6] of TBevel1;

и тебя это устраивает - оставь так...


 
Ega23 ©   (2009-12-29 11:32) [2]

Если твой
TBevel1 = class(TBevel)
будет как-то развиваться, то я бы всё-таки не стал поля ElemBevel и ChBox в public выносить, а скрыл бы в привате. Ну и, соответственно, 2 свойства в public и Getter и Setter к ним.


 
Ганя   (2009-12-29 19:25) [3]

В качестве контейнера лучше использовать потомка от TWinControl
Вложенные экземпляры лучше прятать в private
Глобальные переменные - в данном случае - зло
нечто типа:

TMyContainer= class(TWinControl)
private
 FBevels: array[1..6] of TBevel;
 FCheckBoxes: array[1..6] of TCheckBox;
public
  constructor Create(AOwner: TComponent); override; {Внутри создаем элементы массива с параметром Owner = Self, при таком подходе разрушать в деструкторе элементы массива необязательно, они разрушатся вместе с овнером}
Это если компонент - который предполагается использовать многократно, в разных приложениях. Если многократного использования не предполагается, то городить компонент тут ни к чему, целесообразнее использовать фрейм



Страницы: 1 вся ветка

Текущий архив: 2010.03.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1262463589
AntonioBanderas
2010-01-02 23:19
2010.03.07
Принадлежность точки отрезку


15-1261282914
Nic
2009-12-20 07:21
2010.03.07
Дети, не ходите работать программистами


1-1239268291
sniknik
2009-04-09 13:11
2010.03.07
Ошибка преобразования RTF в PlainText через TRichEdit


10-1164879867
salexn
2006-11-30 12:44
2010.03.07
Регистрация сервера


15-1261258220
Юрий
2009-12-20 00:30
2010.03.07
С днем рождения ! 20 декабря 2009 воскресенье