Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизДобавить компонент в класс. Получилось. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c