Hi Harald,
Nehmen wir einmal an ich habe ein Formular mit 3 Komponenten
(Label1,Panel1,Memo1).
Nun möchte ich zB auf folgende Art die Eigenschaft verändern:
procedure TForm1.objClick(Sender: TObject)
begin
with Sender do Alignment := taLeftJustify;
end;
Das geht nicht, da der Sender vom Typ TObject ist, und die Klasse TObject mit der Eigenschaft Alignment überhaupt nix am Hut hat.
Wenn ich nun hingehe und weiss um welche Klasse es sich
handelt ist das alles kein Problem … zB:
with Sender as TLabel do Aligment := taLeftJustify;
Das ist die erste Möglichkeit. Bei „Sender AS TLabel“ wird noch überprüft, ob Sender wirklich vom Typ TLabel ist. Wenn dies nicht der Fall ist, wird friedlich eine Exception ausgelöst.
Die zweite Möglichkeit ist „TLabel(Sender).Alignment := …“. Das nennt man Typecasting. Es geschieht direkt und „roh“, d. h. ohne Sicherheitsabfrage. Falls Sender gar nicht vom Typ TLabel ist, sind die Folgen unabsehbar (Programm-Absturz). Diese Methode sollte man daher nur anwenden, wenn absolut sichergestellt ist, daß der Sender auch wirklich den entsprechenden Typ hat.
-> Das bringt mir aber nicht viel, da ich sehr viele
unterschiedliche Komponenten verschiedener Klassen benutzte.
Wo genau ist Dein Problem?
folgende Idee kam mir schon:
with Sender as Sender.ClassType do Aligment := taLeftJustify;
Vielleicht so:
IF (Sender=Memo1) THEN Memo1 .Alignment := …
IF (Sender=Panel3) THEN Panel3.Alignment := …
IF (Sender=Memo5) THEN Memo5 .Alignment := …
Nein, das kann man leider nicht weiter kompaktifizieren.
Etwas anderes wäre es, wenn Du z. B. die Eigenschaft „Tag“ abfragen wolltest. Tag ist bereits in TComponent definiert. Deshalb bräuchtest Du nicht zu schreiben
IF (Sender=Memo1) THEN Memo1 .Tag := …
IF (Sender=Panel3) THEN Panel3.Tag := …
IF (Sender=Memo5) THEN Memo5 .Tag := …
sondern könntest die Sache erledigen mit
IF (Sender IS TComponent) THEN TComponent(Sender).Tag := …
oder
(Sender AS TComponent).Tag := …
oder direkt typegecastet
TComponent(Sender).Tag := …
Das funktioniert, weil jedes Memo automatisch auch vom Typ TComponent ist, ebenso jedes Edit, jedes Panel, jeder Button etc.
Hat Dir das geholfen?
Mit freundlichem Gruß
Martin