TPopupMenu/fi

From Free Pascal wiki
Revision as of 11:11, 1 March 2020 by Trev (talk | contribs) (Fixed syntax highlighting)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

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

TPopupMenu tpopupmenu.png on ponnahdusvalikko, joka avautuu työpöydälle, kun kohteen päällä klikataan hiiren kakkospainikkeella.

Se on ns. näkymätön komponentti: eli jos kuvake on valittu Komponentti-paletin Standard-välilehdeltä ja asetettu lomakkeelle, se ei tule näkyviin ajonaikana ennenkuin kohteen päällä klikataan hiiren kakkospainiketta jolloin näkyviin tulee valikkorakenne joka on sille määritelty.

Valikkomuokkaimeen pääsee ponnahdusvalikon kuvaketta klikkaamalla hiiren kakkospainikkeella lomakkeella.


Ponnahdusvalikon tekeminen

Seuraavassa vaiheessa nähdään kuinka voidaan antaa ponnahdusvalikko komponentille lomakkeella:

  • Luodaan uusi GUI sovellus ja tuodaan TImage-komponentti lomakkeelle. Tämä voidaan tehdä niin että valitaan TImage komponenttipaletin Additional-välilehdeltä ja klikataan se lomakkeelle. Näin TImage tulee lomakkeelle Image1-nimellä.
  • Komponenttimuokkaimessa (jossa on valittuna Image1) ja sen ominaisuudet välilehdellä valitaan Align ominaisuus. Asetetaan align arvoon alClient (niin Image1 säätyy koko lomakkeen kokoiseksi).
  • Sen jälkeen laitetaan TPopupMenu (komponentti standard-välilehdeltä)lomakkeelle . PopupMenu1- niminen komponentti näkyy lomakkeella (neliömäinen kuvake, jossa näkyvät pudotusvalikot ja komponentin nimi).
  • Klikkaa hiiren kakkospainikkeella "PopupMenu1", ponnahdusvalikko tulee esiin. Klikkaa ensimmäistä kohtaa Valikkomuokkainta.
  • Valikkomuokkain ikkuna avautuu. Siinä ei vielä ole yhtään kohtaa. Klikkaamalla "Lisää valikon kohta" saadaan luotua kohta MenuItem1. Todennäköisesti se halutaan vaihtaa, klikataan sitä ja siirrytään komponenttimuokkaimeen.
  • Määritetään komponenttimuokkaimessa Name ominaisuuden arvo "MenuItem1" kuvaavammaksi. Tämä on lataus, joten vaihdetaan Name ominaisuus kirjoittamalla popLoad siihen ja painamalla Enter.
  • Myös ponnahdusvalikon tässä kohtaa näytettävä teksti voisi olla parempi joten siirrytään Caption ominaisuuteen ja kirjoitetaan sinne Load ja painetaan Enter.
  • Vielä halutaan luoda yksi valikkomerkintä. Palataan Valikkomuokkain-ikkunaan. Klikkaa hiiren kakkospainikkeella Lataa. Ponnahdusvalikko tulee näkyviin. Klikkaa "Lisää uusi kohta alle" ja syntyy uusi valikon kohta. Kuten kahdessa edellisessä kohdassa on selitetty niin vaihdetaan komponenttimuokkaimessa samalla tavoin Name ominaisuus popStretch ja Caption ominaisuus arvoon Stretched.
  • Tehdään vielä yksi ponnahdusvalikkomerkintä. Se onnistuu valikkomuokkaimessa. Klikataan hiiren kakkospainikkeella kohtaa Load ja klikataan "Lisää uusi kohta alle" tai klikataan hiiren kakkospainikkeella kohtaa Stretched ja klikataan Lisää uusi kohta yläpoulelle. Näin saadaan ponnahdusvalikon keskelle uusi kohta.
  • Vaihdetaan uuden ponnahdusvalikon kohdan Caption arvoksi Centered ja Name ominaisuus arvoon popCenter.
  • Kun on lisätty kaikki valikonkohdat, niin on vielä määritettävä, mihin komponenttiin sen pitäisi liittyä. Tässä tapauksessa pitäisi olla TImage:n Image1 , mikä on jo alussa asetettu lomakkeella.
  • Valitaan lomakkeella Image1 ja siirrytään komponenttimuokkaimessa sen PopupMenu- ominaisuuteen. Siinä, valitaan yhdistelmäruudusta (combobox) arvo PopupMenu1.
  • Sovellusohjelman ajon aikana ponnahdusvalikko tulee aina näkyviin, jos klikataan kuvaa hiiren kakkospainikkeella.

Nyt kaikki tämä saa aikaan ponnahdusvalikon, joka näkyy sovelluksen ajon aikana ja antaa käyttäjälle mahdollisuuden klikata ponnahdusvalikon eri kohtia. Se ei kuitenkaan todellisuudessa tee mitään. Jos halutaan, että valikon eri kohdat tekevät jotain, niin on lisättävä tapahtuma jokaiselle valikon kohdalle, joka reagoi klikkaamiseen.

Seuraavaksi selitetään, miten valikkoklikkausten tapahtumia tehdään ja muokataan komponenttimuokkaimen avulla.

Laitetaan ponnahdusvalikko tekemään jotakin

  • Palataan takaisin valikkomuokkaimeen (niin että "PopupMenu1" on valittuna komponenttimuokkaimessa) ja valitaan kohta 'Load. Nyt voidaan valita hiiren kakkospainikkeen tuomasta valikosta "Lisää OnClick käsittelijä" tai siirtyä komponenttimuokkaimeen ja valita välilehti "Tapahtumat". Se ainoa tapahtuma, jota haluataan todella muuttaa, on OnClick , joka on tällä hetkellä tyhjä. Jos valmiina on sopiva tapahtumankäsittelyrutiini niin sitä voidaan käyttää ja valita se, muuten voidaan luoda tapahtuman käsittelijän "kehykset" Lazaruksen avulla. Oikealla puolella on 3 pisteen painike .... Klikataan sitä ja uusi aliohjelma luodaan koodiin ja näkymä muuttuu lähdekoodieditoriksi. Aliohjelman runko näyttää jotain tällaista:
procedure TForm1.popLoadClick(Sender: TObject);
begin

end;
  • Lauseiden begin ja end väliin lisätään ohjelmakoodi mitä tehdään kun ohjelman käyttäjä klikkaa ponnahdusvalikon kohtaa Load. Tässä tapauksessamme voidaan lisätä lomakkeelle TOpenDialog-komponentti ja käyttää sitä valitsemaan kuvan:
  • Laita TOpenDialog komponentti (löytyy komponenttipaletin Dialogs-välilehdeltä) lomakkeelle, Nimetään se OpenDialog1:ksi (joka on oletusarvo). Muutetaan edellä esitetty aliohjelma tälläiseksi:
procedure TForm1.popLoadClick(Sender: TObject);
begin
  if OpenDialog1.Execute then                            //only if a file is selected
    try                                                  //try
      Image1.Picture.LoadFromFile(OpenDialog1.Filename); //to load that file
    except
    end;
end;
  • Tehdään vastaavat työt muille ponnahdusvalikon kohdille ja täydennetään niiden tapahtumankäsittelijän koodit seuraavanlaiseksi:
procedure TForm1.popStretchClick(Sender: TObject);
begin
  popStretch.Checked := not popStretch.Checked;  //mark/checked on/off
  Image1.Stretch := popStretch.Checked;          //Image1 streched yes/no
end;

procedure TForm1.popCenterClick(Sender: TObject);
begin
  popCenter.Checked := not popCenter.Checked;  //mark/checked on/off
  Image1.Center := popCenter.Checked;          //Image1 center yes/no
end;
  • Nyt voidaan testata tätä ohjelmaa painamalla F9, avaa ponnahdusvalikko hiiren kakkosnäppäimen klikkauksella ja valitse Load. Lataa nyt haluamasi kuva. Kun olet ladannut kuvan, kokeile muita valikkokohtia.

Ponnahdusvalikko omalla tavalla

Voi olla että ponnahdusvalikko halutaan näyttää jollain muulla tavalla. Se voidaan toteuttaa PopupMenu.PopUp.

Yksinkertainen esimerkki:

  • Luo uusi GUI-sovellus ja lisätään lomakkeelle TPopupMenu PopupMenu1 ja TButton Button1 .
  • Aseta muutamia valikkokohteita PopupMenu1: een
  • Luodaan tapahtumakäsittelijä Button 1: n OnClick-tapahtumasta ja täydennetään koodi seuraavanlaiseksi:
procedure TForm1.Button1Click(Sender: TObject);
begin
  PopupMenu1.PopUp;   //Näytä ponnahdusvalikko
end;
  • Käynnistä ohjelma, ponnahdusvalikko kutsutaan klikkaamalla painiketta.

Katso myös


LCL Components
Component Tab Components
Standard TMainMenu • TPopupMenu • TButton • TLabel • TEdit • TMemo • TToggleBox • TCheckBox • TRadioButton • TListBox • TComboBox • TScrollBar • TGroupBox • TRadioGroup • TCheckGroup • TPanel • TFrame • TActionList
Additional TBitBtn • TSpeedButton • TStaticText • TImage • TShape • TBevel • TPaintBox • TNotebook • TLabeledEdit • TSplitter • TTrayIcon • TControlBar • TFlowPanel • TMaskEdit • TCheckListBox • TScrollBox • TApplicationProperties • TStringGrid • TDrawGrid • TPairSplitter • TColorBox • TColorListBox • TValueListEditor
Common Controls TTrackBar • TProgressBar • TTreeView • TListView • TStatusBar • TToolBar • TCoolBar • TUpDown • TPageControl • TTabControl • THeaderControl • TImageList • TPopupNotifier • TDateTimePicker
Dialogs TOpenDialog • TSaveDialog • TSelectDirectoryDialog • TColorDialog • TFontDialog • TFindDialog • TReplaceDialog • TTaskDialog • TOpenPictureDialog • TSavePictureDialog • TCalendarDialog • TCalculatorDialog • TPrinterSetupDialog • TPrintDialog • TPageSetupDialog
Data Controls TDBNavigator • TDBText • TDBEdit • TDBMemo • TDBImage • TDBListBox • TDBLookupListBox • TDBComboBox • TDBLookupComboBox • TDBCheckBox • TDBRadioGroup • TDBCalendar • TDBGroupBox • TDBGrid • TDBDateTimePicker
Data Access TDataSource • TCSVDataSet • TSdfDataSet • TBufDataset • TFixedFormatDataSet • TDbf • TMemDataset
System TTimer • TIdleTimer • TLazComponentQueue • THTMLHelpDatabase • THTMLBrowserHelpViewer • TAsyncProcess • TProcessUTF8 • TProcess • TSimpleIPCClient • TSimpleIPCServer • TXMLConfig • TEventLog • TServiceManager • TCHMHelpDatabase • TLHelpConnector
Misc TColorButton • TSpinEdit • TFloatSpinEdit • TArrow • TCalendar • TEditButton • TFileNameEdit • TDirectoryEdit • TDateEdit • TTimeEdit • TCalcEdit • TFileListBox • TFilterComboBox • TComboBoxEx • TCheckComboBox • TButtonPanel • TShellTreeView • TShellListView • TXMLPropStorage • TINIPropStorage • TJSONPropStorage • TIDEDialogLayoutStorage • TMRUManager • TStrHolder
LazControls TCheckBoxThemed • TDividerBevel • TExtendedNotebook • TListFilterEdit • TListViewFilterEdit • TLvlGraphControl • TShortPathEdit • TSpinEditEx • TFloatSpinEditEx • TTreeFilterEdit • TExtendedTabControl •
RTTI TTIEdit • TTIComboBox • TTIButton • TTICheckBox • TTILabel • TTIGroupBox • TTIRadioGroup • TTICheckGroup • TTICheckListBox • TTIListBox • TTIMemo • TTICalendar • TTIImage • TTIFloatSpinEdit • TTISpinEdit • TTITrackBar • TTIProgressBar • TTIMaskEdit • TTIColorButton • TMultiPropertyLink • TTIPropertyGrid • TTIGrid
SQLdb TSQLQuery • TSQLTransaction • TSQLScript • TSQLConnector • TMSSQLConnection • TSybaseConnection • TPQConnection • TPQTEventMonitor • TOracleConnection • TODBCConnection • TMySQL40Connection • TMySQL41Connection • TMySQL50Connection • TMySQL51Connection • TMySQL55Connection • TMySQL56Connection • TMySQL57Connection • TSQLite3Connection • TIBConnection • TFBAdmin • TFBEventMonitor • TSQLDBLibraryLoader
Pascal Script TPSScript • TPSScriptDebugger • TPSDllPlugin • TPSImport_Classes • TPSImport_DateUtils • TPSImport_ComObj • TPSImport_DB • TPSImport_Forms • TPSImport_Controls • TPSImport_StdCtrls • TPSCustomPlugin
SynEdit TSynEdit • 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
Chart TChart • TListChartSource • TRandomChartSource • TUserDefinedChartSource • TCalculatedChartSource • TDbChartSource • TChartToolset • TChartAxisTransformations • TChartStyles • TChartLegendPanel • TChartNavScrollBar • TChartNavPanel • TIntervalChartSource • TDateTimeIntervalChartSource • TChartListBox • TChartExtentLink • TChartImageList
IPro TIpFileDataProvider • TIpHtmlDataProvider • TIpHttpDataProvider • TIpHtmlPanel
Virtual Controls TVirtualDrawTree • TVirtualStringTree • TVTHeaderPopupMenu