combobox

hmmm..

vaikee selittää mut meneekö tää ihan oikein:

if combobox1.itemindex=0 then
begin
image1.Visible:=true;
image2.Visible:=false;
image3.Visible:=false;
if combobox1.ItemIndex=1 then
begin
image1.Visible:=false;
image2.Visible:=true;
image3.Visible:=false;
if combobox1.itemindex=2 then
begin
image1.Visible:=false;
image2.Visible:=false;
image3.Visible:=true;


Eli tarkotus olis saada tuosta comboboxien valikoista valittua kuva mutta ku painan ensin ykkos vaihtoehtoa joka siis olettamukseni mukaan on itemindex=0, se kyllä toimii, mutta kun painan sitä kakkos vaihtoehtoo eli itemindex=1 niin ykkös vaihtoehto jää päälle eikä kakkos vaihtoehto tule ollenkaan näkyviin. Ja sama kolmannessa vaihtoehdossa. Eka jää päälle... Noiden kuvien visible on laitettu falseksi..

12

319

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • vieläjotain

      Vielä vähä lisäystä: Ton combobox1:sen Ominaisuuksissa Items kohdassa on lueteltu noi valikoiden nimet eli tällälailla ne on siellä

      Kuva
      Toinen kuva
      Kolmas kuva

      Pitäskö tohon viel jotain laittaA?

      • ----------------

        Eli kokeilin sitä Lazaruksessa ja laitoin tuon koodin vähän täydennettyinä ComboBox:n onChange tapahtumaan (Tuplaklikkaus komponenttimuokkaimessa tapahtumat-välilehdellä tekee tuon tapahtuman rungon ja täydennettynä se on tälläinen:)


        procedure TForm1.ComboBox1Change(Sender: TObject);
        begin
           if combobox1.itemindex=0 then
              begin
                 image1.Visible:=true;
                 image2.Visible:=false;
                 image3.Visible:=false;
              end;
           if combobox1.ItemIndex=1 then
              begin
                 image1.Visible:=false;
                 image2.Visible:=true;
                 image3.Visible:=false;
              end;
           if combobox1.itemindex=2 then
              begin
                 image1.Visible:=false;
                 image2.Visible:=false;
                 image3.Visible:=true;
              end;
        end;


    • ...

      if combobox1.itemindex=0 then
      begin
      image1.Visible:=true;
      image2.Visible:=false;
      image3.Visible:=false; END ELSE
      if combobox1.ItemIndex=1 then
      jne

      tai case combobox1.itemindex of

      0:jne


      end;

      • kuinkakas

        Eli selitän tämän mun ohjelman jotenkin. Eli tarkoitus olisi tehdä ohjelma joka laskee pinta-alan. Kappale jonka pinta-ala lasketaan valitaan comboboxista. Eli jos otan cb:n valinnan 1 ruutuun ilmestyy kuva jossa on neliö. Vieressä on teksti kentät (2) joihin kirjoitaan luvut ja LASKE panikkeella ohjelma laskee pinta-alan teksti kenttään 3. Eli nyt laske painikkeessani on tälläinen ohjelma kirjoitettuna :

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a*b;
        edit3.Text:=floattostr(s);

        Nyt pitäs löytää keino, miten vaihdan tuon s:a*b :n s:a*b/2 :ksi samalla kun painan comboboxin valintaa 2.


        Ohjelman alussa olen esitellyt muuttujat

        var
        Form1: TForm1;
        s,a,b:real;


      • Tälläistäkö ratkaisua haet
        kuinkakas kirjoitti:

        Eli selitän tämän mun ohjelman jotenkin. Eli tarkoitus olisi tehdä ohjelma joka laskee pinta-alan. Kappale jonka pinta-ala lasketaan valitaan comboboxista. Eli jos otan cb:n valinnan 1 ruutuun ilmestyy kuva jossa on neliö. Vieressä on teksti kentät (2) joihin kirjoitaan luvut ja LASKE panikkeella ohjelma laskee pinta-alan teksti kenttään 3. Eli nyt laske painikkeessani on tälläinen ohjelma kirjoitettuna :

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a*b;
        edit3.Text:=floattostr(s);

        Nyt pitäs löytää keino, miten vaihdan tuon s:a*b :n s:a*b/2 :ksi samalla kun painan comboboxin valintaa 2.


        Ohjelman alussa olen esitellyt muuttujat

        var
        Form1: TForm1;
        s,a,b:real;

        Tälläistäkö ratkaisua haet

        procedure TForm1.Button1Click(Sender: TObject);
        var a, b, ala :real;
        begin
           a := StrToFloat( Edit1.Text );
           b := StrToFloat( Edit2.Text );
           case ComboBox1.ItemIndex of
              0 : ala := a * b;
              1 : ala := ( a * b ) / 2;
              else ala := 0;
           end;
           Edit3.Text := FloatToStr( ala );
        end;


    • vihjeitä

      Opettele käyttämään paikallisia muuttujia.

      Eli aliohjelmiin ja funktioihin voi lisätä
      niiden esittelyn jälkeen paikallisten muuttujien esittely

      Tyyliin

      procedure x;
      var r:real;
      begin
      ...
      end;

    • vihjeitä

      Voit lisätä luokkaan (tässä tapauksessa luokka on TForm1) omia metodeita eli aliohjelmia. Luokan aliohjelma esitellään esim. sen Private osassa ja sen toteutus on sitten jäljenpänä (implementation osassa) lisättynä luokan nimellä.

      type
      TForm1 = class(TForm)
      ...
      private
      procedure laske;


      ...
      implementation
      ...

      procedure TForm1.laske;
      var ...
      begin
      ...
      end;



      Voit testata tuolla laske aliohjelmassa mikä ItemIndex on ComboBoxissa valittuna. Aliohjelmaa laske kutsut sitten niissä tapahtumissa missä
      haluat laskemisen tapahtuvan.

      • Delphikoodari..

        Olioita voi upottaa esim. tähän mainittuun TComboBox-komponenttiin.

        var
        munOlio: TOmaLuokka;
        begin
        munOlio := TOmaLuokka.Create();

        cbxMunComboBox.Items.AddObject( munOlio.Otsikko, TObject( munOlio ));
        end;

        // ja pomimalla se sitten sieltä..
        var
        munOlio: TOmaLuokka;
        begin
        index := cbxMunComboBox.ItemIndex;

        munOlio := TOmaLuokka(cbxMunComboBox.Items.Object[index]);

        if Assigned( munOlio ) then
        begin
        munOlio.Terve();
        end;

        end;

        // jne.. kätevää :)




        end;


      • onnistuukos
        Delphikoodari.. kirjoitti:

        Olioita voi upottaa esim. tähän mainittuun TComboBox-komponenttiin.

        var
        munOlio: TOmaLuokka;
        begin
        munOlio := TOmaLuokka.Create();

        cbxMunComboBox.Items.AddObject( munOlio.Otsikko, TObject( munOlio ));
        end;

        // ja pomimalla se sitten sieltä..
        var
        munOlio: TOmaLuokka;
        begin
        index := cbxMunComboBox.ItemIndex;

        munOlio := TOmaLuokka(cbxMunComboBox.Items.Object[index]);

        if Assigned( munOlio ) then
        begin
        munOlio.Terve();
        end;

        end;

        // jne.. kätevää :)




        end;

        Entäs onnistusko sillälailla, että jos kirjoittaisin
        tuohon painonappiin ::

        procedure TForm1.Button2Click(Sender: TObject);
        begin
        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a b;
        edit4.Text:=floattostr(s);

        if combobox1.itemindex=1 then
        begin
        s:=a*b;
        end;


      • Delphikoodari..
        onnistuukos kirjoitti:

        Entäs onnistusko sillälailla, että jos kirjoittaisin
        tuohon painonappiin ::

        procedure TForm1.Button2Click(Sender: TObject);
        begin
        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a b;
        edit4.Text:=floattostr(s);

        if combobox1.itemindex=1 then
        begin
        s:=a*b;
        end;

        En tajua mikä on logiikka tuossa esimerkissä?

        Eli kun painat nappia s := a b, jonka tulos näytetään ja jos jossakin pudotusvalikossa on toinen itemi valittuna s onkin a*b ??

        Tokihan tuo onnistuu, mikäs siinä.


      • combobox
        Delphikoodari.. kirjoitti:

        En tajua mikä on logiikka tuossa esimerkissä?

        Eli kun painat nappia s := a b, jonka tulos näytetään ja jos jossakin pudotusvalikossa on toinen itemi valittuna s onkin a*b ??

        Tokihan tuo onnistuu, mikäs siinä.

        Siis kun valitsen combobxin vaihto ehdon 1(0) LASKE painike laskee

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a b;
        edit3.Text:=floattostr(s);

        Kun valitsen comboboxin vaihtoehdon 2(1) niin LASKE panikse laskisikin

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a*b;
        edit4.Text:=floattostr(s);

        jne..

        Eli miten tuo onnistuisi yksinkertaisimmalla tavalla?


      • korjaus231
        combobox kirjoitti:

        Siis kun valitsen combobxin vaihto ehdon 1(0) LASKE painike laskee

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a b;
        edit3.Text:=floattostr(s);

        Kun valitsen comboboxin vaihtoehdon 2(1) niin LASKE panikse laskisikin

        a:=strtofloat(edit1.text);
        b:=strtofloat(edit2.Text);
        s:=a*b;
        edit4.Text:=floattostr(s);

        jne..

        Eli miten tuo onnistuisi yksinkertaisimmalla tavalla?

        Toi vaihtoehto 2(1) niin ei tietenkään tulisi edit4:ään niin kuin siinä lukee vaan edelleen edit3.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Voiko normaali ihminen ryhtyä vasemmistolaiseksi?

      Tätä jäin pohdiskelemaan.
      Maailman menoa
      203
      4266
    2. SDP haluaa 40 000 nettomaahanmuuttajaa

      SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah
      Maailman menoa
      146
      3798
    3. Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen

      No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat
      Maailman menoa
      137
      3261
    4. Hienoa! Eduskunta luopui käteisen käytöstä

      Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.
      Maailman menoa
      52
      1638
    5. Ikävä sinua mies

      Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i
      Ikävä
      19
      1538
    6. Mikä tämä henkilö mahtaa touhuta Parkanossa

      Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58
      Parkano
      34
      1490
    7. Sulla on avaimet ja keinot

      Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi
      Ikävä
      25
      1395
    8. Orpo loukkaantui fasismiin viittaavasta sanavalinnasta

      Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk
      Maailman menoa
      27
      1351
    9. Kiinnostaa - ei kiinnosta - kiinnostaapas

      Selittäkää hämmentyneelle miksi miehiä ei ikinä kiinnosta silloin, kun sitä olisi itsekin kiinnostunut? Sitten kun siirt
      Sinkut
      117
      1165
    10. Martina haluaa Marbellaan

      Martinan tekisi mieli ottaa lennot Marbellaan, jossa näkisisi kauniita ja hyväntuulisia ihmisiä. No sitten pitää matkust
      Kotimaiset julkkisjuorut
      215
      1063
    Aihe