Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Vis.-Komponente verschwindet beim Ändern einer Objekteigens. (https://www.delphipraxis.net/147205-vis-komponente-verschwindet-beim-aendern-einer-objekteigens.html)

Ralf Meyer 3. Feb 2010 17:39


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.

Ralf Meyer 4. Feb 2010 12:34

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