Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с записями [D7, XP]


Страницы:   1 2

allucard ©   (2007-12-04 10:08:00) 

Доброго утра всем.

Вопрос:

Есть запись (record) у которой есть поля:

type
TMagazin = record
kassa1: integer;
kassa2: integer;
kassa3: integer;
summa: integer;
end;


Как сделать так чтобы при добавлении (или вычитании) с одной из касс автоматически перещитывалась сумма?

(чтобы не перещитывать вручную)
т.е.

например:
kassa1=3;
kassa2=1;
kassa3=2;
summa=5;

kassa1 := kassa1+2;
а сумма сама пересчиталась и была равна 7.

p.s. знаю что на c++ visual studio есть возможность переопределения, как это сделать на дельфи?

Спасибо.


Anatoly Podgoretsky   (2007-12-04 14:03:00) [1]

> allucard  (04.12.2007 13:49:24)  [24]

Тебе достаточно привели примеров, осталось только реализовать.


Ega23   (2007-12-04 13:51:00) [2]


> Вы это имели ввмду?


Данные по кассам надо держать в сейфе.


allucard   (2007-12-04 13:49:00) [3]


> Anatoly Podgoretsky ©   (04.12.07 12:58) [21]

Я до такого уровня ещё не дошёл.
И понимаю необходимо использовать классы и данные по кассам держать в секции private.

Вы это имели ввмду?


Dennis I. Komarov   (2007-12-04 13:01:00) [4]

> [21] Anatoly Podgoretsky ©   (04.12.07 12:58)

Магазин не должен допускать таких программистов, т.к. ИМХО - это уже коммерческий софт. И потери могут быть гораздо больше, чем такая экономия.


sniknik   (2007-12-04 13:00:00) [5]

> Решил всё таки по своему.
пусть через задницу, но свое родное... молодца!

хотя, приведенный код вобще то не рабочий (область видимости не та)... что оставляет надежду на то, что ты воспользовался всетаки какимнибудь из приведенных выше вариантов но постеснялся в этом признаться.


Anatoly Podgoretsky   (2007-12-04 12:58:00) [6]

> allucard  (04.12.2007 12:56:20)  [20]

Неправда - это не главное.
Главное, что бы правильно работало, а этот вариант не гарантирует.
Смело можно поменять любую кассу в обход.
Магазин не должен допускать таких вольностей.


allucard   (2007-12-04 12:56:00) [7]

главное работает ;)


allucard   (2007-12-04 12:54:00) [8]

:)


Dennis I. Komarov   (2007-12-04 12:53:00) [9]

А ведь этот софт будет в каком-то магазине :(


allucard   (2007-12-04 12:47:00) [10]

Решил всё таки по своему.

Через процедурные типы в записи:

type
TFuncInt = function: integer;

TMagazin = record
kassa1: integer;
kassa2: integer;
kassa3: integer;
summa: TFuncInt;
end;

var Magazin: TMagazin;

function summa: integer;
begin
result := kassa1+kassa2+kassa3;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Magazin.Summa := Summa;
end;

Всем спасибо.


Dennis I. Komarov   (2007-12-04 11:12:00) [11]

> [14] Skyle ©   (04.12.07 11:05)

Совершенно правильно, выдрал из первого попавшегося, не все исправил :)

> [12] allucard   (04.12.07 11:03)

Забей. Я просто показал, что [2] этого мало :)


sniknik   (2007-12-04 11:07:00) [12]

> Можно и ещё придумать. Зависит от особенностей использования.
лучше не придумывать... т.к. конкретно вот эта особенность состоит, имхо, в написании замены базе/таблице.
товарищ не разобрался с готовым и решил что написать свое проще. еще раз ИМХО.


Skyle   (2007-12-04 11:05:00) [13]


> allucard   (04.12.07 11:03) [12]

Судя по наличию SetXML это была какая-то домашняя заготовка. Можно не обращать внимания.


Anatoly Podgoretsky   (2007-12-04 11:05:00) [14]

summa поле расчетное, поэтому оно физически не нужно и не нужно делать перерасчеты соответственно.

Сделать только три приватных поля и четыре контролируемых свойства. Обязательно запрети прямую запись в kassaX


allucard   (2007-12-04 11:03:00) [15]


> Dennis I. Komarov ©   (04.12.07 10:43) [5]
>
> TAny=class(TComponent)

а что существенного мне даст сделать свой компонент наследником TComponent, для моих примитивных целей?)


allucard   (2007-12-04 10:54:00) [16]

Спасибо.

Сейчас попробую.


Skyle   (2007-12-04 10:47:00) [17]

Есть несколько вариантов разной степени извращённости

1.
type
 TMagazin = record
   Kassa1 : Integer;
   Kassa2 : Integer;
    ...
 end;

 function MyMagazinSumma (const AMagazin : TMagazin) : Integer;
 begin
   with AMagazin do
     Result := Kassa1 + Kassa2 + ....;
 end;


2.
type
 TMagazin = class
 private
   FKassa1 : Integer;
   FKassa2 : Integer;
   function GetSumma : Integer;
 public
   property Kassa1 : Integer read FKassa1 write FKassa1;
   property Kassa1 : Integer read FKassa1 write FKassa1;
   property Summa : Integer read GetSumma;
 end;

function TMagazin.GetSumma : Integer;
begin
 Result := FKassa1 + FKassa2 + ....;
end;


Можно и ещё придумать. Зависит от особенностей использования.


Dennis I. Komarov   (2007-12-04 10:46:00) [18]

> procedure SetXML(const Value: TXMLDocument);

Это убрать, случайно затесалась :)


Думкин   (2007-12-04 10:45:00) [19]


> function summa: integer;

property summ : integer read getsumm;


sniknik   (2007-12-04 10:44:00) [20]

вариант
type
TMagazin = class;
private
  function GetSumma: integer;
public
  kassa1: integer;
  kassa2: integer;
  kassa3: integer;
  property summa: integer read GetSumma;
end;

function TMagazin.GetSumma: integer;
begin
 result:=  kassa1 + kassa2 + kassa3;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо