Hallo,
| MasterHiggins hat folgendes geschrieben: |
Was macht denn bitteschön
(sender as TBitBtn). |
das Thema mit dem du dich hierzu auseinandersetzen solltest heißt
Polimorphie (Vielgestaltigkeit).
Das hängt mit dem Objekt-Orientierten Prinzieb der Vererbung zusammen.
Das funktioniert so:
Nehmen wir an, Du erstellte ein Objekt tTemperatur Dieses kann Celsius in Fahrenheit werte umrechen.
Wenn du dies hast, wilst aber auch noch die Umrechnung in Kelvin haben, allerdings möchtest du tTemperatur nicht verändern, weil du es schon in dieser Form weiterverkauft hast und dein Kunde muss die Kelvin geschichte ja nicht bekommen

.
Also erzeugst du einen Nachfahren von tTemperatur, welchen du tTemperatur2 nennst. Weil er ein nachfahte von tTemperatur ist, kann er automatisch auch alles, was tTemperatur kann und du kannst die gewünschte funktionalität dazuprogrammieren. Das ist Vererbung.
Die Polimorphie besagt jetzt, dass ein nachfahre eines Objektes, da er ja alles kann was der vorfahre kann, sich auch als vorfahre ausgeben darf.
Du kannst also in einer Variablen vom Typ tTemperatur auch ein Objekt vom Typ tTemperatur2 speichern,
kannst dann aber nur auf die funtkionen zugreifen sie es auch schon in tTemperatur gab.
Genau das geschieht mit dem Parameter Sender. Dieser ist vom Typ TObject. Jede Delphi Klasse ist ein Nachfahre von tObjekt, deshalb kann auch alles in diesem Parameter drinstecken, du kommst aber eben nur an die Methoden und Eigenschaften ran, die auch tObjekt schon angeboten hat und das ist nicht wirklich viel.
Num gibt es aber glücklicherweise den
IS operator. Dieser ermölicht dir herauszufinden was drinsteckt. Mit der bedingung
Quelltext
1:
| IF (Sender IS tBitBtn) THEN |
überprüfst du z.B. ob ein tBitBtn drin ist.
Wenn du jetzt aber auch auf die Funktionen von tBitBtn zugreifen willst musst du Delphi expliziet sagen, das es ein tBitButton ist.
Das kannst du auf diese Beiden Arten machen:
Quelltext
1: 2:
| tBitBtn(Sender).Caption := 'Hallo'; (sender as TBtnBla).caption := 'muku'; |
Wenn du nicht jedesmal einen solchen Typecast durchführen willst, dann dann kannst du sender auch einer Variable des entsprechendnen Typen zuweisen.
Quelltext
1:
| btn := tBitBtn(Sender); |
Auf jeden Fall solltest du aber die Sicherheitsabfrage nicht veressen.
Dann bisst du auch schon wieder bei meinem Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.BitBtn1Click(Sender: TObject); VAR btn : tBitBtn; begin IF NOT (Sender IS tBitBtn) THEN // Sicherheitsabfrage Exit; btn := tBitBtn(Sender); // Hier arbeite mit dem Button // Also mit der Variablen btn end; |
Gruß
Klabautermann