Okay, das ist soweit klar.
Aber ich muß ja noch irgendwo einen "Auslöser" definieren, der das OnItemChange-Ereignis auslöst.
Ich will ja keine geerbten Ereignisse, sondern ein neues definieren, z.B. OnSelectChange.
Ich habe das jetzt so gelöst (nicht Themarelevante Codeabschnitte habe ich mal rausgeschnitten):
Delphi-Quellcode:
Type
TOnSelectChange=procedure(Sender: TObject; ItemIndex: Integer) of object;
Type
TEntry=class(TCollectionItem)
private
FSelected: Boolean;
FOnSelectChange: TOnSelectChange;
procedure SetSelected(const Value: Boolean);
public
constructor Create(Collection: TCollection; EntryTypes: TEntryTypes);
destructor Destroy;
published
property Selected: Boolean read FSelected write SetSelected;
property OnSelectChange: TOnSelectChange read FOnSelectChange write FOnSelectChange;
end;
...
implementation
{ TEntries }
procedure TEntry.SetSelected(const Value: Boolean);
var
OldValue: Boolean;
begin
if not Assigned(FOnSelectChange) then Exit;
OldValue:=FSelected;
FSelected := Value;
if (FSelected<>OldValue) then
OnSelectChange(self, self.Index);
end;
Macht man das so?
Jetzt habe ich noch ein Problem damit. Die oben definiert Klasse TEntry bzw. deren Collection ist ja Bestandteil meiner Komponente. In der "Main"-
Unit dieser Komponente wird diese Collection ja erzeugt, und es können über den
OI Entries hinzugefügt werden. Jedes´m Item soll dem OnSelectChange-Ereignis eine entsprechende Procedure in der Main-
Unit hinzugefügt werden. Grund ist der, dass ich z.B. in der Main erkenne, wann sich ein SelectState ändert, und ein Repaint ausgelöst werden muß.
Jetzt muß ich aber nach dem Create der Komponente jedem bereits vorhandenen Items auch diese Procedure aus der Main-
Unit dem OnSelectChange-Ereignis zuweisen. Wo mache ich das? Wann werden die Items, die im IO definiert wurden tatsächlich zur Runtime erzeugt?