AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse mit Properties als Property

Ein Thema von Ninow · begonnen am 25. Mär 2011 · letzter Beitrag vom 29. Mär 2011
Antwort Antwort
Seite 2 von 2     12   
Ninow

Registriert seit: 25. Mär 2011
Ort: Nürnberg
8 Beiträge
 
Delphi 2010 Professional
 
#11

AW: Klasse mit Properties als Property

  Alt 26. Mär 2011, 11:12
In der TBackgroundAlignment befindet sich nur:

Delphi-Quellcode:
type
  TBackgroundAlignment = (baStandard, baLeftToRight, baTopToBottom);
Das kann er mir ja auch anzeigen.

Also ich habe jetzt verschiedene Sachen probiert:

Das mit dem PropertyEditor bekomme ich irgendwie nicht hin, ausser das halt

Delphi-Quellcode:
  TBackGroundProperty = class(TPropertyEditor)
    //Was soll ich hier machen
  end;
@sx2008: TBackGround.Assign hab ich eingebaut, keine Veränderung.

@Uwe: Hab ich auch ausprobiert, hab

Delphi-Quellcode:
{...}
type
  TBackGround = class(TComponent)
    {...}
  end;
 
type
  TMyPanel = class(TPanel)
    private
      FBackGround: TBackGround;
      procedure SetBackGround(Value: TBackGround);
    published
      property BackGround: TBackGround read FBackGround write SetBackGround;
    public
      constructor Create(AOwner: TComponent); override;
  end;

{...}

constructor Create(AOwner: TComponent);
begin
  FBackGround.SetSubComponent(true);
  inherited;
end;
erstellt und auch installiert. Dann habe ich mein anderes Projekt aufgemacht wo ich mir das anschaue und da kommt jetzt Adressfehler. Also mach ich was falsch, aber was!?

Gruß Ninow
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: Klasse mit Properties als Property

  Alt 26. Mär 2011, 14:31
In der TBackgroundAlignment befindet sich nur:

Delphi-Quellcode:
type
  TBackgroundAlignment = (baStandard, baLeftToRight, baTopToBottom);
Das kann er mir ja auch anzeigen.

Also ich habe jetzt verschiedene Sachen probiert:

Das mit dem PropertyEditor bekomme ich irgendwie nicht hin, ausser das halt

Delphi-Quellcode:
  TBackGroundProperty = class(TPropertyEditor)
    //Was soll ich hier machen
  end;
@sx2008: TBackGround.Assign hab ich eingebaut, keine Veränderung.

@Uwe: Hab ich auch ausprobiert, hab

Delphi-Quellcode:
{...}
type
  TBackGround = class(TComponent)
    {...}
  end;
 
type
  TMyPanel = class(TPanel)
    private
      FBackGround: TBackGround;
      procedure SetBackGround(Value: TBackGround);
    published
      property BackGround: TBackGround read FBackGround write SetBackGround;
    public
      constructor Create(AOwner: TComponent); override;
  end;

{...}

constructor Create(AOwner: TComponent);
begin
  FBackGround.SetSubComponent(true);
  inherited;
end;
erstellt und auch installiert. Dann habe ich mein anderes Projekt aufgemacht wo ich mir das anschaue und da kommt jetzt Adressfehler. Also mach ich was falsch, aber was!?

Gruß Ninow
Bei Create steht der Klassenname nicht! Es müsste heißen
constructor TMyPanel.Create(..)
Eigne dir die Grundlagen an, falls du das nicht wusstest!
Weiters müsstet du im Konstruktor Speicher für das Feld FBackground allozieren...
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Ninow

Registriert seit: 25. Mär 2011
Ort: Nürnberg
8 Beiträge
 
Delphi 2010 Professional
 
#13

AW: Klasse mit Properties als Property

  Alt 26. Mär 2011, 14:51
Ah,
wär ein Fehler den der Compiler melden würd sry habs vercheckt hinzuschreiben.
Natürlich muss die Klasse da stehen. Trotz alldem funktioniert es nicht.

Ach ja, >.< hab ich mal wieder im Eifer des Gefechts vergessen...

Geändert von Ninow (26. Mär 2011 um 14:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#14

AW: Klasse mit Properties als Property

  Alt 26. Mär 2011, 15:31
@Uwe: Hab ich auch ausprobiert, hab
...
Delphi-Quellcode:
constructor Create(AOwner: TComponent);
begin
  FBackGround.SetSubComponent(true);
  inherited;
end;
erstellt und auch installiert. Dann habe ich mein anderes Projekt aufgemacht wo ich mir das anschaue und da kommt jetzt Adressfehler. Also mach ich was falsch, aber was!?
So geht's:

Delphi-Quellcode:
constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FBackGround := TBackGround.Create(Self);
  FBackGround.Name := 'Background';
  FBackGround.SetSubComponent(true);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#15

AW: Klasse mit Properties als Property

  Alt 28. Mär 2011, 03:28
Die Klasse TBackGround muss ausserdem noch registriert werden:
Delphi-Quellcode:
initialization
  RegisterClass(TBackGround);
end;
Ich glaube jetzt ham wir alle Vorrausetzungen:
* vom TPersistent ableiten
* Properties published deklarieren
* Assign-Methode überschreiben
* Klasse registrieren
Von TCompoent abzuleiten ist nicht norwendig.
Wie man sieht ist z.B. die Klasse TFont nicht von TComponent abgeleitet und man kann die Eigenschaften trotzdem im Objektinspektor editieren.
  Mit Zitat antworten Zitat
Ninow

Registriert seit: 25. Mär 2011
Ort: Nürnberg
8 Beiträge
 
Delphi 2010 Professional
 
#16

AW: Klasse mit Properties als Property

  Alt 28. Mär 2011, 17:51
Ah, dass hab ich garnicht gewusst, nja mein Projekt "eigene Komponenten" steckt noch in den Kinderschuhen. So einiges weiß ich auch noch nicht, muss ich noch ranglotzen! Danke euch!
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#17

AW: Klasse mit Properties als Property

  Alt 29. Mär 2011, 19:14
TPersistent und Nachkommen > Standardsichtbarkeit = Published
TObjekt und Nachkommen (außer TPersistent) > Standardsichtbarkeit = Public
[/DELPHI]
Das kannte ich noch nicht, oder ist es ein Missverständnis? Macht der Compiler einen klassenabhängigen Unterschied bei der Sichtbarkeit?

Bisher war ich immer davon ausgegangen dass bei

Delphi-Quellcode:
TMeineKlasse = class(TIrgendwas)
  Geheim: string;
end;
die Sichtbarkeit von "Geheim" immer published ist, unabhängig von der Vorfahrklasse.

Der Unterschied zeigt sich wenn man $M+ hinzufügt. Wenn TObject -> public gälte, würde $M+ der Klasse keine RTTI Informationen hinzufügen, bei TEgal -> published gälte, dann doch.

Mike
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:07 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