TComboBox/fi

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) suomi (fi) français (fr)

TComboBox (yhdistelmäruutu) tcombobox.png on yhdistelmä tekstin muokkausruudusta ja (avattavasta) luettelosta josta mahdollista valita yksi monista vaihtoehdoista.

Käyttö

Jos halutaan käyttää TComboBox lomakkeella, niin se voidaan valita yksinkertaisesti komponenttipaletin Standard-välilehdeltä ja sijoittaa haluttuun paikkaan klikkaamalla lomaketta.

TComboBox:n merkkijonot (string) on tallennettu Items ominaisuuteen. Se on TStrings tyyppiä. Täten voidaan liittää ja poistaa yhdistelmäruudun merkkijonoja kuten TStringList:sä tai sen vanhemmassa TStrings


Seuraavassa on muutamia esimerkkejä käyttää yhdistelmäruutua ComboBox1 lomakkeella Form1:


ComboBox:n täyttö

Komponettimuokkaimella

  • Valitse ComboBox lomakkeella yhdellä napsautuksella.
  • Mene komponenttimuokkaimessa on Properties-välilehden ominaisuuteen Items.
  • Napsauta painiketta, jossa on kolme pistettä. Merkkijonojen muokkain avautuu.
  • Kirjoita teksti ja vahvista tekemäsi työ OK-painikkeella.

Koodilla lomakkeen luonnin yhteydessä

  • Luo onCreate tapahtumakäsittelijä lomakkeelle, klikkaa lomaketta, komponenttimuokkaimessa klikkaa tapahtumat-välilehteä, valitse onCreate tapahtumaa ja klikkaa painiketta [...]. Tai vaihtoehtoisesti tuplaklikkaa lomakketta.
  • Täydennä lähdekoodi editorissa muodostunutta FormCreate raamia esimerkiksi seuraavanlaisella tekstillä:
procedure TForm1.FormCreate(Sender: TObject);  
begin
  ComboBox1.Items.Clear;             //Poista kaikki olemassa olevat vaihtoehdot
  ComboBox1.Items.Add('Red');        //Lisätään vaihtoehto
  ComboBox1.Items.Add('Green');
  ComboBox1.Items.Add('Blue');
  ComboBox1.Items.Add('Random Color');  
end;

Tee, että jotain tapahtuu valinnan jälkeen

Kuten kaikki komponentit, niin TComboBox tarjoaa erilaisia ​​tapahtumia , joita kutsutaan, kun käyttäjä käyttää yhdistelmäruutua. Vastatakseen yhdistelmäruudun muutosvalintaan, niin siihen voidaan käyttää OnChange tapahtumaa:

  • Tuplaklikkaa yhdistelmäruutua lomakkeella tai valitse OnChange tapahtuma komponenttimuokkaimessa ja klikkaa painiketta [...].
  • Tapahtumakäsittelijän raami on nyt luotu, nyt voidaan lisätä haluttu lähdekoodi, tässä esimerkissä halutaan vaihtaa taustaväriä lomakkeella:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case ComboBox1.ItemIndex of  // Tarkistetaan minkä kohdan ohjelman käyttäjä on valinnut
    0: Color:=clRed;
    1: Color:=clGreen;
    2: Color:=clBlue;
    3: Color:=Random($1000000);
  end;
end;
  • Suorita sovellus, valinta muuttaa lomakkeen taustavärin.

Oma piirretty yhdistelmäruutu

Yleensä on edullista antaa yhdistelmäruudun näyttää teemaa jonka käyttäjä on valinnut hänen asetuksilla. Joissakin tapauksissa (esimerkiksi jos ohjelmoidaan värikäs peli), voidaan poiketa tästä standardista ja piirtää oman valinnan mukaan. Näin tämä toimii:

Light bulb  Huomaa: ComboBoxDrawItem parametrit:

Control:
Jos useilla olioilla (esimerkiksi useita yhdistelmäruutuja)on pääsy tähän tapahtumaan, tiedetään mikä olio aiheutti tapahtuman. Esimerkiksi esimerkissä ComboBox1.Canvas.FillRect(ARect)sijasta käytetään TComboBox(Control).Canvas.FillRect(ARect). Kuitenkin olisi hyvä silti tarkistaa että tapahtuman aiheutti TComboBox-luokka:

  if Control is TComboBox then
    TComboBox(Control).Canvas.FillRect(ARect);

Index: Määrittää kohteen sijainnin, joten voit käyttää merkkijonoa <ComboBox>.Items[Index].
ARect: Määrittää suorakulmion joka on tarpeen taustan piirtämisessä.
State: Kohteen tila, onko normaali, keskittynyt, valittu jne

Täytetyn suorakulmion piirtäminen

  • Käytä pohjana edellä esitettyä esimerkkiä "Täytä yhdistelmäruutu koodilla lomakkeen luonnin yhteydessä".
  • Vaihda komponenttimuokkaimessa ComboBox1:n ominaisuus Style arvoon csOwnerDrawFixed.
  • Luodaan komponenttimuokkaimessa OnDrawItem-tapahtuman tapahtumakäsittelijä, klikkaamalla painiketta [...].
  • Täydennä kyseinen tapahtuman koodi seuraavanlaiseksi:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var
  ltRect: TRect;

  procedure FillColorfulRect(aCanvas: TCanvas; myRect: TRect);              //Piirretään satunnaisella värillä
  // Fills the rectangle with random colours
  var
    y: Integer;
  begin
    for y:=myRect.Top to myRect.Bottom - 1 do begin
      aCanvas.Pen.Color:=Random($1000000);
      aCanvas.Line(myRect.Left, y, myRect.Right, y);
    end;
  end;

begin
  ComboBox1.Canvas.FillRect(ARect);                                         //Ensin piirretään normaali tausta
  ComboBox1.Canvas.TextRect(ARect, 22, ARect.Top, ComboBox1.Items[Index]);  //Piirretään kyseisen kohdan teksti 

  ltRect.Left   := ARect.Left   + 2;                                        //värin suorakulmio
  ltRect.Right  := ARect.Left   + 20;
  ltRect.Top    := ARect.Top    + 1;
  ltRect.Bottom := ARect.Bottom - 1;

  ComboBox1.Canvas.Pen.Color:=clBlack;
  ComboBox1.Canvas.Rectangle(ltRect);                                       //Piirretään kehys 

  if InflateRect(ltRect, -1, -1) then                                       //muutetaan suorakulmion kokoa yhdellä pikselillä 
    if Index = 3 then
      FillColorfulRect(ComboBox1.Canvas, ltRect)                            //Piirretään satunnaisella värillä
    else begin
      case Index of
        0: ComboBox1.Canvas.Brush.Color := clRed;
        1: ComboBox1.Canvas.Brush.Color := clGreen;
        2: ComboBox1.Canvas.Brush.Color := clBlue;
      end;
      ComboBox1.Canvas.FillRect(ltRect);                                    //Piirretään annetulla värillä
    end;
end;
  • Tältä tämä esimerkki voisi näyttää:

ComboBoxBsp1.png -> ComboBoxBsp2.png

Lisätään kuva

Tässä esimerkissä ladataan muutamia kuvia TImageList-komponentista ja piirretään ne yhdistemäruudun valittavien kohteiden eteen. Tämä on vain yksinkertainen esimerkki, joka vain yleisesti näyttää, mitä voit tehdä. I don't run explicitly details, such as checking, whether the corresponding image exists etc. in this example. This should be done by you depending on the need.

  • Käytä pohjana aikaisemmin esitettyä esimerkkiä "Täytä yhdistelmäruutu koodilla lomakkeen luonnin yhteydessä".
  • Vaihda komponenttimuokkaimessa ComboBox1:n ominaisuus Style arvoon csOwnerDrawFixed.
  • Lisää TImageList komponenttipaletin Common controls-välilehdeltä lomakkeelle.
  • Height (korkeus) ja Width (leveys) on esiasetettu 16 pikseliin ImageList1:llä oletuksena. Tähän se on hyvä oletusasetus. Jotta kuvat tulevat "siististi" asetetaan yhdistelmäruudun ComboBox1 ominaisuus ItemHeight arvoon 18 komponenttimuokkaimessa.
  • Lisätään neljä kuvaa ImageList-komponenttiin:
    • Tuplaklikkaa ImageList1:ä tai klikkaa hiiren vasenta näppäintä ImageList1-koponentin päällä ja valitse Kuvaluettelon muokkain....
    • Klikkaa Lisää... ja valitse kuva (katso <Lazarus directory>/images/... siellä on erilaisia kuvia tai kuvakkeita 16x16 pikselin kokoisena).
    • Kun on lisätty neljä kuvaa, vahvista se [OK]-painikkeella.
  • Luodaan komponenttimuokkaimessa OnDrawItem-tapahtuman tapahtumakäsittelijä, klikkaamalla painiketta [...].
  • Täydennä kyseinen tapahtuman koodi seuraavanlaiseksi:
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
begin
  ComboBox1.Canvas.FillRect(ARect);                                         //Ensin piirretään normaali tausta
  ComboBox1.Canvas.TextRect(ARect, 20, ARect.Top, ComboBox1.Items[Index]);  //Piirretään kyseisen kohdan teksti 
  ImageList1.Draw(ComboBox1.Canvas, ARect.Left + 1, ARect.Top + 1, Index);  //Piirretään indeksin mukainen kuva
end;
  • Tältä tämä esimerkki voisi näyttää:

ComboBoxBsp1.png -> ComboBoxBsp3.png

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