Eigenschaften von Komponenten zur Laufzeit ändern
Komponenten werden im Quelltext über ihre Referenz angesprochen, die bei Komponenten, die bereits zur Entwicklungszeit erstellt wurden, mit der Eigenschaft „Name“ identisch ist:
//Zuweisung einer String-Eigenschaft Edit1.Text:='Dies ist der neue Text'; //Zuweisung einer Aufzählung Edit1.Color:=clYellow; //Zuweisung einer Menge Edit1.Font.Style:=Edit1.Font.Style+[fsBold] ; //Zweisung eines Integers Edit1.Tag:=10; //Zuweisungen eines Boolean Edit1.Enabled:=True; //Sichtbarkeit umdrehen Edit1.Visible:=not Edit1.Visible; //Button ist nur verfügbar, wenn Edit1 //einen Text enthält. Button1.Enabled := Edit1.Text'';
Lesen Sie in den Verweisen, wie Sie auch dynamische Komponenten über ihren Namen ansprechen.Sollte sich hinter einer Eigenschaft ein Record verbergen, können Sie einzelne Variablen nicht verändern:
Komponent1.Eigenschaft.Feld:=10;
Das Property „Eigenschaft“ soll folgenden Aufbau haben:
type TRecordEigenschaft = record Feld: Integer; Feld2: String; end;
Es kommt zu der Fehlermeldung „Der linke Seite kann nicht zugewiesen werden.“. Sie müssen stets den kompletten Record zuweisen:
procedure TForm1.Button1Click(Sender: TObject); var R: TRecordEigenschaft; begin R:=Komponent1.Eigenschaft; R.Feld:=10; Komponent1.Eigenschaft:=R; end;
Bei eigenen Objekten kann man diese Problematik umgehen, indem man statt Records Objekte mit entsprechenden öffentlichen Variablen verwendet.Über ein with-Konstrukt kann man ebenfalls dem Problem aus dem Weg gehen, wobei dieser Weg sehr unsauber ist und nicht empfohlen wird.