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

255

    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. Terveystalo paljasti yksityisen sairaanhoidon empatia puutteet

      Yksityisellä puolella raha ratkaisee, jos ei ole rahaa potilas ei saa empatiaa eikä siten apuakaan: Poliisi teki rikosi
      Maailman menoa
      161
      1692
    2. Ehdin aamulla

      ajattelemaan sinua. Olit ensimmäisenä mielessäni. Avasin silmäni tähän uneen, jota elämäksi kutsutaan. Kuuntelin lintuje
      Ikävä
      139
      1255
    3. Puhuuko Orpo niin totta kuin osaa?

      Vai osaisiko "en muuta keksinyt" -Orpo edes vähän paremmin puhua totta? https://www.iltalehti.fi/politiikka/a/f8d5241f-
      Maailman menoa
      249
      1213
    4. Mä todella toivon että

      Sulla on nyt kaikki hyvin sun elämässä, olet sisukas nainen sen näki jo ensimmäisestä hetkestä.
      Ikävä
      36
      1017
    5. Laita viestiä?

      Sitten kun on sinulle hyvä hetki, minä odotan. Jotain jäi kesken ja haluan viedä sen loppuun 😘
      Ikävä
      61
      892
    6. Olen ollut pois täältä neljä kuukautta

      Neljä kuukautta sitten olin tosiaan psykoottinen, ja jouduinkin osastolle hoidettavaksi kahdeksi kuukaudeksi. Ystävyys-
      Ikävä
      172
      889
    7. Naiselle kysymys

      Oletko rakastunut minuun?
      Ikävä
      62
      858
    8. Katselimme pitkään ja se merkitsi minulle paljon

      Sinulle se ei merkannut näköjään mitään.
      Ikävä
      41
      796
    9. Sun pitää mies unohtaa

      Minut jo. Tiedän että se on sulle tosi hankalaa. Mut sun pitää unohtaa mut jo. Älä kirjoita mulle tänne viestejä enää.
      Ikävä
      53
      721
    10. Ymmärräthän, että sun katkeruus ajaa mut pois

      Sä olet niin itseriittoinen, ettet edes tajua mitä myrkkyä suollat ympärillesi. Olet harhaisessa päässäsi kuvittellut et
      Ikävä
      39
      695
    Aihe