Robie komponent...

0

Witam.. Robie komponent, i mam pewien problem... jak zrobić, żeby jakieś właściwości znajdowały się w grupie, tj. tak jak np. właściwość FONT?

I jeszcze jedno.. jak chcę zrobic coś takiego:

property DomyslnaSciezka: string read Sciezka write Sciezka default 'C:\\';

to mi delphi wywala błąd:

Default values must be of ordinal, pointer or small set type

O co chodzi? Jak ustawić domyślną wartość dla Stringa?

Popełniłem pewien błąd w property.. już go poprawiłem

0

Ad1: function RegisterPropertiesInCategory
Ad2: Artykuły --> tworzenie VCL (A.Boduch)

0

Ale z tą domyślną funkcją właśnie robie wg. tego kursu... no i nic, jeżeli chce zrobić domyślną dla Integer, Boolean albo innego dziada, to działa, ale dla stringa nie chce:/

0

Coś mi się zdaje, że dla stringów w ogóle nie można. Chyba jedyne rozwiązanie to w konstruktorze dać ifa w tym stylu:

if zmienna='' then
zmienna:='domyślna wartość';

Oczywiście będą problemy dla zmiennych, które w założeniu mogą przyjmować wartość '', natomiast mogłoby to się sprawdzić np. przy ścieżce do pliku, któranie powinna być ustawiona na pustą.

0

Dzięki, ale już wpadłem na inny pomysł. W konstruktorze po prostu nadaje tam jakąś wartość :-) ale nadal mam problem z grupowaniem właściwości... w artykule A. Boducha jest niby ładnie wszystko napisane, ale tam jest tak, że te właściwości są typu boolean a ja bym chciał integer.

0

Pobaw się typem TPersistant. Przykład:

type
  TX = class (TPersistant)
  private
    // tutaj różne takie
  published
    property XXXX: TType read GetXXX write SetXXX;
  end;

I jak zrobisz taki ładny rekord, to go ustaw jako własność 'zgrupowaną'. Mniej więcej tak się to robiło (polecam też F1 i kody przykładowych komponentów).

0

W konstruktorze po prostu nadaje tam jakąś wartość :-)

W takim razie, jak zmienisz wartość tej zmiennej z poziomu OI?

0

<font color="green">Pobaw się typem TPersistant. Przykład:

type
TX = class (TPersistant)
private
// tutaj różne takie

published
property XXXX: TType read GetXXX write SetXXX;
end;</span>

No ja bym sie jednak wstrzymał.. no chyba, że autor posta robi jakieś proste komponenty (zbiory metod.. nie wiem).. ale na pewno nie komponenty graficzne. Straci tym samym dużą ilość metod, a niektóre mogą być mu potrzebne..

0

thenkles napisał:

W takim razie, jak zmienisz wartość tej zmiennej z poziomu OI?

Dopiero po skonstruowaniu obiektu nadawane są właśnościom odpowiednie wartości.

Co do default:

If a property?s current value is different from its default value (or if there is no default value) and the stored specifier is True, then the property?s value is saved. Otherwise, the property?s value is not saved.

Default w tym przypadku zapobiega zapisywaniu wartosci które i tak sa ustawiane w konstruktorze.

0

Dopiero po skonstruowaniu obiektu nadawane są właśnościom odpowiednie wartości.

Czyli jak w OI będzie pusty string, to też zostanie przypisany odpowiedneij zmiennej po stworzeniu komponentu? Bo jeśli nie, to i tak wszystkie domyślne wartości zostanę nadpisane przez puste stringi znajdujące się w OI. Dobrze myślę?

0

Też zostanie przypisany.

0

W takim razie szlag weźmie wartości domyślne, czyż nie?

// Dopisane
Mam na myśli te "wartości domyślne" ustawiane w konstruktorze.

0

Jeśli nadasz jakiejs wlasnosci wartosc '' pomimo ze konstruktor ustawial cos innego to tak, bo przeciez po to sie zmienia na pusty string no nie?

Co do wartosci domyslnych to jesli np. Left domyślnie równy jest 1, to kontruktor tą wartosc tak ustawia, więc jeśli Left jest równy 1 to nie będzie informacji o wartości tej własności, a nie ze przyjmuje ona wartosc 0.

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