Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Form an Procedure/Function übergeben?


a.C.k - Fr 11.10.02 11:19
Titel: Form an Procedure/Function übergeben?
Hallo,
ich würde gerne mein Formular an eine Procedure/Funktion übergeben. Natürlich geht das mit dem Parameter "xxx : TForm" geht das, aber ich kann leider nicht in der Procedure/Funktion eine Daraufbefindliche Komponente ansprechen. Aber genau das Brauche ich.

z.B.:
Mehrere Formulare haben ehrere Komponenten mit selben Namen. Da diese Komponenten auch ähnliche Funktionen bereitstellen sollen, würde ich gerne diese Funktionalitäten in einer Procedure/Funktion auslagern.

Da es sich um mehrere Komponenten Handelt, die auf dem entsprechenden Formular angesprochen werden sollen, wäre es die einfachste Variante, wenn man das gesammte Formular als Parameter übergeben könnte (Natürlich mit zugriff auf die daraufliegenden Komponenten). Geht das und wenn JA wie???

Vielen Dank im Vorraus.


LCS - Fr 11.10.02 11:47

Hi
das funktioniert schon fast so wie du geschrieben hast. Nur darfst du den Parameter xxx nicht einfach als TForm deklarieren, sondern er muss eben den Typ deines Formular haben.
Wenn dein erstelltes Formular den Namen frmXY hat, dann müsste der Parameter lauten xxx: TfrmXY.
Innerhalb der Procedure kannst du dann auf die Komponenten des Formulars zugreifen und auch auf die Public-Proceduren.

Gruss Lothar


a.C.k - Fr 11.10.02 11:53

Vielen Dank!

Leider bringt mich die Lösung nur bedingt weiter, da ein anderes Formular ja einen anderen Namen hat.

Da ja TfrmXY <> TfrmYZ ist, kann ich frmYZ doch nicht an ie Funktion übergeben, welche den Typ TfrmXY verlangt. Somit ist die Function/Procedure immer noch an mein Formular gebunden.

Vieleichtr geht es ja einfach garnicht, so wie ich mir das Vorstelle :(.

Trotzdem vielen Dank.


LCS - Fr 11.10.02 13:11

Hi
Wenn das so ist, dann kehrst du wieder zurück zu ursprünglichen Variante:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TuWas(xxx: TForm);
begin
  if  xxx is TFormXY then begin
  ...
  end;
  if xxx is TFormYX then begin
  ...
  end;
end;


Wenn sich die Formular nur durch den Namen unterscheiden wäre die eleganteste Methode ein Formular zu erstellen, z. B. frmXY Klasse TfrmXY und die anderen Formulare von dieser Klasse abzuleiten.

Gruss Lothar
x - 109 min


Anonymous - Fr 11.10.02 13:13

Ohne er ausprobiert zu haben. Versuch mal das:


Quelltext
1:
2:
3:
4:
5:
var
  Compo: TComponent;
begin
  Compo := Form1;
  //...


Ob es der richtige Weg ist und es funktioniert weiss ich nicht. So direkt dürfte es aber nicht funktionieren, da der Compiler wahscheinlich nichts mit Compo.Label1.Capion := ... anzufangen wüßte. Aber mit einigen Tricks müßte es gehen. Glaube ich zumindest.

Das war also etwas auf die schnelle ohne Delphi angeworfen zu haben.


a.C.k - Fr 11.10.02 14:02

Vielen Dank LCS!

Das hilft mir sehr weiter! THX

@Popov:
Ich habe deine Variante etzt nicht versucht auszuarbeiten, da der Weg den LCS mir offenbart hat völlig ausreichend ist.
Trotzdem vielen Dank!


Anonymous - Fr 11.10.02 18:32

Kein Problem. Jetzt wo ich mir das bei Tageslicht angeguckt habe, ist es doch eine blöde Idee und würde sowieso nicht funktionieren.