КАПУСТА: почитай,обсуди,отдохни!

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



калькулятор

Сообщений 1 страница 3 из 3

1

Если вы только-только начали изучать Delphi, попробуйте сначала сделать в Delphi калькулятор, стандартный калькулятор или с тремя edit для ввода первого числа, вторую для ввода второго числа, а третью для вывода ответа. У вас обязательно получится эта программа, и вы поверите в свои силы программиста.
    А позже своё приложениеможете сравнить с этим калькулятором.

Код:
unit s_calc_;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;      // индикатор
    // кнопки с цифрами
    Button0: TButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    ButtonPlus: TButton;  // "+"
    ButtonMinus: TButton; // "-"
    ButtonEnter: TButton; // "="
    ButtonC: TButton;     // "с" - очистка, сброс
    ButtonZ: TButton;     // "," - десятичный разделитель

    procedure FormCreate(Sender: TObject);
    procedure DigitBtnClick(Sender: TObject); // кнопки "0" - "9"
    procedure OpBtnClick(Sender: TObject);    // кнопки "+", "-" и "="
    procedure ButtonCClick(Sender: TObject);
    procedure Edit1Change(Sender: TObject; var Key:Char);
    procedure ButtonZClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

{ 1. Во время создания формы свойству Tag каждой
     цифровой надо кнопки присвоить значение
     равное цифре, которая должна появится на
     индикаторе калькулятора.
  2. После того как обычным образом будет создана
     процедура обработки события OnClick для одной
     из цифровых кнопок, например для кнопки "1",
     надо задать, что событие OnClick для остальных
     кнопок обрабатывает эта же процедура. Делается
     это выбором  процедуры в списке, который
     появляется в результате щелчка на значке
     раскрывающегося списка в соответствующей
     строке вкладки Events.
  }
var
  accum:  real;     // аккумулятор
  oper:   integer;  // операция: 1 - '+' ; 2 - '-';
                    // 0 - "выполнить" (кнопка "=")

  f:      integer;
  { f = 0 ждем первую цифру нового числа, например,
          после выполнения операции, когда на
          индикаторе результат.
    f = 1 ждем остальные цифры. }

// Щелчок на кнопках "0" - "9"
procedure TForm1.DigitBtnClick(Sender: TObject);
var
    Btn: TButton;
    ch: Char;
begin
  Btn := Sender as TButton;
  ch  := Chr(48+Btn.Tag);
  // chr(48) = '0'; chr(49) = '1' и т.д.
  // можно и так: ch := Btn.Caption;

  case Btn.Tag of
  1..9: // кнопки "1" - "9"
    if f = 0 // первая цифра числа
        then begin
            Edit1.Text := ch;
            f := 1; // ждем остальные цифры
        end
    else Edit1.Text := Edit1.Text + ch;

  0: // кнопка "0"
      if Edit1.Text <> '0' // на индикаторе 0
        // чтобы на индикаторе не было
        // нескольких нулей в начале числа
        then  Edit1.Text := Edit1.Text + '0';
  end;
end;

// десятичная точка
procedure TForm1.ButtonZClick(Sender: TObject);
begin
  if Edit1.Text = '0' then
    begin
      Edit1.Text := '0,';
      f := 1;
    end;
  if Pos(',',Edit1.Text) = 0 then
      Edit1.Text := Edit1.Text + ',';
end;

// выполнение операции
procedure DoOper;
var
    numb: real; // число на индикаторе
begin
    // accum содержит результат предыдущей
    // операции, oper - код операции, которую
    // надо выполнить. Операнд находится
    // на индикаторе.
    numb := StrToFloat(Form1.Edit1.Text);
    case oper of
    0: accum := numb;
    1: accum := accum + numb;
    2: accum := accum - numb;
    end;
    Form1.Edit1.Text := FloatToStr(accum);
end;

// Обрабатывает щелчок на кнопках "+", "-" и "="
procedure TForm1.OpBtnClick(Sender: TObject);
{  Надо выполнить предыдущую операцию,
  вывести результат на индикатор,
  запомнить текущую операцию и
  установить режим ожидания первой
  цифры нового числа. }
var
  Btn: TButton;
begin
  Btn := Sender as TButton;
  if f = 0 // ждем первую цифру, но пользователь
           // щелкнул на кнопке операции
    then
       // свойство Tag кнопки хранит код операции
       oper :=  Btn.Tag // запомним операцию
  else begin
    DoOper;          // выполнить предыдущую операцию
    oper := Btn.Tag; // запомнить текущую операцию
    f:=0;            // ждем первую цифру нового числа
  end;
end;

// кнопка "с" - очистка
procedure TForm1.ButtonCClick(Sender: TObject);
begin
  Edit1.Text := '0';
  accum := 0;
  oper := 0;
  f := 0; // ждем первую цифру числа
end;

// нажатие клавиши в поле Edit1
procedure TForm1.Edit1Change(Sender: TObject; var Key:Char);
begin
  Key := Chr(0);  // не отображать символы
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    oper := 0;
end;

end.

0

2

Это что обучение новичков? авайте организуем нормальную тему, например Работа с сетью в Delphi? У меня есть не которые вопросы.

0

3

Работа с сетью в DELPHI

NoName_emaNoN написал(а):

Это что обучение новичков? авайте организуем нормальную тему, например Работа с сетью в Delphi? У меня есть не которые вопросы.

Создал тему,задавайте свой вопрос. На будущее: вы ведь тоже можете создавать темы- в следущий раз не предлагайте,а сразу создавайте.

0