Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Kann man veröffentlichte Eigenschaften unsichtbar machen?
belzebubi - Do 27.03.03 18:46
Titel: Kann man veröffentlichte Eigenschaften unsichtbar machen?
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.
Tino - 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:
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 - 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:
Delphi-Experte - Sa 29.03.03 06:36
Titel: Eigenschaften nachträglich "schreibschützen"
Man kann eine Eigenschaft nachträglich wie folgt "schreibschützen":
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):
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 - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!