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

Вниз

Связь переменной со свойством компанента и наоборот   Найти похожие ветки 

 
AntonGF   (2006-05-26 10:29) [0]

Есть, например, переменая типа boolean (B) (какой то флаг внутри программы) и checkbox (C) на форме. Теперь собственно вопрос. Как сделать чтобы при изменении значения B изменилось значение С.Checked и наоборот? Не используя C.OnCick и т.п.
Область применения: Вы ведете проект. используете различные настройки и т.п. которые содержатся в переменных. Возникает необходимость вывести значение переменной на форму для внешнего контроля. Размещаем соответствующий данным компонент и связываем его с переменной, значение которой необходимо отражать. И всё! при изменении значения переменной свойство компонента меняется автоматически и наоборот. Заманчиво? а если эти настройки хранятся гденить и их надо подгружать и сохранять, а если их 500 штук? Мы выигрываем тьму времени на контроле отображения значений. Остается только задать какимто обрзом эту связь! )) есть идеи?

Заранее благодарен, Антон.


 
wal ©   (2006-05-26 10:33) [1]

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

С уважением.


 
Жуков Олег   (2006-05-26 10:45) [2]


> Как сделать чтобы при изменении значения B изменилось значение
> С.Checked и наоборот? Не используя C.OnCick и т.п.
> Область применения: Вы ведете проект. используете различные
> настройки и т.п. которые содержа

- Тогда вообще не нужна переменная, достаточно только C.Checked;
> при изменении значения переменной свойство компонента меняется
> автоматически и наоборот

Так не бывает. Поменяй слово "переменная" на "свойство какого либо объекта", тогда можно сделать. Но в такой постановке будет бесконечный цикл.


 
Kolan ©   (2006-05-26 11:07) [3]


> Заманчиво?

Если честно, то нет. Плохо себе прадставляю 500 CheckBox"ов, за которыми я слежу и радуюсь. Воспользуйтесь лучьше отладчиком.


 
Kolan ©   (2006-05-26 11:08) [4]

А сделать то что вы хотите наверно так можно:
CheckBox1.Checked := B;
Application.ProcessMessages;


 
AntonGF   (2006-05-26 13:11) [5]

давайте попробуем расписать что необходимо делать в обычном (как по книжке)(1) и в предлагаемом мной (2) случае
Действие / (1) надо/не надо / (2) надо/не надо
объявление переменных /+/+
присвоение начальных значений /+/+
заполнение соответствующих свойств компонентов /+/-
обработчик событий компонентов /+/-
Правда во втором случае добавляется ещё какойто механизм реализующий связь, но преимущества по надежности, как минимум, у второго случая на лицо. главное чтобы реализация самого механизма не съела все его плюсы..
а ещё в любой момент времени мы будем видеть те данные которые реально содежатся в переменных, а это уже огого какой +


 
Kolan ©   (2006-05-26 13:19) [6]

а ещё в любой момент времени мы будем видеть те данные которые реально содежатся в переменных, а это уже огого какой
Да я это и сейчас могу поставив соотв брейк поинты, открыв окно Watch и Inspect причем не написав ни срочки кода :)
Брость вы это дело ...


 
AntonGF   (2006-05-26 13:32) [7]

Да не в отлаке дело!! а в эксплуатации! пользователь чтоли будет бреки ставить?!?!?! ну думай!!


 
Ega23 ©   (2006-05-26 13:58) [8]


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


Всё это уже давным-давно реализовано. DBAwareComponents.


 
Сергей М. ©   (2006-05-26 14:03) [9]


> AntonGF   (26.05.06 13:32) [7]


Тебе правильно говорят - всесто переменных реализуй настройки в виде свойств некоего класса. Лучше если класс будет наследником TComponent, а те самые его св-ва - published. Тогда для контроля/модификации "настроек" можно будет задействовать стандартный ObjectInspector (для того, кстати, и разработанный Борландом)


 
tesseract ©   (2006-05-26 14:20) [10]


> Тогда для контроля/модификации "настроек" можно будет задействовать
> стандартный ObjectInspector (для того, кстати, и разработанный
> Борландом)

не забываем про ComponentState в таком случае.


 
Сергей М. ©   (2006-05-26 14:22) [11]


> не забываем про ComponentState в таком случае.


Это не ко мне, это - к Автору.


 
han_malign ©   (2006-05-26 14:23) [12]


> какойто механизм реализующий связь, но преимущества по надежности,  как минимум, у второго случая на лицо

- угу, любые порочащие свизи сказываются на лице...
И рагребай потом все твои надежные кросс-линки...
Есть четко оговоренное "свойство", о котором известно что, где, когда и как - а ты предлагаешь протянуть "надежную" цепочку через фиг знает что, где и как, уперев ее концом в недоуменного пользователя, который думает - что же это за типа (Б) переменная...


 
StriderMan ©   (2006-05-26 17:19) [13]

а если указателем...?


 
AntonGF   (2006-05-26 17:38) [14]

Практические решения приветствуются, тем более что для знающего человека checkbox на форму кинуть и связать его с переменной труда не составит, зато сэкономит народу массу времени.. Делфи то надеюсь у всех есть? ))) так что лучше 1 раз пример пощупать чем 100 раз о нем услышать..

С радостью приму любые нароботки! Антон.


 
saxon   (2006-05-26 17:39) [15]

В .NET это называеться Binding (если я правильно понял автора).


 
StriderMan ©   (2006-05-26 17:49) [16]

мысль:

0. Всем чек-боксам присвоить в Tag порядковые номера. проще всего в ран-тайме
1. завести массив boolean соответствующий чек-боксам, причем индекс в массиве соответствует Tag в чек-боксе
2. у всех чек-боксов сделать один обработчик OnClick, в котором по Tag выставляется значение в соответствующем элементе массива.


 
StriderMan ©   (2006-05-26 17:51) [17]

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


 
Ega23 ©   (2006-05-26 18:27) [18]

И всё-таки я не понимаю автора.
Зачем создавать ещё одну переменную и связывать её со свойством объекта, если есть само свойство объекта???


 
tesseract ©   (2006-05-26 18:34) [19]


> Зачем создавать ещё одну переменную и связывать её со свойством
> объекта, если есть само свойство объекта???

И можно затолкать ссылку на сам объект в создаваемый объект ?


 
Жуков Олег   (2006-05-26 21:43) [20]


> Да не в отлаке дело!! а в эксплуатации! пользователь чтоли
> будет бреки ставить?!?!?! ну думай!!
>

Некоторые, особо привередливые пользователи (например я) хотят, чтобы в окне настроек были кнопки OK и Отмена. И как ты в случае [0] например реализуешь отмену сделанных в окне изменений?


 
tesseract ©   (2006-05-26 22:49) [21]

некоторые пользователи (например бухгалтеры) Хотят чтобы кнопок было как можно меньше.
Оптимал - BeOS. Там в окне настроек только одна кнопка -"Apply". В отличие от win, где их 3. "OK", "Apply", "Cancel", и изредка "Default".


 
Жуков Олег   (2006-05-26 23:37) [22]


> tesseract ©   (26.05.06 22:49) [21]


Я даже могу представить бухгалтерскую программу, в которой не будет кнопки "Отмена". Бухгалтер нечаянно задевает кнопку "Новый документ". Появляется окно выбора со списком "Счёт-фактура", "Накладная", "Платёжное поручение", и единственной кнопкой "ОК". По нажатии на неё открывается окно редактирования нового документа, с полями ввода, и единственной кнопкой "Сохранить". При её нажатии выясняется, что перед тем как нажать необходимо заполнить все обязательные поля. Заполняем их, и нажимаем "Сохранить",  Появляется запрос "Провести документ?" с единственной кнопкой "Да". Непосредственно по нажатии которой автоматически формируются проводки, и по системе клиент-банк передаётся запрос на перечисление денег со счёта. После того, как документ сохранён, проведён, и напечатан наконец-то возвращаемся обратно в список документов, и имеем возможность удалить ошибочно введённый. Конечно же, при удалении никаких окон подтверждений - зачем нам лишние кнопки?


 
Джо ©   (2006-05-26 23:54) [23]

> [22] Жуков Олег   (26.05.06 23:37)

Вообще, насколько я понял, речь идет о том, что, например, кнопка "Отмена" дублирует "крестик", закрывающий окно без изменений. А "Apply" в Windows вообще абсурдная кнопка, ибо, после нажатия на нее, кнопка "Отмена" не действует, как ей положено.


 
tesseract ©   (2006-05-27 00:30) [24]

Apply - полезная кнопка - OK - абсурдная :-)  ибо равно OK + крестик. useit.com рулит :-)))))


 
AntonGF   (2006-05-29 09:12) [25]

Ок. Всем большое спасибо! Думаю больше ничего нового мы тут не увидим. огромоне спасибо всем участникам. Однако если все же будут реальные примеры с радостью рассмотрю все! ещё раз спасибо.. удачи всем!



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

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

Наверх




Память: 0.51 MB
Время: 0.011 c
15-1149761362
Layner
2006-06-08 14:09
2006.07.09
Хочу написать "Электронный термометр", как лучше сделать


3-1146915773
vvh
2006-05-06 15:42
2006.07.09
Графическое представление открытия запроса


15-1149861807
Vlad
2006-06-09 18:03
2006.07.09
Сходства не находите? :-)


6-1141150518
indy_question
2006-02-28 21:15
2006.07.09
Сложности с TidTCPClient.Write();


2-1150435479
nickmas
2006-06-16 09:24
2006.07.09
Вопрос по COM: как обратиться серверу к клиенту?





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