Verwenden von Popup-Formularen in FireMonkey

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu FireMonkey-Anwendungsdesign


Informationen zu Popup-Formularen

FireMonkey unterstützt Popup-Formulare. Popup-Formulare sind in der Klasse TCommonCustomForm definiert. Die wichtigsten Eigenschaften von Popup-Formularen sind FormStyle und ParentForm.

Eigenschaft TCommonCustomForm.FormStyle

Die Eigenschaft FormStyle legt das Verhalten des Formulars fest. FormStyle kann einen der folgenden Werte haben: Normal, StayOnTop und Popup. Die Bedeutung von Normal und StayOnTop ist ziemlich einfach. Normal legt ein normales Formular fest und StayOnTop ein normales Formular, das immer über allen anderen Fenstern des Desktops und über allen anderen Formularen der Anwendung angezeigt wird.

Die VCL verfügt über die gleiche Eigenschaft TCustomForm.FormStyle mit den zwei zusätzlichen Werten fsMDIChild und fsMDIForm. Diese Werte sind in FireMonkey nicht definiert, da diese Werte nur auf der Windows-Plattform von Bedeutung sind.
Vergleichen Sie FormStyle mit der Eigenschaft StyleBook, die den sichtbaren Stil eines Formulars definiert.

Die Option Popup legt ein spezielles Popup-Formular fest, das in Kombinationsfeldern und Menüs verwendet wird. Popup-Formulare verfügen über das folgende spezielle Verhalten:

  • Popup-Formulare können nicht aktiv sein. Alle Formulare dieses Typs gehören zu der speziellen PopupForms-Liste in der Klasse TScreen. PopupFormCount gibt die Anzahl der Popup-Formulare an, die aktuell in der Anwendung erstellt wurden.
  • Auf mobilen Plattformen werden normale Formulare immer im Vollbildmodus angezeigt, aber Popup-Formulare können nur einen Teilbereich des Desktops einnehmen.
  • Popup-Formulare bleiben nicht längere Zeit sichtbar. Wenn Sie mit der Maus außerhalb des Popup-Formulars klicken (oder mit einem Finger auf ein Touchpad tippen), wird das Popup-Formular normalerweise geschlossen. Mehrere Popup-Formulare können gleichzeitig angezeigt werden; diese Popup-Formulare können untereinander verwandt sein.

Normalerweise haben Popup-Formulare die folgenden Eigenschaften:

BorderStyle := None; // No visible border (not resizable) 
Transparency := True;  // pop-up form is transparent 

Eigenschaft TCommonCustomForm.ParentForm

Die Eigenschaft ParentForm legt die Verwandtschaftsbeziehung zwischen Formularen fest. Der Wert von ParentForm wird festgelegt, wenn Sie die Eigenschaft Parent ändern. Wenn Parent ein Formular ist, dann wird ParentForm wie Parent festgelegt. Ansonsten wird ParentForm entsprechend dem Formular festgelegt, zu dem Parent gehört.

Nach jeder Änderung des ParentForm-Formulars führt das System die virtuelle Methode DoParentFormChanged aus.

Beachten Sie, dass durch das Ändern einer der Eigenschaften FormStyle, BorderStyle und ParentForm die Neuerstellung des aktuellen Formulars, aller Steuerelemente auf dem Formular und aller dem aktuellen Formular untergeordneten Formulare erzwungen wird. Deshalb sollten Sie diese Eigenschaften zur Laufzeit, nachdem ein Formular bereits auf dem Bildschirm angezeigt wird, nicht mehr ändern.

Verwenden der Klasse TCustomPopupForm

Zur Vereinfachung der Erstellung von Popup-Formularen definiert FireMonkey die Klasse TCustomPopupForm. Die Klassen TPopup (in CreatePopupForm), TComboEdit, TPopupBox, TMenuBar und andere ähnliche Klassen verwenden TCustomPopupForm.

Standardmäßig haben TCustomPopupForm-Formulare einen transparenten Hintergrund (Transparency := True) und keinen Rahmen (BorderStyle := None). Beim Schließen eines TCustomPopupForm-Formulars wird es automatisch freigegeben. Beim Erstellen eines TCustomPopupForm-Formulars sucht das System nicht nach einer FMX-Datei, die das Formular enthält. Das heißt, dass die Klasse TCustomPopupForm für die Verwendung zur Laufzeit vorgesehen ist.

TCustomPopupForm-Formulare verwenden den folgenden Konstruktor:

 constructor Create(AOwner: TComponent; AStyleBook: TStyleBook = nil; APlacementTarget: TControl = nil); reintroduce;

Hier legt AStyleBook Stile fest, die von einem Formular verwendet werden, und APlacementTarget gibt das Steuerelement an, in dessen Nähe das Formular angezeigt werden soll.

Wichtige Eigenschaften von TCustomPopupForm-Formularen

Da TCustomPopupForm-Formulare keinen sichtbaren Rahmen und einen transparenten Hintergrund haben, sollten sich derartige Formulare nicht über die Bildschirmgrenzen hinaus erstrecken. Die physischen Koordinaten eines Formulars (Position, Height, Width) werden nicht zur Positionierung verwendet. Die Positionierung von TCustomPopupForm-Formularen erfolgt durch andere Eigenschaften: Placement, PlacementTarget, PlacementRectangle, ScreenPlacementRect,Size. Sie sollten die Eigenschaften Position, Height, Width nicht explizit ändern.

PlacementTarget zeigt auf ein Zielsteuerelement, relativ zu dem das TCustomPopupForm-Formular positioniert wird. Hier und im Folgenden wird der Begriff anhaften verwendet, um eine derartige relative Positionierung des Popup-Formulars dicht beim Zielsteuerelement zu bezeichnen. Wenn PlacementTarget festgelegt ist, dann werden die Bildschirmkoordinaten eines Formulars relativ zu diesem PlacementTarget-Steuerelement festgelegt.

Wenn PlacementTarget nicht festgelegt ist und TCustomPopupForm ein ParentForm hat, dann wird das TCustomPopupForm relativ zu diesem übergeordneten Formular positioniert. Wenn PlacementTarget und ParentForm nicht festgelegt sind, wird TCustomPopupForm relativ zur linken oberen Ecke des Bildschirms (Hauptfenster) positioniert.

PlacementRectangle legt Koordinaten des Rechtecks relativ zu dem Formular, dem es anhaftet, fest. Die Bildschirmkoordinaten von PlacementRectangle werden relativ zu PlacementTarget (falls vorhanden) berechnet. Ansonsten werden die Bildschirmkoordinaten relativ zur linken oberen Ecke des Bildschirms berechnet. Dabei werden die folgenden Regeln verwendet:

ScreenPlacementRect legt die Bildschirmkoordinaten des Rechtecks fest, relativ zu dem das Formular anhaftet, wobei die beiden Eigenschaften PlacementRectangle und PlacementTarget berücksichtigt werden.

Placement legt fest, wie ein Popup-Formular relativ zu einem in einer Eigenschaft wie ScreenPlacementRect angegebenen Rechteck, relativ zum Bildschirm oder relativ zur Mausposition (Zeigegerät) positioniert wird. TPlacement legt mögliche Werte von Placement fest. Der übliche Standardwert lautet Bottom. Damit wird festgelegt, dass das Popup-Formular am unteren Bereich des Zielrechtecks anhaftet. Die folgende Abbildung zeigt ein Beispiel für den Wert TopCenter:

Rechteck für die Platzierung auf dem Bildschirm

In der Abbildung ist ScreenPlacementRect das in der Farbe Fuchsia dargestellte Rechteck der Schaltfläche Show popup.

Padding definiert, wie in normalen Formularen, Abstände von den Grenzen des Client-Rechtecks eines Formulars. Alle untergeordneten Steuerelemente auf dem Formular werden entsprechend dieser Abstände ausgerichtet. Der Standardwert ist 8; damit wird erreicht, dass Effekte (wie Schatten) nicht durch physische Grenzen eines Fensters abgeschnitten werden.

Size legt die Größe des Arbeitsbereichs des aktuellen Popup-Formulars fest. Das Rechteck der physischen Größe des Fensters, in der Abbildung mit einem gestrichelten roten Rahmen dargestellt, ist nicht von Interesse. Das Size-Rechteck, in der Abbildung mit einem grünen gestrichelten Rahmen dargestellt, legt die Abmessungen fest, anhand derer alle Steuerelemente ausgerichtet werden. Formularabmessungen (ClientWidth und ClientHeight) werden automatisch auf Basis von Size und Padding festgelegt. Wenn PlacementRectangle festgelegt ist und Placement Absolute ist, dann wird Size ignoriert.

ContentPadding legt die Abstände vom Client-Bereich eines Popup-Formulars fest. Das Anhaften des Popup-Formulars wird an den Grenzen dieses eingezogenen "Innenabstand-Rechtecks" ausgeführt.

ScreenContentRect legt die Bildschirmkoordinaten des "Innenabstand-Rechtecks" fest, für das das Anhaften an den Grenzen für ein Popup-Formular implementiert wird.

Der gesamte nützliche Inhalt eines Popup-Formulars wird in diesem "Innenabstand-Rechteck" positioniert. Bestimmte "dekorative Elemente", z. B. eine "dreieckige Spitze" auf einer Seite eines Callout-Bereichs, können außerhalb des Innenabstand-Rechtecks positioniert werden. Dies ist in folgender Abbildung dargestellt:

Dreieckige Spitzen

Offset legt einen Offset des "Innenabstand-Rechtecks" relativ zum Client-Rechteck eines Popup-Formulars fest. Die Eigenschaft legt die Anzahl der Pixel fest, um ein Popup-Formular relativ zu einer Formularposition zu verschieben, die unter Berücksichtigung aller oben behandelten Positionierungseigenschaften ermittelt wird. Die Offset-Richtung hängt von einem Placement-Wert ab. Die Eigenschaft Offset wird beispielsweise in Menüs mit mehreren Ebenen verwendet, wenn Popup-Formulare von Untermenüs platziert werden, die ein Formular der vorherigen Ebene überlappen.

Popup-Formular - Offset

DragWithParent gibt an, ob das aktuelle TCustomPopupForm nach dessen Anzeige verschoben werden kann. Wenn DragWithParent True ist, wird TCustomPopupForm zusammen mit dem übergeordneten Formular verschoben, wenn das übergeordnete Formular das Ziel eines Drag&Drop-Vorgangs ist. Wenn Placement Mouse oder MouseCenter ist, dann wird das Popup-Formular entsprechend der Bewegung des Mauszeigers verschoben. Auf mobilen Geräten kann nach dem Ändern der Ausrichtung (Hochformat/Querformat) ein Popup-Form die Position ändern, damit es nicht teilweise von den Bildschirmgrenzen verdeckt wird.

Siehe auch