Matthias Hanft
2006-09-14 15:35:00 UTC
Hallo,
blödes Subject, aber ich weiß es nicht besser auszudrücken...
Angenommen, ich habe in einem Delphi-Projekt zwei ganz normale
Formulare Form1 und Form2, die beide wie üblich von TForm ab-
stammen. Auf beiden befinden sich die gleichen statischen
Controls (z.B. ein "Memo1"), lediglich an anderen Positionen
und mit anderem Inhalt (also z.B. ist in einem Bild, das auf
Form2 weiter rechts steht als auf Form1, ein anderes BMP
geladen, oder im Memo1 steht ein anderer Text).
Nun möchte ich in einer Prozedur (anderswo) abhängig von bestimmten
Umständen eine dieser beiden Forms zur Bearbeitung auswählen und z.B.
an die StringList im (jeweils gleichnamigen) Memo1 etwas anfügen.
Im Prinzip also so:
if (irgendwas) then
myForm:=Form1
else
myForm:=Form2;
myForm.Memo1.Lines.Append('Bla.');
[...viele weitere myForm.IrgendeineControl.TuWas...]
Das geht so natürlich nicht, weil das ja andere Klassen sind: myForm
muß, damit man sowohl Form1 als auch Form2 zuweisen kann, vom Vater-Typ
TForm sein, und dort gibts natürlich kein Memo1.
Natürlich ginge nun rein syntaktisch
(myForm as TForm1).Memo1.Lines.Append('Bla.');
aber falls myForm zufällig nicht Form1, sondern Form2 zugewiesen wäre,
gehe ich davon aus, daß das gehörig kracht (auch wenn es in Form2 ein
ebensolches Memo1 gibt). Ist das so? Oder gibt das einen Laufzeitfehler,
wenn in myForm an dieser Stelle TForm2 drinsteht? Egal wie - richtig
und elegant sieht es mir jedenfalls nicht aus :-)
Ich habe schon ein bißchen mit "class of TForm" etc. herumexperimen-
tiert, aber ohne Erfolg. In meinem Hinterkopf spukt herum, daß die
beiden Forms wohl einen gemeinsamen Vater haben müßten (der wiederum
von TForm abstammen dürfte), aber wie geht sowas mit Formularen mit
visuellen Controls (falls überhaupt)?! Oder muß man dazu eine neue
Komponente entwickeln? Diesen Aufwand wollte ich eigentlich vermeiden
(anderer Ausdruck für "habe ich noch nie gemacht, und weil das Projekt
morgen fertig werden muß, habe ich auch keine Zeit, das zu lernen").
Irgendwie denke ich, daß das mit den geeigneten "class of"- und "as"-
Konstrukten relativ simpel gehen müßte, aber anscheinend ist das
Brett vor meinem Kopf momentan einfach noch zu dick - könnte das
bitte jemand entfernen? :-)
Danke & Gruß Matthias.
blödes Subject, aber ich weiß es nicht besser auszudrücken...
Angenommen, ich habe in einem Delphi-Projekt zwei ganz normale
Formulare Form1 und Form2, die beide wie üblich von TForm ab-
stammen. Auf beiden befinden sich die gleichen statischen
Controls (z.B. ein "Memo1"), lediglich an anderen Positionen
und mit anderem Inhalt (also z.B. ist in einem Bild, das auf
Form2 weiter rechts steht als auf Form1, ein anderes BMP
geladen, oder im Memo1 steht ein anderer Text).
Nun möchte ich in einer Prozedur (anderswo) abhängig von bestimmten
Umständen eine dieser beiden Forms zur Bearbeitung auswählen und z.B.
an die StringList im (jeweils gleichnamigen) Memo1 etwas anfügen.
Im Prinzip also so:
if (irgendwas) then
myForm:=Form1
else
myForm:=Form2;
myForm.Memo1.Lines.Append('Bla.');
[...viele weitere myForm.IrgendeineControl.TuWas...]
Das geht so natürlich nicht, weil das ja andere Klassen sind: myForm
muß, damit man sowohl Form1 als auch Form2 zuweisen kann, vom Vater-Typ
TForm sein, und dort gibts natürlich kein Memo1.
Natürlich ginge nun rein syntaktisch
(myForm as TForm1).Memo1.Lines.Append('Bla.');
aber falls myForm zufällig nicht Form1, sondern Form2 zugewiesen wäre,
gehe ich davon aus, daß das gehörig kracht (auch wenn es in Form2 ein
ebensolches Memo1 gibt). Ist das so? Oder gibt das einen Laufzeitfehler,
wenn in myForm an dieser Stelle TForm2 drinsteht? Egal wie - richtig
und elegant sieht es mir jedenfalls nicht aus :-)
Ich habe schon ein bißchen mit "class of TForm" etc. herumexperimen-
tiert, aber ohne Erfolg. In meinem Hinterkopf spukt herum, daß die
beiden Forms wohl einen gemeinsamen Vater haben müßten (der wiederum
von TForm abstammen dürfte), aber wie geht sowas mit Formularen mit
visuellen Controls (falls überhaupt)?! Oder muß man dazu eine neue
Komponente entwickeln? Diesen Aufwand wollte ich eigentlich vermeiden
(anderer Ausdruck für "habe ich noch nie gemacht, und weil das Projekt
morgen fertig werden muß, habe ich auch keine Zeit, das zu lernen").
Irgendwie denke ich, daß das mit den geeigneten "class of"- und "as"-
Konstrukten relativ simpel gehen müßte, aber anscheinend ist das
Brett vor meinem Kopf momentan einfach noch zu dick - könnte das
bitte jemand entfernen? :-)
Danke & Gruß Matthias.