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

Вниз

Как реализовать?   Найти похожие ветки 

 
Big Error   (2003-10-21 10:35) [0]

В принципе, все просто - есть форма, на ней три десятка полей и кнопки Ok и Cancel. При нажатии на Cancel, если хоть одно поле формы изменялось, нужно вывести что-то типа "Уверены, что хотите отменить?"
Так вот, вопрос в том, как красиво отследить изменения в полях?
В лоб придумывается только пока одно - повесить на каждое поле обработчик события OnChange и по нему изменять некий флаг. Но ИМХО некрасиво это. Может наука другие методы нашла? Подскажите, пожалуйста.


 
Digitman   (2003-10-21 10:42) [1]


> Но ИМХО некрасиво это


почему же это "некрасиво" ? вполне разумое и эффективное решение !


 
lasso   (2003-10-21 10:44) [2]

я конечно лам в делфях но не легче написать процедурку?
или я глупость опять сказал?!...:(


 
REA   (2003-10-21 10:46) [3]

Вариант 1: Можно еще более тупо попробовать: сделать преобразование главной панели формы (не самой, потому что у нее координаты меняются) в текст (как в примере из справки) и сравнивать этот текст до и после. Тут правда нужно, чтобы остальные характеристики (enabled) тоже совпадали.
Вариант 2: пройтись по форме и сделать строку - сумму полей и сравнивать до и после.


 
lasso   (2003-10-21 10:50) [4]

procedute testedit(a:tedit);
begin
a.onchange //тра ля ля
end;

вызывать testedit(edit1.name);

пытаюсь первый раз в жизни ответить на вопрос так что 90% что это не правильно...;)


 
lasso   (2003-10-21 10:51) [5]

судя по ответу rea я глупость сказал....;(


 
Ihor Osov'yak   (2003-10-21 10:52) [6]

Я делаю примерно так.
В диалоговых формах, где предусмотрен ввод, есть две процедуры, примерно вида SetData(const aPrm: TMyInfoStruc) и GetData(var aPrm: TMyInfoStruc), первая устанавливает значения контролов в соотв. с данными, вторая - перегоняет данные с контролов в соотв. параметр.. Первая - также в приватном поле сохраняет копию aPrm.. (конечно, можно сделать и проперти, иногда и так делаю).
Так вот, перед закрытием формы (или при сабмите, или при откате - это уже зависит от логики диалога) с помощью GetData делается запрос новых значений, и сравнивается с той копией начальных значений, что была сохранена SetData.. Естественно, для TMyInfoStruc должны быть функции сравнения..
В зависимости от результата сравнения может быть вопрос к юзеру..

Работы от такого подхода прибавляется незначительно, так как функциональность SetData и GetData в том или ином виде присутствует практически в любой диалоговой форме... А читабельность и "сопровождаемость" кода выигрывает..


 
Ihor Osov'yak   (2003-10-21 10:55) [7]

зы - а согласно [1] Digitman © (21.10.03 10:42) - или когда очень спешу, или проект ачень маленький, несколько формочек..


 
Hooch   (2003-10-21 10:56) [8]

делай как описал, нормальное решение, тем более что кода будет 3 строчки


 
Digitman   (2003-10-21 11:01) [9]


> Ihor Osov"yak


имелось ввиду, что при старте формы в цикле по нужной группе контролов назначить один и тот же обработчик..

т.е. все что требуется - написать собственно обработчик и процедуру с циклом внутри, где этот обработчик будет назначаться всем существующим на этот момент контролам, отвечающим данному требованию по функц-ти их использования


 
Ihor Osov'yak   (2003-10-21 11:06) [10]

2 [9] Digitman © (21.10.03 11:01)

И такое тоже юзали :-)..
Но здесь (как и при решении "в лоб") - юзер может изменить значение, а потом возраться к первоначальному ручками.. Данные в результате не изменены, а влажок будет установлен.. Так что [6], несмотря на некоторую трудоемкость, имеет в этом отношении маленькое преимущество..


 
Big Error   (2003-10-21 11:09) [11]

> Digitman

Один и тот же обработчик не получится, потому что, во-первых, не у всех контролов есть OnChange (у TCheckBox, например, нет), а во-вторых, у некорых контролов уже стоят обработчики OnChange, где выполняются другие действия.

Да, видимо придется просто в каждый обработчик добавлять изменение флага, чуда не произошло, наука не дошла до более красивого способа. :))


 
app   (2003-10-21 11:17) [12]

Лучше чем Old<>New врядли придумаешь, при том чтоббы была гарантия действительного изменения данных



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

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

Наверх





Память: 0.47 MB
Время: 0.011 c
6-98768
Lony
2003-09-05 16:00
2003.10.30
Как проверить, доступен ли определённый сайт в интернете?


3-98513
Beton
2003-10-08 19:46
2003.10.30
Числа прописью


3-98466
k_len
2003-10-10 06:55
2003.10.30
Одинаковые записи


1-98602
Эл
2003-10-19 14:08
2003.10.30
Зависимость форм от разрешения экрана


14-98843
undert
2003-10-12 19:59
2003.10.30
Кто хочет сделать программку для только поднятия экспириенса ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский