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

325

    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. Jaaha, sitä on vasemmistoryhmä käynyt häiriköimässä Purran kodin vieressä

      On näköjään iso lakana levitetty puiden väliin, jossa lukee mm. "Haista vi*** Riikka Purra". Tunkekaa leikkaukset pers..
      Maailman menoa
      186
      6276
    2. Päivi Räsänen vs. Abbas Bahmanpour

      (Bahmanpour on imaami Helsingissä) Syyttäjä siis jahtaa edelleen Räsästä tämän H-puheista, joissa hän on ilmeisesti vaa
      Maailman menoa
      65
      4753
    3. Demokratian uhka: Perussuomalaiset ja polarisoiva "me ja muut" -ajattelu

      Laurence Rees varoittaa, kuinka demokratian heikkeneminen ja autoritaaristen liikkeiden nousu voidaan liittää "me ja muu
      Maailman menoa
      92
      4571
    4. Mistä kummasta voi johtua se, että vasemmistolaiset usein häpeää itseään

      voiko se johtua esim. köyhyydestä? Ja tästä on siis ihan suomalainen tutkimus olemassa. "Suomalainen tutkimus osoittaa
      Maailman menoa
      73
      4323
    5. Palkansaajan oikeus nauttia työuransa hedelmistä

      Työeläkejärjestelmä on verrattavissa pyramidihuijaukseen, jossa alemmat tasot, eli nykyiset palkansaajat, toimivat maksa
      Maailman menoa
      85
      2759
    6. En koskaan tule sinulle tätä kertomaan

      Kun kirjoitin sinulle viimeisintä viestiä, huomasin kyynelten valuvan poskiani pitkin.
      Ikävä
      62
      2225
    7. Saatoin tehdä elämäni isoimman virheen

      Otsikko kertoo kaiken. Miksei kaikki voi olla yksinkertaisempaa?
      Ikävä
      132
      1691
    8. odotatko vielä viestiä minulta...

      Mies...? En tiedä mitä sanoa 😔 auta vähän naista ja tule enemmän vastaan
      Ikävä
      139
      1624
    9. Joroinen räjähdys

      Ja siellä räjähti sähköpakettiauto,joka teki suuret tuhot.
      Hybridi- ja sähköautot
      54
      1568
    10. Kova ikävä parittelukumppania täällä korvessa

      Mutta muuten kyllä on rauhallista.
      Ikävä
      38
      1385
    Aihe