Wiki-kopiopeilipalvelin

Tämä on pascal.chatin wikin peilipalvelin. Muokkaus, historia ja kirjautuminen ovat siellä.

TComboBox/fi

Deutsch · English · Español · Français · Suomi · 日本語

TComboBox (yhdistelmäruutu) 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

Koodilla lomakkeen luonnin yhteydessä

pascal
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:

pascal
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;

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:

Note: 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:

pascal
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

pascal
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;

->

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.

pascal
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;

->

Katso myös


From the Free Pascal wiki, page "TComboBox/fi", as it stood on 2020-02-29 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.

Versio 1, viimeksi muokannut WikiArchive .