Ukrywanie właściwości klasy

0

Witam...

Jeśli pisze komponent dziedziczący z TImage to co mam zrobić żeby w Object Inspector'ze mojego komponentu nie było widać właściwości Picture? Chodzi mi o to żeby istniała ale żeby była ukryta dla użytkownika korzystającego z tego komponentu.

0

Nie można "zmniejszać" widoczności właściwości. Możesz spróbować dziedziczyć z klasy niżej (TGraphicControl) i ustawić sobie właściwość typu TPicture w protected. Będzie widoczna wtedy tylko z modułu w którym klasa jest zadeklarowana i we wszystkich klasach potomnych. Nie sądzę jednak, by takie rozwiązanie Cię satysfakcjonowało. Jeżeli, ktoś ma na to rozwiązanie to też się chętnie dowiem :)

0

Działało chyba zdefiniowanie właściwości o tej samej nazwie, ale np. w sekcji private. Nie daję gwarancji za skuteczność tego sposobu, ale spróbować nie zaszkodzi.

0
brodny napisał(a)

Działało chyba zdefiniowanie właściwości o tej samej nazwie, ale np. w sekcji private. Nie daję gwarancji za skuteczność tego sposobu, ale spróbować nie zaszkodzi.

na 99,9% kompilator tego nie przepuści (powód podał Bula)

0

Z tego co wiem to mozna przyslonic wlasciwosc definiujac ja jeszcze raz tylko do odczytu

type
  TImage1 = class(TImage)
  private
    { Private declarations }
    FImage:TImage;
  protected
    { Protected declarations }

  public
    { Public declarations }

  published
    { Published declarations }
    property Picture:TIMage read FImage;

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TImage1]);
end;

zapomnialem ... do prawdziwej wlasnosci komponentu mozna sie odwolywac w nastepujacy sposob

...

Image11:Timage1;

...

TImage(Image11).Picture.LoadFromFile('c:\w.bmp');
0

Pogubiłem się troszkę. W helpie czytamy:

An override can replace an inherited access specifier, add a missing specifier, or increase a property's visibility, but it cannot remove an access specifier or decrease a property's visibility.

Czyli nadpisując właściwość możemy:
-> Nadpisać specyfikator dostępu,
-> Dodać brakujący specyfikator dostępu,
-> Zwiększyć widoczność właściwości.

Nie możemy natomiast:
-> Usunąć specyfikatora dostępu,
-> Zmniejszyć widoczność właściwości.

Co prawda nie sprawdzałem tego w praktyce, ale ślepo wierze helpowi.

0

No i generalnie to jest prawda, dlatego napisalem "przyslonic wlasnosc" a nie "zmienic jej widocznosc". Nowa wlasnosc picture bedzie sie miala nijak do wlasnosci picture klasy TImage, ta jednak nadal pozostanie (bedziemy mieli do niej dostep poprzez rzutowanie na typ klasy w ktorej jest widoczna normalnie - odwolanie kwalifikowane).

0

Mhm. Wszystko stało się jasne. Dzięki za wytłumaczenie.

0

Z tego, co pamiętam zmniejszenie widoczności wynikowało tylko Warningiem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1