Autor Beitrag
mig76
Hält's aus hier
Beiträge: 15


2010
BeitragVerfasst: Fr 11.10.02 12:05 
Hallo!

Folgendes: Habe in einem Formular ein Panel plaziert, innerhalb dem ich ein weiteres Formular sozusagen als Unterformular anzeige, und zwar mit folgenden Befehlen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
  
  Application.CreateForm(TfmForm1_Panel, fUnterformular);
  fUnterformular.Parent := Panel1;
  fUnterformular.BorderStyle := bsNone;
  fUnterformular.Align := alClient;
  fUnterformular.Show;


funktioniert alles wunderbar, das Formular vom Typ TfmForm1_Panel wird wunderbar innerhalb meines Panels von Formular1 angezeigt. Es ist mir auch möglich, die Steuerung bzw. den Fokus in die Felder von Formular fUnterformular zu setzen.

Ich möchte jetzt mit einem Button dieses Formular, welches in dem Panel angezeigt wird, aus diesem Panel "ausdocken", d.h. dass es als eigenständiges Formular angezeigt wird, ohne dass ich es schließen und neu aufbauen muss.
Habe folgendes versucht
ausblenden Quelltext
1:
2:
3:
4:
  fUnterformular.BorderStyle := bsSingle;
  funterformular.Align := alNone;
  ActiveControl := fUnterformular;
  fUnterformular.Parent := self;


es funktioniert auch eigentlich, das Formular wird ausgedockt, bloß krieg ich den Control bzw. den Fokus nicht mehr in die Felder von dem Unterformular und ich hab immer noch das Hauptfenster, wo das Panel1 plaziert ist aktiviert (Fensterrahmen ist aktiv, Standardwindows-Farbe blau), während mein "ausgedocktes" Form nicht aktiviert ist (Fensterrahmen ist inaktiv, Standardwindows-Farbe grau).

Kann mir jemand Tips geben????

Vielen Dank!!!!
SMI
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106

Win95-2003 / Debian / Suse
D1/D3/D6/D7
BeitragVerfasst: Fr 11.10.02 14:22 
Hi,

Henn ich dich nicht Mißverstanden habe ist dein Problem, dass du " fUnterformular.Parent := self;" verwendet hast. Wenn du die Funktion nun im Hauptformular aufrufst, ist self gleich dem Hauptformular, würde also so aussehen: "fUnterformular.Parent := Hauptformular;", dass das nicht tut ist irgendwie klar. Denn ein eigenständiges Fenster hat normalerweise kein Parent Control, also ist Parent nicht existent, also gleich NIL (Not in List).

Desweitern kann ich dein UnterFenster mehrfach erstellen, was sicherlich nicht sinnvoll ist. Daher habe ich die Zeile "if Form2 = NIL THEN" eingefügt. Selbiges gilt, wenn das Fenster nicht existiert, kann es auch nicht vom Panel aubgelößt werden, daher "IF Form2 = NIL THEN EXIT;". Desweiteren solltest du beachten, dass du beim Beenden nach Möglichkeit das Fenster via Form2.free selbst beseitigt, denn du hast es von Hand erstellt. Grobgesagt gilt alles was von Hand erstellt wurde sollte man auch wieder auf selbigen Weg freigeben, ist einfach ein schönerer Programmierstil.

SMI


Für Zugriffe aus dem Hauptformular:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Form2 = NIL THEN
    Application.CreateForm(TForm2, Form2);
  Form2.Parent := Panel1;
  Form2.BorderStyle := bsNone;
  Form2.Align := alClient;
  Form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 IF Form2 = NIL THEN EXIT;
 WITH Form2 DO
 BEGIN
  Parent := NIL;
  BorderStyle := bsSingle;
  Align := alNone;
  Height := 200;
  width := 200;
 END;
end;


Wenn du aus dem Unterformular zugreifst

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm2.Button1Click(Sender: TObject);
begin
Self.Parent := NIL;
Self.Parent := self;
Self.BorderStyle := bsSingle;
Self.Align := alNone;
Self.Height := 200;
Self.width := 200;
end;

_________________
Wenn es im Jahre 1879 schon Computer gegeben hätte, würden diese vorausgesagt haben, daß man infolge der Zunahme von Pferdewagen im Jahre 1979 im Pferdemist ersticken würde.
(John C. Edwards, brit. Zukunftsforscher)