
22.10.2011, 20:53
|
Новичок
|
|
Регистрация: 07.10.2011
Сообщения: 77
Версия Delphi: Turbo Delphi 20
Репутация: 10
|
|
Цитата:
Сообщение от chainik
вот заготовка такого калькулятора. Полностью не пишу специально.
думай сам.
Не тестировал. Это тоже твоя забота.
Суть в том что при вводе в любое окно происходит вычисление во всех остальных окнах. ТЕ ты вводишь любой параметр и тут же получаешь все остальные.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
StaticText1: TStaticText;
StaticText2: TStaticText;
StaticText3: TStaticText;
StaticText4: TStaticText;
procedure EditsChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
Radius:extended;
FlagErr:boolean; //true- ошибка ввода
//здесь ты должен написать функции вычисления радиуса
//по длине окр, площади, радиуса
//в последнем случае смысл функции (вычислить радиус по радиусу)
// в том что проверяется корректность ввода
procedure CalcRadius_1(Dlina_Okr:string; out Radius:extended; out FlagErr);
begin
try
Radius:=StrToFloat(s)/2/Pi;
FlagErr:=false;
except
FlagErr:=true;
end
end;
//здесь ты должен написать набор функций
//вычисляющий длину окр, площадь по радиусу
function CalcDlina_okr(Radius:extended; out FlagErr):string;
begin
try
Result:=Radius*2*Pi;
FlagErr:=false
except
FlagErr:=true
end
end;
//это обработчик событий изменения текстовой строки окна
//он общий на все окна
procedure TForm1.EditsChange(Sender: TObject);
begin
//этап 1 вычисляем радиус окружности
if Edit1.Focused then CalcRadius_1(Edit1.Text,Radius,FlagErr)
else
if Edit2.Focused then CalcRadius_2(Edit1.Text,Radius,FlagErr)
//и тд по всем окнам
//этап 2 вычисляем по радиусу остальные параметры
//если не было ошибки
if not FlagErr then
begin
if not Edit1.Focused then
Edit1.Text:=CalcDlina_Okr(Radius,FlagErr);
if not Edit2.Focused then
Edit2.Text:=CalcSquare_Okr(Radius,FlagErr);
//и тд по всем окнам
end;
//этап 3 очищаем окна если произошла ошибка ввода или вычислений
if FlagErr then
begin
if not Edit1.Focused then
Edit1.Text:='';
if not Edit2.Focused then
Edit2.Text:='';
//и тд по всем окнам
end;
end;
end.
|
спасибо, хоть есть с чего начать)
|