Sign in Join
Wiki copytemporary

TPopupMenu/de: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Diese Seite erklärt, wie man die [[doc:lcl/menus/tpopupmenu.html|TPopupMenu]] Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.
22
33## Beschreibung
44
55Das [[doc:lcl/menus/tpopupmenu.html|TPopupMenu]] ist ein Bedienfeld, was angezeigt wird, wenn mit der rechten Maustaste geklickt wurde.
66
77Es ist eine nicht-sichtbare Komponente: das heißt, wenn aus der Komponentenpalette das Symbol ausgewählt und auf dem Formular platziert ist, wird es nicht zur Laufzeit angezeigt. Stattdessen wird eine Menüleiste mit einem von der Menü-Editor definierten Struktur angezeigt.
88
99Um den Menü-Editor zu sehen, rechtsklicken Sie auf das Mainmenü-Symbol auf Ihrem Formular.
1010
11-<figure>
12-<img src="Comp_Standard_TPopupMenu.png" title="Comp_Standard_TPopupMenu.png" />
13-<figcaption>Comp_Standard_TPopupMenu.png</figcaption>
14-</figure>
11+![](/wiki-images/b/b2/Comp_Standard_TPopupMenu.png)
1512
1613## Erstellen eines PopupMenüs
1714
1815Wie Sie einer Komponente auf Ihrem [[TForm/de|Formular]] ein PopupMenü zuweisen, zeige ich Ihnen an folgendem Beispiel:
1916
2017- Erstellen Sie eine neue [[Form Tutorial/de|GUI-Anwendung]] und fügen Sie ein [[TImage/de|TImage]] Ihrem Formular hinzu. Dazu wählen Sie das TImage von Komponentenpalette *Additional* und klicken auf Ihr Formular. Es wird ein TImage auf Ihrem Formular abgelegt, mit dem Namen *Image1*.
2118- Gehen Sie auf den Objektinspektor (muss auf *Image1* stehen) und wählen Sie unter dem Reiter Eigenschaften die Eigenschaft *Align*. Stellen sie in der daneben befindlichen Combobox das Align *alClient* ein (das Image1 wird jetzt immer in der Größe dem Formular angepasst).
2219- Nun legen Sie analog dem TImage ein TPopupMenu (Komponentenpalette Standard) auf Ihrem Formular ab (möglichst auf das *Image1*, so weiss man, dass dieses zum Image gehört). Die Komponente *PopupMenu1* wird auf dem Formular angezeigt (ein Quadrat mit einer Darstellung eines Dropdown-Menüs und dem Namen der Komponente).
2320- Rechtsklicken Sie nun auf *PopupMenu1*, ein PopupMenü erscheint. Klicken Sie auf den ersten Eintrag **Menü-Editor**.
2421- Der Menü-Editor wird geöffnet und erstellt schon einen Menüpunkt, mit der Beschriftung "New Item1". Wahrscheinlich wollen Sie es ändern, so klicken Sie darauf und gehen zum Objektinspektor.
2522- Im Objektinspektor, ändern Sie die Name-Eigenschaft von *MenuItem1* zu etwas besser geeignetem. Sagen wir, dies ist das Menü *Laden* (engl. Load), also ändern Sie den Namen, indem Sie **popLoad** eingeben und mit Enter bestätigen.
2623- Wir wollen eine bessere Beschriftung als "New Item1". Gehen Sie auf die Caption-Eigenschaft, und geben Sie **Laden** ein und drücken Sie Enter.
2724- Jetzt wollen wir noch einen weiteren Menüeintrag erstellen. Gehen Sie zurück zu dem Menü-Editor-Fenster. Klicken Sie mit der rechten Maustaste auf *Laden*. Ein Popup-Menü erscheint. Klicken Sie auf *Neuen Eintrag einfügen (dahinter)*. Ein neues Menü, genannt *New Item2* erscheint. Wie in den letzten beiden Positionen erläutert, ändern Sie im Objektinspektor den Namen zu **popStretch** und die Bezeichnung (Caption) zu **Gestreckt**.
2825- Wir haben festgestellt, dass wir ein Menüeintrag vergessen haben. Das ist nicht schlimm, sie gehen wieder in den Menü-Editor. Sie können entweder auf *Laden* rechtsklicken und **Neuen Eintrag einfügen (dahinter)** wählen oder auf *Gestreckt* rechtsklicken und **Neuen Eintrag einfügen (davor)** wählen.
2926- Ändern Sie dessen Bezeichnung (Caption) zu **Zentriert** und Name zu **popCenter**.
3027- Verfahren Sie so weiter mit jedem Menüeintrag, welchen Sie benötigen und schließen Sie am Ende den Menü-Editor.
3128- Wenn Sie alle Menüs eingefügt haben, müssen Sie noch festlegen, welcher Komonente dieses zugeordnet werden soll. In unserem Fall soll dies das TImage *Image1* sein, was wir am Anfang auf dem Formular platziert haben.
3229- Wählen Sie auf dem Formular das *Image1* an (einfach anklicken) und gehen im Objektinspektor auf die Eigenschaft **PopupMenu**. Dort wählen Sie in der daneben liegenden Combobox das *PopupMenu1* aus. Jetzt wird das PopupMenu immer erscheinen, wenn Sie zur Laufzeit auf das Image rechtsklicken.
3330
3431Ihr nun so erstelltes Menü wird zur Laufzeit, wenn sie auf das Image1 rechtsklicken, angezeigt und ermöglicht dem Nutzer auf die einzelnen Menüeinträge zu klicken. Allerdings wird bei einem Klick noch nicht wirklich was geschehen. Damit Sie Menüpunkte haben, die etwas tun, müssen Sie jedem Menüpunkt ein [Ereignis](http://de.wikipedia.org/wiki/Ereignis_%28Programmierung%29) (engl. Event) zuweisen, welches dann auf dessen Klicken reagiert.\
3532Nachfolgend wird erklärt, wie Sie die Ereignisse von Menüklicks mit Hilfe des Objektinspektors bearbeiten.
3633
3734## Machen, dass das Menü tatsächlich etwas tut
3835
3936- Gehen Sie zurück zu dem Menü-Editor und wählen Sie auf den **Laden** Menüeintrag mit einem Klick an. Gehen Sie nun auf die Objekt-Inspektor-Fenster, und wählen Sie den Reiter **Ereignisse**. Die einzigste Ereigniss, die Sie wirklich ändern wollen, ist *OnClick*, das aktuell noch leer ist. Wenn Sie schon einen vorhandenen [[Event order/de|Eventhandler]] benutzen wollen, können Sie diesen verwenden und entsprechend auswählen, ansonsten können Sie sich von Lazarus einen erstellen lassen. Auf der rechten Seite ist ein Button mit 3 Punkten. Klicken Sie diesen an, und ein neue Procedure (Ihr neu erstellter Eventhandler) wird im Code erstellt und die Ansicht wechselt zum Quelltexteditor. Ihre Procdure wird in etwa so aussehen:
4037
4138``` pascal
4239procedure TForm1.popLoadClick(Sender: TObject);
4340begin
4441
4542end;
4643```
4744
4845- Zwischen den Anweisungen (Statements) **begin** und **end** können Sie nun die Anweisungen für den Menü-Eintrag-Klick *Laden* einfügen.\
4946
50-\
5147In unserem Fall könnten wir ein TOpenDialog-Steuerelement auf die Form einfügen und den Standard-Dialog für unsere Zwecke nutzen:
5248
5349- Legen Sie dafür ein [[TOpenDialog]]-Steuerelement (Komponentenpalette Dialogs) auf Ihrer Form ab (Name *OpenDialog1*). Nun ändern Sie Ihre Procedure zu:
5450
5551``` pascal
5652procedure TForm1.popLoadClick(Sender: TObject);
5753begin
5854 if OpenDialog1.Execute then //nur wenn eine Datei gewählt wurde
5955 try //versuche
6056 Image1.Picture.LoadFromFile(OpenDialog1.Filename); //die gewählte Datei nach Image1 zu laden
6157 except
6258 end;
6359end;
6460```
6561
6662- Analog verfahren Sie mit anderen Menüeinträgen und erstellen deren Eventhandler und fügen Sie folgenden Code ein:
6763
6864``` pascal
6965procedure TForm1.popStretchClick(Sender: TObject);
7066begin
7167 popStretch.Checked := not popStretch.Checked; //Markierung vom Menüeintrag an- oder abschalten
7268 Image1.Stretch := popStretch.Checked; //Image1 Gestreckt ja / nein
7369end;
7470
7571procedure TForm1.popCenterClick(Sender: TObject);
7672begin
7773 popCenter.Checked := not popCenter.Checked; //Markierung vom Menüeintrag an- oder abschalten
7874 Image1.Center := popCenter.Checked; //Image1 Zentriert ja / nein
7975end;
8076```
8177
8278- Jetzt können Sie das Beispiel mit \[F9\] starten, mit einem Rechtsklick das Popupmenü öffnen und auf *Laden* klicken. Laden Sie nun ein Bild Ihrer Wahl. Wenn Sie ein Bild geladen haben, testen Sie noch die anderen Menüeinträge.
8379
8480## Selber aufpoppen
8581
8682Möglicherweise wollen Sie ein PopupMenü nicht mit einem Rechtsklick auf eine bestimmte Komponente angezeigt haben, sondern bei einem anderen Ereigniss. Das können Sie mit **`PopupMenu.PopUp`** realisieren.
8783
8884Folgendes Beispiel demonstriert das:
8985
9086- Erstellen Sie eine neue [[Form Tutorial/de|GUI-Anwendung]] und fügen Sie ein TPopupMenu (*PopupMenu1*) und ein [[TButton/de|TButton]] (*Button1*) Ihrem Formular hinzu.
9187- Fügen Sie ein paar Menüeinträge in das *PopupMenu1* ein (siehe [[TPopupMenu/de|Erstellen eines PopupMenüs]]).
9288- Generieren Sie den Eventhandler des OnClick-Ereigniss von *Button1* und schreiben Sie folgenden Code hinein:
9389
9490``` pascal
9591procedure TForm1.Button1Click(Sender: TObject);
9692begin
9793 PopupMenu1.PopUp; //Zeige PopupMenu
9894end;
9995```
10096
10197- Starten Sie Ihr Programm, das PopupMenü wird jetzt immer durch den Buttonklick aufgerufen.
10298
10399---
104100*From the Free Pascal wiki, page "TPopupMenu/de", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history