Pobieranie wartości z ComboBox

0

Witam,
mam do was pytanie. Muszę zaliczyć programowanie w delphi i tworzę prosty program, który mnoży ze sobą 3 podane wartości.

Jednak, dodatkowo chciałbym wykorzystać listę typu combobox i gdy użytkownik, wybierze z tej listy wartość, to dodatkowo wybrana wartość będzie mnożona z trzema podanymi liczbami.

Obecnie tak to u mnie wygląda w skrócie:

procedure TForm1.ButtonClick(Sender: TObject);
var P, G, V, F: real;
begin
     P:= StrtoFloat(_P.Text);
     G:= StrtoFloat(_G.Text);
     V:= StrtoFloat(_V.Text);
     F:= P*G*V;
     Wynik.Text:= FloatToStr(F);
end;

Myślałem, żeby stworzyć to w ten sposób:

procedure ComboBox1Click(Sender: TObject);
procedure TForm1.ButtonClick(Sender: TObject);
var S, P, G, V, F: real;
begin
     S:= ComboBox1.Items[ComboBox1.ItemIndex];
     S:= Copy(S, Pos('=', S)+1, Length(S));
     P:= StrtoFloat(_P.Text);
     G:= StrtoFloat(_G.Text);
     V:= StrtoFloat(_V.Text);
     F:= S*P*G*V;
     Wynik.Text:= FloatToStr(F);
end;

Żeby po wybraniu opcji typu wartość = 1, jedynka byłaby kopiowana jako S i mnożona z resztą podanych liczb.
Jednak program wyrzuca błędy.

Może ktoś pomoże, w jaki sposób to wykonać?
Z góry dziękuje za odp.

dodanie znaczników <code class="delphi"> - @furious programming

0

Ale gdzie pojawia Ci się ten błąd? W której linijce? Powinieneś przede wszystkim podać treść błędu i zaznaczyć w której linijce jest wywoływany; A tak to trochę utrudniasz...

Błąd jest na pewno w tej linijce:

S:= ComboBox1.Items[ComboBox1.ItemIndex];

dlatego że zmienna S jest typu Real, a właściwość ComboBox.Items zwraca łańcuch znaków, więc masz niezgodność typów;

Używasz funkcji konwersji, które rzucają wyjątkami jeśli łańcuch nie zawiera poprawnie zapisanych liczb w postaci łańcuchów; Aby zabezpieczyć się przed wyjątkami, możesz skorzystać z bezpiecznych funkcji, np. ze TryStrToFloat, która zwróci wartość logiczną z postępu konwersji;

Jeżeli natomiast automatycznie po wybraniu opcji w ComboBox mają zostać wykonane jakieś operacje, to zainteresuj się zdarzeniem OnChange komponentu ComboBox;

Samo zastosowanie bezpiecznych funkcji konwersji może wyglądać następująco:

procedure TForm1.ButtonClick(Sender: TObject);
var
  P, G, V: Double;
begin
  if TryStrToFloat(_P.Text, P) and TryStrToFloat(_G.Text, G) and TryStrToFloat(_V.Text, V) then
  begin
    F := P * G * V;
    Wynik.Text := FloatToStr(F);
  end;
end;

ale nie rozumiem jak chcesz podłączyć pod ten kod ComboBox, więc opisz to dokładniej; Sądzę, że chodzi o coś takiego:

procedure TForm1.ButtonClick(Sender: TObject);
var
  P, G, V, X, F: Double;
begin
  if TryStrToFloat(_P.Text, P) and TryStrToFloat(_G.Text, G) and TryStrToFloat(_V.Text, V) then
  begin
    F := P * G * V;

    if ComboBox1.ItemIndex <> -1 then
      if TryStrToFloat(ComboxBox1.Items[ComboBox1.ItemIndex], X) then
        F := F * X;

    Wynik.Text := FloatToStr(F);
  end;
end;

Tylko nazwij zmienną X po swojemu, bo nie wiem co ma w Twoim kodzie oznaczać.

0

Chodzi o wybór gęstości cieczy z combobox i podstawienia do wartości podanych w formularzu.
Tak jak ukazane jest to w załączniku.

Bez tytułu.jpg

wstawienie obrazka do treści posta - @furious programming

0

A jaki błąd się pojawia? OnSelect comboboxa próbowałeś?

0

@robinn8556 - no dobrze, ale co ma się dziać po wybraniu/zmianie opcji w ComboBox?

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