2016-11-15 82 views
5

Zauważyłem, że niektóre właściwości znikają z obiektu Inspektor obiektów podczas wybierania więcej niż jednego przedmiotu.Dlaczego niektóre właściwości są ukryte w Inspektorze obiektów, gdy zaznaczono więcej niż jeden element?

Dlaczego tak się dzieje i jak kontrolować to zachowanie podczas tworzenia komponentu?

przykład:

Dodać 2 przycisków (TButton) w formie i wybranie jednego z nich.

enter image description here

w Inspektorze Object można zobaczyć wszystkie TButton „S Opublikowane właściwości (Zauważ, że nie ma również właściwość Constraints).

enter image description here

Dodaj drugi przycisk do bieżącego zaznaczenia (kliknij, naciskając klawisz SHIFT).

enter image description here

Jak widać, niektóre właściwości zostały ukryte przed Object Inspector (Zauważ, że Constraints nie jest bardziej widoczne).

enter image description here

Odpowiedz

8

czy dana nieruchomość jest wyświetlany, gdy wiele obiektów są wybierane jest kontrolowana przez redaktora własności skonfigurowany dla tej nieruchomości. Edytory właściwości (wywodzące się z TPropertyEditor w DesignEditors.pas) mają metodę GetAttributes, która zwraca zestaw atrybutów, które mają zastosowanie do edytora. Jeśli zestaw zawiera paMultiSelect, zostanie wyświetlona właściwość.

Biorąc pod uwagę, że wartość nieruchomości jest wyświetlany jako wartości ograniczania, a nie tylko (TSizeConstraints) dochodzę do wniosku, że nieruchomość nie jest przy użyciu rodzajowe TClassProperty edytor. Ten edytor ustawia paMultiSelect, ale na podstawie twoich zdjęć edytor właściwości do TSizeConstraints nie. To prawdopodobnie było niedopatrzenie.

Możesz spróbować zarejestrować swój własny edytor nieruchomości. Znajdź edytor właściwości aktualnie zarejestrowany dla TSizeConstraints (szukając na przykład kodu źródłowego dla TSizeConstraints), aw pakiecie o czasie projektowania zadeklaruj nową klasę wywodzącą się od tego. Zastąp wartość GetAttributes, aby zwrócić wartość, której potrzebujesz. Na koniec, wykonaj następujące przykłady w innym miejscu kodu, aby wywołać RegisterPropertyEditor.