Delphi - kilka radiobuttonów pod jednym przyciskiem

0

Witam,

zmagam się z pracą na zaliczenie przedmiotu i mam problem z odpowiednim podpięciem dwóch radiobuttonów pod jeden przycisk.

Opiszę jak to wygląda:

user image

Wpisujemy kwotę, wybieramy czy chcemy ją przeliczyć na netto, czy brutto, następnie klikamy wysokość podatku, klikamy przycisk i wyskakuje nam obliczona wartość.

Dla wartości 8% stworzyłem ten kod - wszystko działa, zarówno netto jak i brutto. Natomiast nie wiem jak wpisać kod dla wartości 23%, żeby nie kłóciła się z pierwszym radiobuttonem. Na razie wszelkie próby skutkowały zakreśleniem na czerwono linijki z procedure lub obliczaniem podatku 23% mimo wybrania opcji 8%...

Obecnie tak wygląda mój kod:

 procedure TForm1.Button1Click(Sender: TObject);
var
 x,y: Currency;
begin
 if ComboBox1.Text = ('brutto')then
 begin
 if RadioButton1.Checked then
  y:= StrToCurr(Edit1.Text);
  x:= y*1.08;
  Edit2.Text :=CurrToStr(x);
 end;
  begin
 if ComboBox1.Text = ('netto')then
 begin
 if RadioButton1.Checked then
  y:= StrToCurr(Edit1.Text);
  x:= y/1.08;
  Edit2.Text :=CurrToStr(x);
 end;

end;
end;

Zapewne mam wstawić coś takiego (np. dla netto):

  begin
 if RadioButton2.Checked then
  y:= StrToCurr(Edit1.Text);
  x:= y/1.23;
  Edit2.Text :=CurrToStr(x);
 end;

ale gdzie to wstawić i może oddzielić jakimś "else" itp ?

Próbowałem szukać odpowiedzi w necie, ale do tego konkretnego przypadku nie pasowały...

Bardzo proszę o pomoc i z góry dziękuję.

0

Po primo nie robisz wcięć jak należy i w ten sposób nie możesz zapanować nad zrozumieniem kodu
tak to wygląda u ciebie:

 
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y: Currency;
begin
  if ComboBox1.Text = ('brutto')then
  begin
    if RadioButton1.Checked then // jeśli jest zaznaczone VAT 8%
      y:= StrToCurr(Edit1.Text); // to pobierasz kwotę do zmiennej y a jeśli nie jest zaznaczony to w y będzie 0
    x:= y*1.08;   //jeśli nie było nic zaznaczone albo jest zaznaczone VAT 23% to i tak y będzie ZERO
    Edit2.Text :=CurrToStr(x);
  end;
  
  begin // po co ten begin?
  
    if ComboBox1.Text = ('netto')then
    begin
      if RadioButton1.Checked then // jeśli jest zaznaczone VAT 8% (może lepiej dla odmiany sprawdzić czy jest zaznaczone 23% co?)
        y:= StrToCurr(Edit1.Text); //pobierasz kwotę do y
      x:= y/1.08;      //i tu podobnie jak wyżej albo podzielisz 0 na 1.08 czyli 0 albo otrzymasz kwotę z dupy bo może wytłumaczysz w tym miejscu co chciałeś policzyć?
      Edit2.Text :=CurrToStr(x);
    end;
   
  end; // i po co do pary end?
end;

Kwota netto to kwota bez żadnych podatków czyli po prostu przepisujesz więc po jakiego grzyba sprawdzasz jeszcze RadioButton od procentów?
napisz może jakich wyników spodziewasz się po zaznaczeniu poszczególnych opcji na przykładowej kwocie. Bo ja tu widzę problem zaczynając od braku w zrozumieniu podstaw programowania - jak działa if do czego służy blok begin...end a na podstawach matematyki kończąc.

0

Dzięki za odpowiedź.

Zadanie zostało wyznaczone przez prowadzącego zajęcia.
Zasada tego programu jest prosta.

  1. Wpisuję kwotę netto, wybieram opcję, że chcę ją przeliczyć na brutto, klikam wysokość podatku i wychodzi mi wynik.
  2. Wpisuję kwotę brutto, wybieram opcję, że chcę ją przeliczyć na netto, klikam wysokość podatku i wychodzi mi wynik.

Czy z tego opisu da się już zrozumieć, do czego ten program ma służyć ?
Tutaj link do programu stworzonego przez prowadzącego http://uz.zgora.pl/~gpajak/materials/tp02/projekty-ns/prj01-2.zip - tylko tu działa nieco na odwrót. Po kliknięciu brutto przelicza kwotę na netto.

Jest to pierwszy program jaki piszę w życiu i szczerze mówiąc nie do tego jestem stworzony. Programowanie na moim kierunku i specjalności to jakaś pomyłka, u mnie w firmie mam od tego informatyków pod sobą. Więc program "piszę" po to, żeby zaliczyć przedmiot. Niestety, suche wykłady nie wystarczają, a ćwiczeń nie mieliśmy. Mamy napisać program i już.

0
pasek888 napisał(a)

Czy z tego opisu da się już zrozumieć, do czego ten program ma służyć ?

Możliwe, że tak;

Popatrz, czy taki ma być wynik dla podanych danych?

Wnd.png

Bo mi się wydaje, że wartość netto z kwoty 100zł (dla podatku w wysokości 22%) to 78zł, a nie 81,97zł;
Albo ja nie umiem liczyć, albo ten Twój mentor powinien sam się wziąć za naukę...

0

masz mniej więcej po twojemu.
heh sam się dałem złapać xD

var
  kwota stawkaVAT: Currency;
begin

  //stawkę trzeba policzy dla każdej sytuacji
  if (RadioButton1.Checked) then
    stawkaVAT := 0.08
  else if (RadioButton2.Checked) then
    stawkaVAT := 0.23
  else
    stawkaVAT := 0.0; // domyslnie jesli nic nie zaznaczone 0

  //kwotę trzeba też zawsze pobrac
  kwota := StrToCurr(Edit1.Text);

  if ComboBox1.Text = ('brutto')then
    Edit2.Text :=CurrToStr(kwota * (1+stawkaVAT) );

  if ComboBox1.Text = ('netto')then
    Edit2.Text :=CurrToStr(kwota / (1+stawkaVAT) );

end;
0

Trochę się wtrącę, jeśli chodzi o obliczenia... Wybrałem 100zł dla brutto by łatwiej było obliczać (dla podatku VAT w wysokości 22%):

Brutto = Netto + Tara
100% = 78% + 22%
100zł = 78zł + 22zł

Tak, czy nie?

100zł = 100%
Xzł = 22%

Mnożymy na krzyż:

100 * 22 = X * 100
2200 = 100X | dzielimy obie strony przez 100
22 = X
X = 22zł
Tara (VAT) = 22zł

Netto = Brutto - Tara
Netto = 100zł - 22zł
Netto = 78zł

No tak, czy nie? Bo jeśli nie, to chyba za darmo miałem 5 w technikum z matematyki...

0

**szopenfx **- ogromne dzięki ! uratowałeś mnie :)

0

Jeszcze jedna prośba. Dodałem opcję, żeby można było wpisać własną wartość podatku.

Tak wygląda teraz mój program:

user image

Kod wygląda teraz tak:

 procedure TForm1.Button1Click(Sender: TObject);
var
  kwota,stawkaVAT: Currency;
begin


  if (RadioButton1.Checked) then
    stawkaVAT := 0.08
  else if (RadioButton2.Checked) then
    stawkaVAT := 0.23
  else if (RadioButton3.Checked) then
    stawkaVAT := 0.19
  else if (RadioButton4.Checked) then            // przy tej formule wywala mi błąd "Incompatible types: STRING and INTEGER."
    stawkaVAT := ((Edit3.Text) / 100 );
  else                                                      // a później przy tym else
    stawkaVAT := 0.0;

  kwota := StrToCurr(Edit1.Text);

  if ComboBox1.Text = ('brutto')then
    Edit2.Text :=CurrToStr(kwota * (1+stawkaVAT) );

  if ComboBox1.Text = ('netto')then
    Edit2.Text :=CurrToStr(kwota / (1+stawkaVAT) );

end;
0

No i pytanie brzmi jak zmienić ten krótki element kodu, żeby to wszystko od 4 radiobuttonem działało ?

0

stawkaVAT := StrtoInt(Edit3.Text) / 100 ;
Zastanawiam się czemu nie wrzucisz tych stawek w normalny ComboBox w którym można wybrać z listy a można też wpisać z ręki.

0
_13th_Dragon napisał(a):

stawkaVAT := StrtoInt(Edit3.Text) / 100 ;
Zastanawiam się czemu nie wrzucisz tych stawek w normalny ComboBox w którym można wybrać z listy a można też wpisać z ręki.

Ma wyglądać tak jak zażyczył sobie tego Pan Prowadzący.
Dzięki za kod, ale nadal wyskakuje mi błąd przy tym else - "Not allowed before "else" "

1 użytkowników online, w tym zalogowanych: 0, gości: 1