Autor Beitrag
belzebubi
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 27.03.03 18:46 
Wie kann ich eine Eigenschaft die ich bei published veröffentlicht habe bei nicht mehr gebrauch ausschalten, so das sie nicht mehr angezeigt wird. Oder wenigstens das sie einen Schreibschutz besitzt damit man nicht mehr auf sie zugreifen kann.

_________________
Frieden ist nicht alles, aber ohne Frieden ist alles nichts!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 28.03.03 10:18 
Hi,

ich weiß nicht ob es reicht die Eigenschaft einfach in der neuen Klasse in der Privat-Sektion zu definieren? Also so:
ausblenden Quelltext
1:
2:
3:
4:
5:
Type
  tMyEdit = Class (tEdit)
      Private
        Property Text;
    End;

Ich gehe aber davon aus das das nicht funktioniert. Mußte halt mal ausprobieren. Aber in den meisten Fällen gibt es (gerade bei Komponenten) eine Ableitung welche noch keine Properties veröffentlicht. Diese beginnen meistens mit tCustom.... Wenn Du Deine Komponente von so einer Klasse ableitest kannst Du selbst bestimmen welche Eigenschaften angezeigt werden und welche nicht.

Gruß
Tino
belzebubi Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 28.03.03 16:32 
ne , das war schon klar.
Mein Problem ist das ich ein Button mit Customcontrol erstellen will, der rund oder eckig sein soll. Wenn ich nun rund im Objektinspektor einstelle, wäre es mir lieb wenn height einen Schreibschutz erhält oder einfach verschwindet, weil dann nur width als radius fungiert.
Aber ich glaube das macht die Antwort auch nicht einfach :oops:

_________________
Frieden ist nicht alles, aber ohne Frieden ist alles nichts!
Delphi-Experte
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 29.03.03 06:36 
Titel: Eigenschaften nachträglich "schreibschützen"
Man kann eine Eigenschaft nachträglich wie folgt "schreibschützen":

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
type
  TMyClass = class(TParentClass)
  private
    procedure SetMyProperty(Value : Integer);
    function IsMyPropertyStored : Boolean;
  published
    property MyProperty write SetMyProperty stored IsMyPropertyStored;
  end;

procedure TMyClass.SetMyProperty(Value : Integer);
begin
  if not MyPropertyReadOnly then
    inherited MyProperty := Value;
end;

function TMyClass.IsMyPropertyStored : Boolean;
begin
  Result := not MyPropertyReadOnly;
end;


Der Ausdruck "MyPropertyReadOnly" entspricht dabei der Bedingung, wann die Eigenschaft nicht geändert werden darf. Die Funktion "IsMyPropertyStored" sorgt dafür, daß die Eigenschaft dann auch nicht in der Formulardatei gespeichert wird.

Wenn Du die Eigenschaft "Height" schreibschützen möchtest, dann solltest Du aber besser den folgenden Quelltext verwenden (beim Ändern von "Height" wird intern die Funktion "SetBounds" aufgerufen):

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
type
  TMyClass = class(TParentClass)
  private
    function IsHeightStored : Boolean;
  public
    procedure SetBounds(ALeft, ATop, AWidth, AHeight : Integer); override;
  published
    property Height stored IsHeightStored;
  end;

procedure TMyClass.SetBounds(ALeft, ATop, AWidth, AHeight : Integer);
begin
  if HeightReadOnly then
    AHeight := Height;
  inherited SetBounds(ALeft, ATop, AWidth, AHeight);
end;

function TMyClass.IsHeightStored : Boolean;
begin
  Result := not HeightReadOnly;
end;
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Sa 29.03.03 09:17 
Dann kann man auch gleich CanResize() überschreiben, da dieses nicht nur von SetBounds() aufgerufen wird und hat somit alle Größenveränderungen abgefangen.

_________________
Ist Zeit wirklich Geld?