Nie wiem czy jeszcze aktualne, ale zabezpieczenie przed dzieleniem przez 0 to bardzo prosta sprawa.
...
'/' :begin
if Liczba2 = 0 then
wyswietlacz.Text:="Dzielenie przez 0"
else
wynik := Liczba1 / Liczba2;
end;
end;
wyswietlacz.Text := FloatToStr(wynik);
end;
Dlaczego wywala błąd po wciśnięciu "="? Bo chce wykonywać obliczenia i wyświetlać wynik na pustych wartościach, mało tego, nie wie jakie w ogóle działanie ma wykonać.
Nie jestem teraz w domu i nie pamiętam jak mam to u siebie :D
Co do klawiszy M+ M- etc...
Tworzysz dodatkową zmienną globalną typu rzeczywistego, np. mem.
Pod klawiszem M+ piszesz:
procedure Tkalkulator_f.M+Click(Sender: TObject);
begin
if wyswietlacz.Text <> '' then // sprawdzasz czy nie chcesz dodawać do pamięci wartości pustej
mem:=mem+StrToFloat(wyswietlacz.Text) // dodawaj do pamięci zawartość wyświetlacza
else // w przeciwnym wypadku
exit; // nie rób nic
end;
Podobnie z M-
MS (tylko zapis do pamięci):
procedure Tkalkulator_f.MSClick(Sender: TObject);
begin
if wyswietlacz.Text <> '' then // sprawdzasz czy nie chcesz dodawać do pamięci wartości pustej
mem:=StrToFloat(wyswietlacz.Text)
else
exit;
end;
MR (odczyt z pamięci):
procedure Tkalkulator_f.MRClick(Sender: TObject);
begin
wyswietlacz.Text:=FloatToStr(mem); // jeśli mem będzie puste wypisze 0, w czym błędu nie ma
end;
MC (czyszczenie pamięci):
procedure Tkalkulator_f.MCClick(Sender: TObject);
begin
mem:=0;
end;
Można pododawać różne inne zdarzenia, które powinny się wykonać po wciśnięciu tych klawiszy. Wszystko zależne od programisty, pomysłu i założeń.
Odrobinę skróć kod.
zamiast
...
wyswietlacz.SetFocus;
wyswietlacz.Text:='';
...
daj
...
wyswietlacz.Clear;
...
Może się mylę, ale ustawianie focusa na edit w tym przypadku jest zbędne, gdyż wciskając przycisk z liczbą, już tam masz zaznaczone, do którego edita jest ona wpisywana.
A ja mam nadal pytanie co do zmiany znaku, tzn jak przed liczbą dodawać znak "-" i go usuwać, po wciśnięciu klawisza "+/-" ??
pozdrawiam Arek