TPopupMenu/de

From Free Pascal wiki
Jump to: navigation, search

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)

Diese Seite erklärt, wie man die TPopupMenu Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.

Beschreibung

Das TPopupMenu ist ein Bedienfeld, was angezeigt wird, wenn mit der rechten Maustaste geklickt wurde.

Es 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.

Um den Menü-Editor zu sehen, rechtsklicken Sie auf das Mainmenü-Symbol auf Ihrem Formular.

Comp Standard TPopupMenu.png

Erstellen eines PopupMenüs

Wie Sie einer Komponente auf Ihrem Formular ein PopupMenü zuweisen, zeige ich Ihnen an folgendem Beispiel:

  • Erstellen Sie eine neue GUI-Anwendung und fügen Sie ein 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.
  • 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).
  • 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).
  • Rechtsklicken Sie nun auf PopupMenu1, ein PopupMenü erscheint. Klicken Sie auf den ersten Eintrag Menü-Editor.
  • 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.
  • 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.
  • Wir wollen eine bessere Beschriftung als "New Item1". Gehen Sie auf die Caption-Eigenschaft, und geben Sie Laden ein und drücken Sie Enter.
  • 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.
  • 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.
  • Ändern Sie dessen Bezeichnung (Caption) zu Zentriert und Name zu popCenter.
  • Verfahren Sie so weiter mit jedem Menüeintrag, welchen Sie benötigen und schließen Sie am Ende den Menü-Editor.
  • 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.
  • 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.

Ihr 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 (engl. Event) zuweisen, welches dann auf dessen Klicken reagiert.

Nachfolgend wird erklärt, wie Sie die Ereignisse von Menüklicks mit Hilfe des Objektinspektors bearbeiten.

Machen, dass das Menü tatsächlich etwas tut

  • 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 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:
procedure TForm1.popLoadClick(Sender: TObject);
begin
 
end;
  • Zwischen den Anweisungen (Statements) begin und end können Sie nun die Anweisungen für den Menü-Eintrag-Klick Laden einfügen.


In unserem Fall könnten wir ein TOpenDialog-Steuerelement auf die Form einfügen und den Standard-Dialog für unsere Zwecke nutzen:

  • Legen Sie dafür ein TOpenDialog-Steuerelement (Komponentenpalette Dialogs) auf Ihrer Form ab (Name OpenDialog1). Nun ändern Sie Ihre Procedure zu:
procedure TForm1.popLoadClick(Sender: TObject);
begin
  if OpenDialog1.Execute then                            //nur wenn eine Datei gewählt wurde
    try                                                  //versuche
      Image1.Picture.LoadFromFile(OpenDialog1.Filename); //die gewählte Datei nach Image1 zu laden
    except
    end;
end;
  • Analog verfahren Sie mit anderen Menüeinträgen und erstellen deren Eventhandler und fügen Sie folgenden Code ein:
procedure TForm1.popStretchClick(Sender: TObject);
begin
  popStretch.Checked := not popStretch.Checked;  //Markierung vom Menüeintrag an- oder abschalten
  Image1.Stretch := popStretch.Checked;          //Image1 Gestreckt ja / nein
end;
 
procedure TForm1.popCenterClick(Sender: TObject);
begin
  popCenter.Checked := not popCenter.Checked;  //Markierung vom Menüeintrag an- oder abschalten
  Image1.Center := popCenter.Checked;          //Image1 Zentriert ja / nein
end;
  • 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.

Selber aufpoppen

Mö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.

Folgendes Beispiel demonstriert das:

  • Erstellen Sie eine neue GUI-Anwendung und fügen Sie ein TPopupMenu (PopupMenu1) und ein TButton (Button1) Ihrem Formular hinzu.
  • Fügen Sie ein paar Menüeinträge in das PopupMenu1 ein (siehe Erstellen eines PopupMenüs).
  • Generieren Sie den Eventhandler des OnClick-Ereigniss von Button1 und schreiben Sie folgenden Code hinein:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PopupMenu1.PopUp;   //Zeige PopupMenu
end;
  • Starten Sie Ihr Programm, das PopupMenü wird jetzt immer durch den Buttonklick aufgerufen.



Gehe zurück zu: LCL Components  — Komponente zuvor: TMainMenu/de Nächste Komponente: TButton/de
LCL Komponenten
Komponenten Tab Komponenten
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedBtn • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TXMLConfig • TEventLog • TServiceManager
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TCalcEdit • TFileListBox • TFilterComboBox • TXMLPropStorage • TINIPropStorage • TBarChart • TButtonPanel • TShellTreeView • TShellListView • TIDEDialogLayoutStorage
Data Access TDatasource • TBufDataset • TMemDataset • TSdfDataset • TFixedFormatDataSet • TDbf
SynEdit TSynEdit • TSynMemo • TSynCompletion • TSynAutoComplete • TSynMacroRecorder • TSynExporterHTML • TsynPluginSyncroEdit • TSynPasSyn • TSynFreePascalSyn • TSynCppSyn • TSynJavaSyn • TSynPerlSyn • TSynHTMLSyn • TSynXMLSyn • TSynLFMSyn • TSynDiffSyn • TSynUNIXShellScriptSyn • TSynCssSyn • TSynPHPSyn • TSynTeXSyn • TSynSQLSyn • TSynPythonSyn • TSynVBSyn • TSynAnySyn • TSynMultiSyn • TSynBatSyn • TSynIniSyn • TSynPoSyn
LazControls TDividerBevel • TExtendedNotebook • TListFilterEdit • TTreeFilterEdit
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
IPro TIpFileDataProvider • TIpHtmlPanel
Chart TChart • TListChartSource TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection •TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader

--Michl 21:44, 14 May 2014 (CEST)