Programowanie w języku Delphi

Self

  • 2010-10-31 18:27
  • 1 komentarz
  • 2610 odsłon
  • Oceń ten tekst jako pierwszy
Self - wewnętrzny wskaźnik na obiekt

W definicji metod klasy słowo Self wskazuje na obiekt, w którym jest używane. Spójrz na definicję metody Button1Click:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Self.Caption := 'Nowy tytuł';
 
  Caption := 'Nowy tytuł #2';
end;


Taki kod skompiluje się prawidłowo, obie instrukcje są równoważne, słowo kluczowe Self można nazwać ukrytym elementem klasy, który zapewnia odwołanie zarówno do pól, metod czy właściwości.

Poniższy przykład realizuje dynamiczne utworzenie komponentu na formularzu, po kliknięciu w przycisk:

procedure TForm1.Button1Click(Sender: TObject);
var
  MyButton : TButton;
begin
  MyButton := TButton.Create(Self);
  MyButton.Parent := Self;
  MyButton.Caption := 'MyButton';
  MyButton.Left := 10;
  MyButton.Top := 10;
end;


W konstruktorze klasy TButton należy podać parametr, który określa komponent rodzicielski, na którym zostanie utworzona nowa kontrolka. Może to być albo formularz albo TPanel albo inny komponent zdolny do przechowywania w sobie innych kontrolek. W parametrze konstruktora umieszczono słowo Self, które wskazuje na obiekt, w którym umieszczony jest kod, czyli w tym wypadku - na obiekt Form1. Równie dobrze ten kod mógłby wyglądać tak:

procedure TForm1.Button1Click(Sender: TObject);
var
  MyButton : TButton;
begin
  MyButton := TButton.Create(Form1);
  MyButton.Parent := Form1;
  MyButton.Caption := 'MyButton';
  MyButton.Left := 10;
  MyButton.Top := 10;
end;


Zobacz też:

1 komentarz

faron 2013-01-07 22:12

Pierwszy przykład - Źle. Zmienisz właściwość caption Formularza, a nie przycisku!
A jak odwołać się aby zmienić właściwość caption przycisku, gdy nie wiem jak się nazywa?
Zakładam , że wiele komponentów może wywołać tę samą procedurę, która np. zmieni kolor komponentu wywołującego. ale skąd wiedzieć który komponent właśnie wywołał tę procedurę??