Programowanie w języku Delphi » Artykuły

Jak korzystać z TPersistent

  • 2006-08-28 14:44
  • 5 komentarzy
  • 1121 odsłon
  • Oceń ten tekst jako pierwszy
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

bidok 2006-08-28 14:24

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

maly186 2006-08-26 15:48

W konstruktorze tworzysz obiekt, ale gdzie go zwalniasz??????

Adam Boduch 2006-08-25 11:46

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.

stabilob 2006-08-25 08:16

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

Morris 2006-08-25 00:20

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