Vis.-Komponente verschwindet beim Ändern einer Objekteigens.
Hi,
ich erstelle mir eine simple Komponente an das ich über . Property Container mein Datenobjekt und über . Property Feldname das Feld des Objekts anbinden kann. Ich platziere die Komponente auf einem Formular. Ich weise der Eigenschaft "Container" mein Objekt zu => wunderbar. Ich leere die Eigenschaft "Container" wieder und das Eingabefeld verschwindet vom Bildschirm. Das Auswählen des Eingabefelds aus der Auswahlliste des Objekt-Inspektors wird mit einer Schutzverletzung quittiert. Wo ist mein Problem?
Delphi-Quellcode:
unit uSftTestEdit ;
interface uses SysUtils, Classes, Controls, , uSftInterface , uSftDataContainer , uCustomOBJ , Variants , StdCtrls ; type TSftTestEdit = class(TEdit, ISftEditInterface ) private { Private-Deklarationen } fFieldName: String; fContainer: tSftDataContainer; procedure SetContainer(const Value: tSftDataContainer); public { Public-Deklarationen } protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; published { Published-Deklarationen } Property FieldName : String Read fFieldName Write fFieldName ; Property Container : tSftDataContainer Read fContainer Write SetContainer ; end; procedure Register; implementation procedure Register; begin RegisterComponents('UserEdit', [TSftTestEdit]); end; { TSftTestEdit } procedure TSftTestEdit.Notification(AComponent: TComponent; Operation: TOperation); begin inherited; if (AComponent = fContainer) and (Operation = opRemove) then fContainer := nil; end; procedure TSftTestEdit.SetContainer(const Value: tSftDataContainer); begin if Assigned(fContainer) then begin fContainer.UnRegister(Self); fContainer.RemoveFreeNotification(Self); end; fContainer := Value; if Assigned(fContainer) then begin fContainer.FreeNotification(Self); fContainer.Register(Self); end; end; end. |
Re: Vis.-Komponente verschwindet beim Ändern einer Objekteig
So ... problem behoben.
Das Objekt fContainer hat intern in der .Register und .Unregister Methode auf eine Liste zugegriffen die vom Typ TComponentlist war. Nachdem ich den Typ auf tInterfaceList geändert habe funktioniert alles tadelos. Gruß Ralf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz