Показать сообщение отдельно
  #6  
Старый 22.10.2011, 20:53
cyber922 cyber922 вне форума
Новичок
 
Регистрация: 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.
спасибо, хоть есть с чего начать)
Ответить с цитированием