Jak korzystać z TPersistent
bidok
Pewnie nie raz pisząc komponent do Delphi chwytaliście się za głowę widząc (a raczej nie widząc) właściwości pogubione między innymi standartowymi. O ile nie sprawiało to problemu przy odwoływaniu sie do TComponent lub klas TCustom[..] to przy innych zdawało sie być problemem...
Teraz to już nie problem! Piszac komponent skorzystajmy z klasy TPersistent!
Info!!! Tekst jest zwrócony dla osób raczej początkujących
Krótka informacja o klasie: Widzieliście kiedyś w Object Inspector'ze takie + przy właściwościach? Po kliknięciu których rozwija się wiecej opcji? Taki efekt można własnie uzyskać dzieki TPersistent;
Przejdę do przykładu:
type
TOpcje = class(TPersistent)
private
FProp1: Integer;
FProp2: string;
FProp3: Boolean;
published
property Prop1: Integer read FProp1 write FProp1;
property Prop2: string read FProp2 write FProp2;
property Prop3: Boolean read FProp3 write FProp3;
end;
Nie musze tego chyba tłumaczyć? Zwykła deklaracja klasy.
Teraz w głownym komponencie wystarczy w sekcji published dodać:
property Opcje: TOpcje read FOpcje write FOpcje;
A w private:
FOpcje: TOpcje
Na koniec najwazniejsze: w OnCreate glownego komponentu nalezy dodac:
FOpcje := TOpcje.Create
Takie dzieło już bedzie ładniej wygladać Object Inspector'ze, programićci dostaną lepiej poukładane właściwości w nowych komponentach.
A teraz przykładowy kodzik:
unit Przyklad;
interface
uses
SysUtils, Classes, Controls;
type
TOpcje = class(TPersistent)
private
FProp1: Integer;
FProp2: string;
FProp3: Boolean;
published
property Prop1: Integer read FProp1 write FProp1;
property Prop2: string read FProp2 write FProp2;
property Prop3: Boolean read FProp3 write FProp3;
end;
TPrzyklad = class(TComponent)
private
FOpcje: TOpcje;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Opcje: TOpcje read FOpcje write FOpcje;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Przyklad', [TPrzyklad]);
end;
procedure TPrzyklad.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
// tworzymy obiekt
FOpcje := TOpcje.Create;
// ustawiamy wlasciwosci
FOpcje.Prop1 := 123
FOpcje.Prop2 := 'test';
FOpcje.Prop3 := True;
end;
procedure TPrzyklad.Destroy;
begin
// niszczymy już nie potrzebny obiekt tuż przed zniszczeniem komponentu rodzica
FOpcje.Free;
inherited Destroy;
end;
Od siebie dodam tylko, że ten "pseudo art" został jakimś dziwnym trafem odświeżony po ponad dwóch latach (jeśli wierzyć temu co podaje historia.. imo minęło o wiele więcej czasu od jego pierwszej publikacji..)
Choć patrząc nie bardzo poznaje swoje pismo to postaram się poprawić.
W konstruktorze tworzysz obiekt, ale gdzie go zwalniasz??????
Prosze poprawic ten tekst (polskie znaki, dostosowac sie do wskazowek opisanych w "Zasady redagowania tekstow" w Pomocy) albo ten artykul zostanie skazowany jako niska wartosc merytoryczna.
poza tym co wymienił Morris, to nie mam żadnych zastrzeżeń ,
dobry art, rzeczywiście brakowało tego opisu
Komentarze? Właściwie to mam dwa: