AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Vis.-Komponente verschwindet beim Ändern einer Objekteigens.
Thema durchsuchen
Ansicht
Themen-Optionen

Vis.-Komponente verschwindet beim Ändern einer Objekteigens.

Ein Thema von Ralf Meyer · begonnen am 3. Feb 2010 · letzter Beitrag vom 4. Feb 2010
Antwort Antwort
Ralf Meyer

Registriert seit: 24. Mär 2008
36 Beiträge
 
#1

Vis.-Komponente verschwindet beim Ändern einer Objekteigens.

  Alt 3. Feb 2010, 18:39
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.
  Mit Zitat antworten Zitat
Ralf Meyer

Registriert seit: 24. Mär 2008
36 Beiträge
 
#2

Re: Vis.-Komponente verschwindet beim Ändern einer Objekteig

  Alt 4. Feb 2010, 13:34
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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