Autor Beitrag
ToZie
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 08.11.06 00:17 
Huhu ihr Lieben,

ich möchte ein komplettes Formular in einem Panel eines anderen Formulars anzeigen. Ich setze dazu Borderstyle auf bsNone, Align auf alClient, den Parent auf das Panel und mache das Formular anschließend sichtbar - geht auch soweit.

Irgendwie bekomme ich es allerdings nicht hin danach ein Control auf dem Formular zu aktivieren. Versuche per ActiveControl=Edit1 werden mit dem lakonischen Hinweis abgetan das Control sei nicht sichtbar. Mit der Maus oder per Tab lässt es sich allerdings ansteuern.

Irgendwelche Hinweise?

Ziel soll es sein alle Formulare der Anwendung im gleichen 'Arbeitsbereich' des Hauptformulars anzuzeigen. Die gesamte Funktionalität in ein Formular zu packen und per sichbarmachen / verstecken von Panels den Effekt zu erreichen widerstrebt mir irgendwie. Gibt's dafür vielleicht andere Ansätze?

Vielen Dank schonmal

Torsten
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mi 08.11.06 01:08 
Schau dir mal Frames an.

MfG
oldmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 380


D3 Prof, D4 Prof
BeitragVerfasst: Mi 08.11.06 06:48 
Hi
Du kannst bspw. PageControls einsetzen, oder aber du setzt deine Fenster separat ein und aktivierst sie in der Form :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Application.CreateForm(TMySecondForm,MySecondForm);
MySecondForm.Visible:= False;
MySecondForm.ShowModal;
MySecondForm.Free;

Diese Form erzeugst du zur Laufzeit und schiebst sie unter Projekt-> Optionen von automatisch erzeugte Formulare in verfügbare Formulare. Durch ShowModal muß der Anwender mach der Arbeit dieses Formular wieder schließen, um zur Hauptform zurückzukehren. Den Aufruf des Fensters kannst du bspw. über beliebige Ereignisse oder If-Bedingungen abhängig machen. Aber Vorsicht mit Timern, da solltest du den Timer vor Form-Aufruf auf False und nachher wieder auf True setzen.
Ok, vielleicht hilft's.
Gruß oldmax

_________________
Zier dich nich so, ich krieg dich schon....
ToZie Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 08.11.06 10:55 
Ok, stupid me. Parent des zu aktivierenden Controls wird natürlich das Formular mit dem Panel. So geht's:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure SetWinControlActive(ThisControl: TWinControl);
var
  aParent: TWinControl;
begin
  aParent:=ThisControl; repeat aParent:=aParent.Parent until aParent.Parent=nil;
  if (aParent <> nil) and (aParent is TCustomForm) and ThisControl.Visible
    then with aParent as TCustomForm do ActiveControl:=ThisControl
    else raise EInvalidOperation.Create(SCannotFocus);
end;