Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Столкнулся с проблемой в простой програмке.Помогите пожалуйста !   Найти похожие ветки 

 
Дмитрий   (2009-04-05 23:40) [0]

Привет форумчане! Я начинающий программист - новичек вообщем. Я решил разработать простенькую програмку "Сумма покупки" в качестве тренировки.
Коротко о программе:
Имеется два типа вещей например: куртки,джинсы. Вещь надо выбирать путем установки галочки в CheckBox.Каждой вещи надо задать кол-во и цену.Соответственно два поля Edit для каждой вещи.
В итоге надо вычислить сумму покупки только тех вещей напротив которых стоит галка в CheckBoxe.

Столкнулся с такой проблемой, когда вычисляется сумма, то считаются все вещи даже если с одного из CheckBoXов галка снята.
И если хоть один из 4х Edit не заполнен вылетает ошибка.
Вот мой код:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   CheckBox1: TCheckBox; //куртки
   CheckBox2: TCheckBox; //джинсы
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Edit4: TEdit;
   Label1: TLabel; //наименование товара  -просто надпись
   Label2: TLabel; //количество           -просто надпись
   Label3: TLabel; //цена                 -просто надпись
   Label4: TLabel; //сумма                -просто надпись
   Label5: TLabel; //здесь выводится результат
   Button1: TButton;
   Button2: TButton;
   
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure CheckBox1Click(Sender: TObject);
   procedure CheckBox2Click(Sender: TObject);
   
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked=False then
begin
Edit1.Hide;
Edit1.Enabled:=False;
Edit2.Hide;
Edit2.Enabled:=False;
end
else
begin
Edit1.Show;
Edit1.Enabled:=True;
Edit2.Show;
Edit2.Enabled:=True;
end

end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
if checkbox2.Checked=False then
begin
Edit3.Hide;
Edit3.Enabled:=False;
Edit4.Hide;
Edit4.Enabled:=False;
end
else
begin
Edit3.Show;
Edit3.Enabled:=True;
Edit4.Show;
Edit4.Enabled:=True;
end

end;
var
a,b:Integer;
a1,b1:Real;
sum:Real;
procedure TForm1.Button1Click(Sender: TObject);
begin
a:= StrToInt (Form1.Edit1.Text);
b:= StrToInt (Form1.Edit3.Text);
a1:= StrToFloat (Form1.Edit2.Text);
b1:= StrToFloat (Form1.Edit4.Text);
sum:=(a*a1)+(b*b1);
Label5.Caption:=FloatToStr(sum);

end;

end.

Подскажите пожалуйста,что я не так делаю.
Заранее огромное спасибо.


 
{RASkov} ©   (2009-04-06 00:07) [1]

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 Edit1.Visible:=CheckBox1.Checked;
 Edit2.Visible:=CheckBox1.Checked;
end

end;
procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 Edit3.Visible:=CheckBox2.Checked;
 Edit4.Visible:=CheckBox2.Checked;
end

var
a,b:Integer;
a1,b1:Real;
sum:Real;
procedure TForm1.Button1Click(Sender: TObject);
begin
 if CheckBox1.Checked then a:= StrToIntDef(Edit1.Text, 0) else a:=0;
 if CheckBox2.Checked then b:= StrToIntDef (Edit3.Text, 0) else b:=0;
 if CheckBox1.Checked then a1:= StrToFloatDef (Edit2.Text, 0) else a1:=0;
 if CheckBox2.Checked then b1:= StrToFloatDef (Edit4.Text, 0) else b1:=0;
 sum:=(a*a1)+(b*b1);
 Label5.Caption:=FloatToStr(sum);
end;


> Подскажите пожалуйста,что я не так делаю

много чего... например сейчас скопируешь мой код не подумав над его оптимизацией и вообще он не правильный хоть и рабочий...
думать нужно :)


 
{RASkov} ©   (2009-04-06 00:14) [2]

> [0] Дмитрий   (05.04.09 23:40)
> Столкнулся с такой проблемой, когда вычисляется сумма, то
> считаются все вещи даже если с одного из CheckBoXов галка
> снята.
> И если хоть один из 4х Edit не заполнен вылетает ошибка.

Ты прячешь Эдиты, причем предворительно еще их дисаблишь, и думаешь что программа, раз ты не видишь контролы, то и ей на них не обращать внимания... ошибаешься... Спрятанные контролы, пусть даже задисабленные, имеются в программе и участвуют в коде...
Но в виду того что у тебя идет преобразования текстовой информации в численную и в спрятанном контроле вместо числа введено незнай что(или пусто как ты говоришь) вот и ошибка при конвертировании....


 
Дмитрий   (2009-04-06 00:39) [3]

Спасибо {RASkov}. Исправил код все работает.Буду теперь подробно разбиратся что да как. Просто я Delphi неделю назад впервые увидел,
а до этого  вообще программированием не занимался.
Поэтому такие ламерские ошибки :(



Страницы: 1 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
4-1209915823
тимохов
2008-05-04 19:43
2009.05.17
InvalidateRect + потоки


15-1236852850
b@v
2009-03-12 13:14
2009.05.17
ACCESS to MySQL


2-1238659734
Немо
2009-04-02 12:08
2009.05.17
Interbase и Firebird одно и тоже? Можно с ними через ADO говрить?


2-1238565285
DmitriyR
2009-04-01 09:54
2009.05.17
массивы char и longword


2-1238593247
mnj
2009-04-01 17:40
2009.05.17
рисование компонент