![]() |
Modales Fenster per Klick auf aufrufende Form schließen lassen
Hi,
ich möchte folgendes erreichen: Eine Methode ruft eine modale Form auf. Diese wird dann mittig über der aufrufenden Form dargestellt. Innerhalb dieser modalen Form hab ich ja genug Möglichkeiten diese zu schließen. Sie soll aber auch geschlossen werden, wenn der Benutzer auf die im Hintergrund liegende Form klickt (Nicht wenn er auf eine andere Anwendung oder den Desktop klickt, sondern nur die aufrufende Form). Wäre das möglich? Wenn ja wie? |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Dann wäre es ja keine modale Form ...
|
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Auch wenn das, wie Markus schon sagt, dem Prinzip der modalen Form etwas zuwiderläuft, könntest Du die X- und Y-Werte des Mausklicks erfassen und feststellen ob sie
a) außerhalb der modalen Form b) aber innerhalb der X- und Y-Werte Deiner Hauptform liegen. Aber persönlich halte ich es für besser, eine modale Form durch eine Aktion innerhalb dieser Form zu schließen. Gruß Frank |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Vorschlag: Keine eigene Form verwenden, sondern ein Panel auf einem durchsichtigem Panel in Applikationsgröße plazieren. Klicks auf dieses Panel können problemlos erkannt und ausgewertet werden. Einzig das verschieben des "Fenstres" ist dann nicht mehr so ganz einfach....aber machbar.
Sherlock |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Zitat:
|
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Die Idee mit dem Panel-Gefrickel erinnert mich an dubiose Software ala Registry-Cleaner und Konsorten im pseudo-professionellen Stil.
ich würde einfach ein nicht-modales Fenster anzeigen lassen, was aber OnTop ist. |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Gerade die Delphi VCL hatte damit über die Jahre (mindestens ab Delphi 2007) immer wieder Probleme. Die Fenster kamen nicht in den Vordergrund. Wenn die auch noch modal waren, war die Applikation für den unerfahrenen Anwender nicht mehr bedienbar. Auf Panel umzusteigen, bedeutet auch die maximale Kontrolle darüber zu haben, wann und wo dieses "Fenster" anzuzeigen ist. Das hat mit Gefrickel oder Pseudo-Professionell nichts zu tun.
Freilich habe ich die letzten Jahre nur noch FMX entwickelt, ich weiss also nichts über den aktuellen VCL-Stand. @Frickler: Wie gesagt, nutze ich FMX, da reicht es ein TRectangle mit Fill.Color = Null zu nehmen. Sherlock |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Zitat:
Aber es soll schon Modal sein, heißt der Benutzer soll während diese Form offen ist, nicht in der aufrufenden etwas ändern können. Es geht hier rein um den Komfort nicht zwingen das X oben rechts treffen zu müssen ;-) Ist auch nicht auf meinen Mist gewachsen, sondern ein Wunsch von einem Kunden, der das selbst einer seiner Anwendungen wohl so hat(Name ist mir nicht bekannt). Zitat:
Zitat:
Zitat:
Zur Zeit probiere ich gerade mit Application.OnMessage rum. Könnte auch funktionieren, allerdings wir die Message WM_LBUTTONDOWN nicht geschickt, wenn außerhalt der modalen Form (aber noch auf der Hintergrundform) geklickt wird. |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Zitat:
|
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Hallo,
du könntest die 2. Form auch semimodal aufrufen, dann bleibt das 1. Form noch so bedienbar, wie du das willst. Was passiert aber, wenn der Nutzer auf einen Button in dem 1. Form klickt, soll dann der Button ausgelöst werden, oder das 2. Form geschlossen werden? |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Zitat:
Worauf der Benutzer klickt, soll im Grunde egal sein (allerdings soll der OnClick-Event der Controls, was er anklickt nicht ausgeführt werden). Sobald dieser Klick außer halb der Form ist, will ich irgendwas..ein Event, eine Message, damit ich darauf überhaupt reagieren kann. |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Hallo,
etwa so
Delphi-Quellcode:
Das ganze noch mit einer Boolean-Variable, die im OnKeyDown (KeyPreview=True) des 1. Forms prüft,
var
Form : TFormSemi; WindowList : Pointer; procedure ErzeugeForm begin Form:= CreateStateForm(theCaption, theInfo); WindowList:= DisableTaskWindows(Form.Handle); Form.Show; Application.ProcessMessages; // hier geht es im 1. Form ganz normale weiter end; procedure GibFormFrei Form.FCanClose := True; EnableTaskWindows(WindowList); Form.Free; ob das semimodale 1. Form gerade läuft und dann in diesem Fall GibFormFrei aufruft |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Ich habe das mal so versucht:
Delphi-Quellcode:
Funktioniert schon mal wie gewünscht....aber nur beim ersten Mouseklick. Wird dieser innerhalb der modalen Form gemacht, wird WM_CAPTURECHANGED nicht mehr gefeuert.!?
procedure TModaleForm.WMCapturechanged(var Message: TMessage); //message WM_CAPTURECHANGED;
var mp: TPoint; begin if GetCursorPos(mp) then begin if not (PtInRect(Self.BoundsRect, mp)) then self.Close; end; inherited; end; Gibt es eigentlich eine Gegenstückt zu WM_CAPTURECHANGED? |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
Zitat:
Und was ist CreateStateForm? Ich kenn nur CreateForm. |
AW: Modales Fenster per Klick auf aufrufende Form schließen lassen
CreateStateForm = TSemiForm.Create
Ich hatte es aus einem alten Projekt rauskopiert und das dort vergessen, u ersetzen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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