unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
//Forward-Deklaration der Containerklasse
TMyContainer =
class;
//Ableitung von der Standard-Checkbox mit zusätzlicher Property
TCheckBox =
class(StdCtrls.TCheckBox)
private
FContainer: TMyContainer;
public
property Container: TMyContainer
read FContainer
write FContainer;
end;
//Ableitung vom Standard-Edit mit zusätzlicher Property
TEdit =
class(StdCtrls.TEdit)
private
FContainer: TMyContainer;
public
property Container: TMyContainer
read FContainer
write FContainer;
end;
//eigene Container-Klasse mit einer Checkbox, einem Edit sowie Demo-Zusatzdaten
TMyContainer =
class
private
FCheckbox: TCheckbox;
FEdit: TEdit;
FIntFeld: integer;
procedure CheckBoxClick(Sender: TObject);
public
constructor Create(aCheckbox: TCheckbox;aEdit: TEdit);
property Checkbox: TCheckBox
read FCheckBox;
property Edit: TEdit
read FEdit;
property IntFeld: integer
read FIntFeld
write FIntFeld;
end;
TForm1 =
class(TForm)
CheckBox1: TCheckBox;
Edit1: TEdit;
CheckBox2: TCheckBox;
Edit2: TEdit;
CheckBox3: TCheckBox;
Edit3: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private-Deklarationen }
FArray:
array of TMyContainer;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyContainer }
constructor TMyContainer.Create(aCheckbox: TCheckbox; aEdit: TEdit);
begin
inherited Create;
//Referenzen wechselseitig zuweisen
FCheckBox := aCheckBox;
FEdit := aEdit;
if Assigned(FCheckBox)
then
begin
FCheckBox.Container := self;
FCheckBox.OnClick := CheckBoxClick;
end;
if Assigned(FEdit)
then
FEdit.Container := self;
end;
procedure TMyContainer.CheckBoxClick(Sender: TObject);
const Choices:
array[Boolean]
of String = ('
ist nicht gechecked','
ist gechecked');
var Edit: TEdit;
begin
//zur Demonstration aus der Checkbox auf das zugehörige Edit zugreifen
if Sender
is TCheckBox
then
if Assigned(TCheckBox(Sender).Container)
then
begin
Edit := TCheckBox(Sender).Container.Edit;
if Assigned(Edit)
then
Edit.Text := Format('
%s (%d) %s.',[TCheckBox(Sender).
Name,
TCheckBox(Sender).Container.IntFeld,
Choices[TCheckBox(Sender).Checked]]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
SetLength(FArray,3);
FArray[0] := TMyContainer.Create(CheckBox1, Edit1);
FArray[0].IntFeld := Random(100);
FArray[1] := TMyContainer.Create(CheckBox2, Edit2);
FArray[1].IntFeld := Random(100);
FArray[2] := TMyContainer.Create(CheckBox3, Edit3);
FArray[2].IntFeld := Random(100);
end;
procedure TForm1.FormDestroy(Sender: TObject);
var i: integer;
begin
for i := High(FArray)
downto Low(FArray)
do
FArray[i].Free;
//hatte ich vergessen
SetLength(FArray,0);
end;
end.