Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с OnCalcFields   Найти похожие ветки 

 
DelphiLexx ©   (2006-08-10 13:22) [0]

У меня при изменении значения поля Field3 должен вестись перерасчет двух других полей - Field1 и Field2.
Я разместил свой код в OnCalcFields, где и ведется перерасчет Field1 и Field2 на основании нового значения поля Field3.
Так вот как отловить именно тот момент когда в поле Filed3 будет уже новое значение, чтобы перерасчет был правильным.
Весь этот геморой из-за того, что OnCalcFields вызывается и в режиме вставки и врежиме редактирования и т.п.


 
Сергей М. ©   (2006-08-10 13:25) [1]


> OnCalcFields вызывается и в режиме вставки и врежиме редактирования


А ты сбрасывай его в nil при входе в те режимы, где "геморрой") .. А по выходу из режима восстанавливай предыд.значение ..


 
Desdechado ©   (2006-08-10 13:26) [2]

может, поставить проверку
if( dataset.State in[dsEdit,dsInsert]) then Exit;


 
DelphiLexx ©   (2006-08-10 13:33) [3]


> А ты сбрасывай его в nil при входе в те режимы, где "геморрой")
> .. А по выходу из режима восстанавливай предыд.значение
> ..
> <Цитата

А какой режим считается подтверждением нового значения Field3.


 
Сергей М. ©   (2006-08-10 13:38) [4]

dataset.State in [dsBrowse]


 
evvcom ©   (2006-08-10 13:39) [5]

> [2] Desdechado ©   (10.08.06 13:26)

В OnCalcFields DataSet.State = dsCalcFields, а уже после выхода возвращается к предыдущему состоянию (dsEdit, dsInsert или др.)


 
DelphiLexx ©   (2006-08-10 13:40) [6]


> dataset.State in [dsBrowse]

dsBrowse - в OnCalcFields не вызывается


 
Сергей М. ©   (2006-08-10 13:51) [7]


> DelphiLexx ©   (10.08.06 13:40) [6]
>
>


А как это соотносится с [3] ?

К тому же зачем нужны все эти статусы. когда есть TField.OnSetText ?


 
DelphiLexx ©   (2006-08-10 14:01) [8]


> А как это соотносится с [3] ?
>
> К тому же зачем нужны все эти статусы. когда есть TField.
> OnSetText ?

Объяню просто, что мне нужно.
Пусть значение текущей записи(к примеру запись №2) поля Field3 = 37, пользователь изменяет значение на 36 и потдвержает сделанные изменения (нажатием Enter или ещё каким - либо способом), вот после этого должна вызваться моя процедура MyProcNewValue, которая изменит значения записи №2 полей Field1 и Field2 по формуле которая использует измененное значение поля Filed3 т.е. 36.
Так когда и где мне вызывать MyProcNewValue?


 
Плохиш ©   (2006-08-10 14:11) [9]


> DelphiLexx ©   (10.08.06 14:01) [8]

OnBeforePost


 
Плохиш ©   (2006-08-10 14:12) [10]

Кстати, всё, что описано в [8], никакого отношения к вычисляемым полям не имеет. Пора уже начать теорию учить.


 
Сергей М. ©   (2006-08-10 14:13) [11]

Что мешает всякий раз при событии OnCalcFields выполнять нужные вычисления вне зависимости от того, изменилось ли значение интересующего поля ?


 
DelphiLexx ©   (2006-08-10 14:16) [12]


> Что мешает всякий раз при событии OnCalcFields выполнять
> нужные вычисления вне зависимости от того, изменилось ли
> значение интересующего поля ?

торможение


 
Сергей М. ©   (2006-08-10 14:21) [13]


> DelphiLexx ©   (10.08.06 14:16) [12]


В BeforePost запоминай старое значение, в AfterPost сравнивай новое значение со старым


 
DelphiLexx ©   (2006-08-10 14:23) [14]


>
> В BeforePost запоминай старое значение, в AfterPost сравнивай
> новое значение со старым

Мне кажется это извращение


 
Сергей М. ©   (2006-08-10 14:28) [15]

Тогда читай внимательно справку о событиях в НД, приводящих к возбуждению OnCalcFields


 
ORMADA ©   (2006-08-10 15:12) [16]

дарагой ты наш DelphiLexx
ты только недавно начал изучать дельфи ?
очень на это похоже!
книжку купил бы себе какую нить чтоль!
а то вижу ты любой мало мальский сложный вопрос задаёшь здесь вместо того чтобы порыться в хелпе
2 All
может сразу напишем ему всю его программу :)))))


 
evvcom ©   (2006-08-10 16:40) [17]

> [12] DelphiLexx ©   (10.08.06 14:16)

Что же ты там такого считаешь, что заметно торможение? Поля у тебя действительно Calc? Или ты это к слову приплел? Потому как, насколько я помню, значения вычисляемых полей перед OnCalcFields сбрасываются, и ты их просто обязан присвоить. Потому значения либо каждый раз придется вычислять, либо завести массив и доставать оттуда. И с этим массивом еще один можно, с флагами "значение посчитано или нет". И в After(Before)Post флаг сбрасывать, если новое значение отличается от старого, как тебе и советовали.

> [13] Сергей М. ©   (10.08.06 14:21)

В BeforePost и AfterPost значения будут одинаковы, за исключением некоторых случаев с in/out параметрами. Запоминать в BeforeEdit ты, наверное, имел ввиду.


 
DelphiLexx ©   (2006-08-10 17:10) [18]


> книжку купил бы себе какую нить чтоль!

Книжек по Delphi перечитал очень много.
А что касается того, почему на первый взгляд простые вопросы я пишу на форум, что простые решения не всегда эффективны. Вот поэтому и хочется послушать различные варианты людей которые сталкивались с подобной проблемой.
А проблему своя я решил через OnSetText поля Field3.



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

Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
15-1157108513
rusPHP
2006-09-01 15:01
2006.09.24
авторизация и регистрация


2-1157308104
Koka
2006-09-03 22:28
2006.09.24
HELP!


1-1155223411
Destroyer
2006-08-10 19:23
2006.09.24
Сохранение состояния компонентов на форме


6-1146737769
марк
2006-05-04 14:16
2006.09.24
Принять поток/файл в ответ на запрос.


2-1157617630
newbie2
2006-09-07 12:27
2006.09.24
Как объект передать через интовую переменную?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский