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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.099 c
5-1135093004
asd
2005-12-20 18:36
2006.07.09
Есть ли в Delphi 7 компонент, похожий на Edit?


1-1149054716
Dr. Andrew
2006-05-31 09:51
2006.07.09
Как тобразить в подсказке Hint символы U+007C?


2-1150390833
learner
2006-06-15 21:00
2006.07.09
Корректное "не создание" класса


1-1148865389
shake-c
2006-05-29 05:16
2006.07.09
Окно в потоке delphi


15-1149680139
космический дворецкий
2006-06-07 15:35
2006.07.09
Упражнения для развития артикуляции