Dodanie funkcji do liczenia temperatur

0

Witam. Potrzebuje zrobić obliczenie temperatur w języku Delphi. Dodaje źródła aby łatwiej można było mi pomóc. Mój problem polega na tym że nie mogę dodać "farenhajtów" ponieważ tworzą mi się błędy których nie potrafię rozwikłać.... Prosiłbym o pomoc, z góry dzięki :)

0

Jakie błędy ?

0

Problem polega na tym że jak mam te 3 okna (SpinEdit) to 3 nie współgra z pozostałymi z automatu ; trzeba kliknąć żeby działało...

0
function Fahrenheite(Celcjusz: Integer): Extended;
begin
  Fahrenheite := 32 + (9/5 * Celcjusz);
end;
function Celcjusz(Fahrenheite: Integer): Extended;
begin
  Celcjusz := 5/9 * (Fahrenheit - 32);
end;
0

Mógłbyś mi to wklepać w źródło? Ja motam się już 3 godzinki i tyle kombinacji że mój mózg(o ile go jeszcze mam xD) mi się zlasował ;| będę wdzięczny

0

Dobra, napisałem Ci funkcję

type
  Temperature = (Fahrenheite, Kelvin, Celcjusz);
function Temperature(Ile: Integer; First, Second: Temperature;): Integer;
begin
Result := Ile;
if First = Fahrenheite then
  Result := Round(5/9 * (Ile - 32));

if First = Kelvin then
   Result := Ile - 273;

if Second = Kelvin then
   Result := Result + 273;

if Second = Fahrenheite then
   Result := Round(32 + (9/5 * Result));
end;

Np. Chcesz zamienić 20 Celcjusza na Kelivn.

Temperature(20, Celcjusz, Kelvin);
1

Twoja procedura obsługi zdarzenia OnChange po modyfikacji:

procedure TForm1.celeditChange(Sender: TObject);
begin
  if Sender is TSpinEdit then with TSpinEdit(Sender) do
    if (Name = 'celedit') and (Text <> '') and (ActiveControl.Tag = 1) then begin
      keledit.Value:= Round(celedit.Value + 273.15);
      faredit.Value:= Round(1.8*celedit.Value + 32);
    end
    else if (Name = 'keledit') and (Text <> '') and (ActiveControl.Tag = 2) then begin
      celedit.Value:= Round(keledit.Value - 273.15);
      faredit.Value:= Round(1.8*keledit.Value - 459.67);
    end
    else if (Name = 'faredit') and (Text <> '') and (ActiveControl.Tag = 3) then begin
      celedit.Value:= Round((faredit.Value - 32)/1.8);
      keledit.Value:= Round((faredit.Value + 459.67)*5/9);
    end;
end;

Ważne: musisz zróżnicować właściwości Tag dla kontrolek SpinEdit tak jak w kodzie (celedit - 1 itd). Bez sprawdzania tego warunku zmiana wartości w jednej kontrolce spowoduje zmianę wartości dwóch pozostałych i wywołanie dla nich procedury OnChange i tak w nieskończoność.

0

hmm... co do Tag nie mam pojęcia o co chodzi ? Było by problemem jak byś zuploadował źródło?

ja rozważałem jeszcze taki sposób:

var
  celkel : real;
begin
  celkel := 273.15;
 if TSpinEdit(Sender).Name = 'celedit' then
    begin
      if (keledit.Text <> '') and (celedit.Text <> '') then
keledit.Text := FloatToStr(StrToFloat(celedit.text) + celkel))
    end else
      if (keledit.Text <> '') and (celedit.Text <> '') then
        if TSpinEdit(Sender).Name = 'keledit' then
          celedit.Text := FloatToStr(StrToFloat(keledit.text) - celkel));

        begin
           if (faredit.Text <> '') and (celedit.Text <> '') then
       if TSpinEdit(Sender).Name = 'faredit' then
      faredit.Text := FloatToStr(StrToFloat(celedit.Text)*1.8 +32));
         end
          end;
end.
0
Xzetor napisał(a)

hmm... co do Tag nie mam pojęcia o co chodzi ?

Zaznaczasz myszką pierwszą kontrolkę SpinEdit (celedit) na formularzu i w oknie Object Inspector po lewej stronie ekranu w zakładce Properties odszukujesz właściwość Tag i zmieniasz wartość 0 na 1. Podobnie postępujesz z pozostałymi 2 kontrolkami, zmieniając Tag odpowiednio na 2 i 3. Oczywiście zamieniasz swoją procedurę obsługi zdarzenia, na tą którą podałem i to wszystko. Musi działać.

Całe źródła mogę podesłać, ale gdy sam do tego dojdziesz, to przynajmniej się czegoś nauczysz

0
Xzetor napisał(a)

hmm... co do Tag nie mam pojęcia o co chodzi ? Było by problemem jak byś zuploadował źródło?

A co za problem zmienić własność Tag z 0 na inne koniecznie jak 1, 2 i 3? Możesz to zrobić w Insektorze Obiektów lub poprzez kod - najlepiej w zdarzeniu OnCreate dla formatki.

0

Tak dla ścisłości - celSjusz, nie celCjusz. :)

0

Hahs. Myślałem że te tag'i to trudniejsza opcja a nawet nie szukałem :) Dzięki panowie :))

Miałbym jeszcze jedno pytanie :) chciałbym do tego dodać scroll'e tylko że jak dodam to liczby zmieniają mi się tylko w Celsjuszasz mimo że ustawiam tag; ktoś pomoże?

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