Delphi-Quellcode:
procedure TFormLQMain.FormActivate(Sender: TObject);
begin
FormLQSetup.Parent:=Panel1;
FormLQSetlist.Parent:=Panel1;
end;
Das ging anfangs auch gut, jetzt werden im FormLQSetup Funktionen aus dem FormLQMain ausgelöst, die da gar nicht eingebunden sind. Offenbar kapert irgendwas im MainForm die Messages weg. Die Konstruktion ist also mit Sicherheit falsch, kann mir jemand sagen, wie man ein Single-Form-Anwendung grundlegend konzipiert?
Wenn ich mich richtig erinnere, dürfte das hier ein Problem der Z-Order sein.
Du weist allen Forms das selbe Parent zu. Jetzt wird irgendeine Funktion ausgelöst und die zentrale Form prüft, ob das für sie ist. Falls nicht, geht das gemäß Z-Order an die untergeordneten Objekte (bezogen auf die Parent-Zuordnung). Je nach Funktion kann die Eigenschaft "Visible" eine Rolle spielen oder nicht. Einfach Visiple auf Fals stellen genügt dann in einigen Fällen nicht.
Deine zentrale Form dürfte FormLQMain sein.
Normalerweise bekommt diese als erstes die Info, dass was gemacht werden soll (Es gibt weitere Dinge, die Einfluss nehmen können, führt hier jetzt aber zu weit). Passt es zu der Form, bekommen die untergeordneten Komponenten (also auch deine anderen Forms), das Ereignis nicht mehr mit, weil es bereits von der Hauptform abgearbeitet wurde. Das scheint gerade bei dir das Problem zu sein.
Wie kannst du das beheben:
Das hängt davon ab, was "gekapert" wurde und kann ich so pauschal nicht beantworten. Ich vermute, dass es um Menüpunkte o.ä. gehen könnte.
Grundsätzlich würde ich keine Forms in anderen Forms einbetten. Dafür sind Frames da.
Wenn du es so beibehalten willst, musst du bei jedem Wechsel dafür sorgen, dass die entsprechenden Funktionen, Ereignisse, ... im Kontext aktiviert oder deaktiviert werden. Je nach größe der Anwendung, kann das aufwändig werden und ist fehleranfällig.
Das ist aus der Erinnerung geschrieben und kann evtl. nicht 100%ig stimmen, da ich mit Z-Order-Problemen seit ewigen Zeiten nichts mehr zu tun hatte. Wer mich an der Stelle korrigieren will, soll sich nicht zurückhalten