Autor Beitrag
Visum
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Sa 17.08.02 14:21 
Hi,
ich möchte (fast) beliebiges Objekt als Parameter an eine Prozedur übergeben.
Das wären etwa Images, Edit-Felder, Buttons und Labels.

Geht das? bzw. Wie geht das?

Oder muss ich dann Position und Größe des Objekts einzeln übergeben? (weil das sind die einzigen Parameter, die ich von den Objekten brauche?

Visum
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Sa 17.08.02 14:50 
Klar geht das. Zum Beispiel so:

ausblenden Quelltext
1:
2:
3:
4:
procedure WriteIrgendwas(Objekt: TLabel;Was: String);
begin
 Objekt.Caption := Was;
end;


Gruß,
Ex0rzist
OregonGhost
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 215



BeitragVerfasst: Sa 17.08.02 14:57 
Du kannst statt TLabel im Idealfall TObject nehmen, das in der Klassenhierarchie ganz oben steht. Dann kannst aber ohne Downcasting nicht die gewünschten Eigenschaften verwenden.
Stattdessen solltest du den in der Klassenhierarchie höchsten Typ nehmen, der alle deine benötigten Eigenschaften aufweist, z.B. TControl in deinem Fall.
Wenn du wie Ex0rzist schreibt TLabel nimmst, hat das den Nachteil, das du entweder ein Typcasting machen musst, oder halt nur TLabels übergeben kannst. Wenn du TControl nimmst, kannst auch TButton, TLabel oder TImage übergeben.

_________________
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
GPF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 85



BeitragVerfasst: So 18.08.02 02:42 
Dem Post von OregonGhost sind nur zwei kleine Anmerkungen hinzuzufügen:

Über den Operator IS kannst Du den Typ eines Objektes ermitteln.
Ist obj z.B. ein Verweis auf ein TObject, so kannst Du über
ausblenden Quelltext
1:
2:
if obj is TEdit then 
  TEdit(obj).Text:='TEST';

abfragen ob obj ein Objekt vom Typ TEdit ist und dann über Typecasting (2.Zeile) auf die Eigenschaften und Methoden des TEdits zugreifen.
Eine case-Abfrage des Typs ist soweit ich weiß nicht möglich.

Außerdem wenn Edit1 ein Objekt vom Typ TEdit ist sind folgende Aussagen wahr:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
Edit1 is TObject
Edit1 is TPersistent
Edit1 is TComponent
Edit1 is TControl
Edit1 is TWinControl
Edit1 is TCustomEdit

, da TEdit ein Nachfahre zu den genannten Objekten ist und alle deren Eigenschaften ererbt!

Das empfehlenswerte Buch Delphi in a Nutshell erklärt sehr tiefgehend die Beziehung von Objekten, deren Speicherabbildungen, Zugriffe, Vererbung, Objekthierarchien und Polymorpheismus.

_________________
"Wenn Debugging ein Vorgang ist, Fehler aus einem Programm auszubauen, dann ist Programmieren der Vorgang, Fehler einzubauen."