![]() |
Single-Form-Anwendung
Liebe Delphigemeinde, ich habe ein Verständnisproblem. Ich schreiben eine Single-Form-App, die neben dem FormLQMain ein Setup und Help braucht. Beide habe ich auf TPanels gelegt, die ein- und ausgeblendet werden. Die gesamte Funktionalität steht dann in LQMain.pas, was es sehr unübersichtlich macht. Jetzt habe ich die Setup- und Help-Seite in je ein TForm geschrieben, die im FormLQMain.Panel1 wahlweise angezeigt werden.
uses ... LQSetup, LQHelp; TFormLQMain = class(TForm) Panel1: TPanel; .... end; var FormLQMain: TFormLQMain; procedure TFormLQMain.FormActivate(Sender: TObject); begin FormLQSetup.Parent:=Panel1; FormLQSetlist.Parent:=Panel1; end; procedure TFormLQMain.btnShowSetupClick(Sender: TObject); begin FormLQHelp.Visible:=false; FormLQSetup.Visible:= not FormLQSetup.Visible; end; procedure TFormLQMain.btnShowHelpClick(Sender: TObject); begin FormLQSetup.Visible:=false; FormLQHelp.Visible:= not FormLQHelp.Visible; 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? |
AW: Single-Form-Anwendung
Hallo,
obwohl ich die nicht mag, Frames ... Und zum "Kapern". Benutze weiterhin Panels, packe dort Deine Forms rein und blende die Panels aus. |
AW: Single-Form-Anwendung
Die Fehlerbeschreibung "Offenbar kapert irgendwas im MainForm die Messages weg." ist leider wenig hilfreich.
Was du da machst sollte eigentlich funktionieren. |
AW: Single-Form-Anwendung
Ich würde es über eine Reiter-Anwendung regeln, 3 Reiter (Haupt, Konfiguration, Hilfe), somit kommen sich Messages nicht in die Quere und Du brauchst Dir keine Gedanken machen ob was dargestellt wird oder nicht.
|
AW: Single-Form-Anwendung
Danke für die raschen Antworten!
@hoika: vielleicht ist das der Fehler: ich habe die beiden Forms an EIN Panel gebunden und nur visible geschaltet. Ich werde es testen... @Edelfix: im Setup-Form im StringGrid1 onClick-> wird nicht diese Funktion angesprungen, sondern eine völlig andere im MainForm, völig sinnfrei. @KodeZwerg: das hatte ich auch schon auf dem Schirm, aber das ist vom Aussehen her etwas vintage, dachte ich |
AW: Single-Form-Anwendung
Zitat:
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 :wink: |
AW: Single-Form-Anwendung
Zitat:
Wie Du diese Seiten ansteuerst, ist komplett Dir überlassen. |
AW: Single-Form-Anwendung
@Jasocul: ja, sowas scheint plausibel. Ich habe jetzt auf die Anregung von hoika hin Frames probiert, das scheint zu funktionieren. Bin aber erst am Anfang. Wenn nicht werde ich doch zu den von Kodezwerg vorgeschlagenen Reitern greifen.
Danke nochmal an alle! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz