combobox

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..
12361
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

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?

Äänestä
  • 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;

    Äänestä

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;

Äänestä
  • 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;

    Äänestä

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

    Äänestä

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;

Äänestä

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.

Äänestä
  • 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;

    Äänestä

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

    Äänestä

  • 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ä.

    Äänestä

  • 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?

    Äänestä

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

    Äänestä

Kommentoi aloitusta


hmmm.. kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu