Home » Tipps & Tricks » Komponenten » Allgemein » String in der Tag-Eigenschaft speichern

String in der Tag-Eigenschaft speichern

Viele haben sich wahrscheinlich schon oft die Frage gestellt, welchen Sinn die Tag-Eigenschaft hat. Die Tag-Eigenschaft wurde im Typ TComponent implementiert, folglich besitzt jede Komponente diese Eigenschaft.In ihr kann man nur Integer-Werte angeben. Auf den ersten Blick scheint dies nicht so sinnvoll zu sein. Besser wäre es, wenn man dort Zeichenketten, also Strings speichern könnte. Aber weit gefehlt. Dieser Artikel soll erklären, wie man mit der Tag-Eigenschaft richtig umgehen kann.Wie schon erwähnt, lassen sich in der Eigenschaft nur Integer-Werte speichern. Wenn man bedenkt, dass Speicheradressen im Prinzip Integer-Werte sind, eröffnen sich ganz neue Möglichkeiten. Man kann nämlich nicht nur die Speicheradressen von Strings dort angeben, sondern von kompletten Objekten.Folgendermaßen kann man Strings in der Tag-Eigenschaft speichern. Es wird ein Zeiger auf einen dynamisch erzeugten String dort abgelegt.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Tag:=Integer(NewStr('Hallo'));
end;

NewStr weist Speicherplatz für einen String zu. Als Result gibt die Funktion die Adresse zurück, die wir in der Tag-Eigenschaft speichern.

procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:=PString(Button1.Tag)^;
end;

In Edit1.Text steht dann der String drin.

procedure TForm1.FormDestroy(Sender: TObject);
begin
  DisposeStr(PString(Button1.Tag));
end;

Da wir Speicher reserviert haben, müssen wir diesen auch wieder freigeben. Dies geschieht Beispielsweise im Ereignis OnDestroy.