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;

5 komentarzy

Komentarze? Właściwie to mam dwa:

  1. Używaj polskich liter
  2. Pisz bardziej formalnym językiem - wyrażenia typu "pozdro", "kodzik", "bluzgać" oraz emotikony wydają się być nie na miejscu

poza tym co wymienił Morris, to nie mam żadnych zastrzeżeń ,
dobry art, rzeczywiście brakowało tego opisu

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.

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ć.