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

316

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

      31-vuotias Suomussalmella asuva mies epäiltynä murhasta, aikaisemmin kontolla pahoinpitelyjä. Ken lie kyseessä ja kuka u
      Suomussalmi
      45
      4332
    2. A miehelle :)

      Oli mukava näkeminen taas eilen. Olisinpa tänäänkin nähnyt sut. Harmi ettei tunneta kunnolla. Ja etten voi saada su
      Ikävä
      36
      2258
    3. Jos hän olisi luonasi nyt

      mistä haluaisit jutella kaivattusi kanssa?
      Ikävä
      159
      1628
    4. Kiantaman johtaja Vernu Vasunta !

      Kolmeksi ja puoleksi vuodeksi vankilaan ja neljäksi vuodeksi liiketoiminta kieltoon,että silleen Kiantalaiset!!!!
      Suomussalmi
      35
      1500
    5. Kansanedustajien palkkioihin roimat korotukset

      Kansanedustajien palkkiot nousevat lokakuun alussa sadoilla euroilla, kertoo eduskunnan palkkiotoimikunta. Ensimmäisen
      Maailman menoa
      167
      1454
    6. Joko sä olet aivan totaalisen rakastunut

      Tai sitten sulla on joku hätänä. Kaikkeni lähestulkoon yrittänyt että perääntyisit mutta ei 😄
      Ikävä
      81
      1287
    7. Keskisarja todettiin rasistiksi

      Yhdenvertaisuusvaltuutetun mukaan Keskisarjan lausunnot Ylen A-Studiossa viime viikolla täyttävät rasismin määritelmän
      Maailman menoa
      376
      1195
    8. Mitähän tapahtuisi?

      Jos meidät tiputettaisiin tunniksi samaan huoneeseen kaksin? 😏
      Ikävä
      104
      1134
    9. En halua miestä joka

      Havisee kuin haavan lehti kakat housussa eikä uskalla ottaa ohjia ja lähestyä naista. Niin kuin miehen kuuluu tehdä, oll
      Ikävä
      217
      1071
    10. Olitkohan koskaan

      yhtä optimistinen kuin minä siitä, että jonain päivänä olisimme vielä yhdessä? Vai uskoinkohan minä yksinäni siihen, jos
      Ikävä
      89
      988
    Aihe