Контролы
Владимир Журавлев, http://nsvisual.com
Контролы являются далеко не самыми часто используемыми компонентами Фокса. Вот что могу посоветовать по их использованию Пусть у нас есть поле типа Date . Вводим неправильную дату. Идет сообщение на Английском, по поводу которого ольшинство Русскоязычных пользователей возражают. Использование Set Notify off убирает сообщение , но не позволяет ничего сделать в Valid. Обычным решением является использование текстовой коробки с форматом даты. Но в этом случае приходится использовать двойную конвертацию из даты и назад и не удается использовать замечательное свойство привязки к данным-controlsource. Обработку ошибок в этом случае помещают в interactivechange или keypress Вот какой предлагается рецепт. Сделаем контрол с двумя текстовыми коробками-видимой и невидимой. Заведем контролу свойство-controlsorce. В событи Init напишем: set notify off
this.text1.controlsource=this.controlsource
this.text1.width=this.width
this.text2.width=this.width
this.text2.value=dtoc(this.text1.value)
Its refresh event has code
this.text2.value=dtoc(this.text1.value)
Формат видимой коробки - DMY Первоначальное значение Dateformat-D В valid запишем:
Local oo
If type(this.value)=C and this.format=D
If len(alltrim(substr(this.value,7,4)))=2
yi=int(val(alltrim(substr(this.value,7,4))))
If yi12
=messagebox(Неверный месяц,Предупреждение )
Return 0
Endif
************************************
If dd=0
=messagebox(Неверный день ,Предупреждение)
Return 0
Endif
******************************
If mm0
k=yy-4*int(yy/4)
If k!=0 and dd>nn[mm]
=messagebox(Неверный день ,Предупреждение)
Return 0
Endif
If k=0 and dd>nn[mm] and mm!=2
=messagebox(Неверный день ,Предупреждение)
Return 0
Endif
If k=0 and dd>nn[mm] and mm!=2
=messagebox(Неверный день ,Предупреждение)
Return 0
Endif
If k=0 and dd>nn[mm]+1 and mm=2
=messagebox(Wrong day ,Alarm)
Return 0
Endif
Endif
Endif
this.parent.text1.value=ctod(this.value)
return 1
Теперь смело можем класть контрол на формы , присваивать его controlsource нужным полям и все будет говорить по Русски. Как это работает? Невидимый текст2 на самом деле привязывается к данным, а видимый все отражает. Цветная кнопка и кнопка с картинкой Вы наверное замечали, что в кнопках нельзя изменять цвет. Еще есть другая проблема: Если поместить в грид в непервую его колонку картинку, а в ее click какой нибудь код, то он сплошь и рядом не сработает. Думаю, здесь что то с координатами. Картинка просто толком не может понять, когда в нее тыкаются мышью, а кнопка может. Таким образом напрашивается на базе контрола сделать кнопку с настраиваемым цветом и кнопку с изменяющимися картинками , которую можно класть в грид с любым кодом. Итак сделаем контрол -цветную кнопку и заведем в нем свойство caption , notsiz ( определяет, будем ли масштабировать кнопку), и метод set selcolor
this.label1.forecolor=rgb(0,0,255)
this.specialeffect=1
Init event has the following code
This.label1.forecolor=this.forecolor
This.label1.backcolor=this.backcolor
If not empty(this.caption)
This.label1.caption=alltrim(this.caption)
This.label1.top=2+int((this.height-20)/2)
If not this.notsiz
This.width=int(this.label1.FontSize*TXTWIDTH(alltrim(this.label1.caption),this.label1.FontName,this.label1.FontSize ))+1
Endif
Endif
*!* this.width=this.label1.width+1
This.command1.width=this.width-3
This.command1.height=this.height-2
This.refresh
Метод Click this.parent.click Теперь , если контрол положить на экран и задать его backcolor и caption, он их отобразить. Изменнение Sinked по нажатию кнопки дает эффект ее утопления и поднятия . Контрол для грида имеет внутри кнопку со стилем-невидимости ( не установка visible=.f.) а именно стиля. Click кнопки имеет код - this.parent.click Две картинки Заведем контролу два свойства picture1, picture2 Init контрола присваивает из этих свойств свойства картинок. Заведем теперь метод переключения видимой картинки и смело можно класть контрол в грид Я обычно кладу в грид два разных контрола , и переключаю их с помощью setall dynamiccurrentcontrol Итого получается уже четыре возможности показать разные картинки-открытые и закрытые папки, доступные и недоступные кнопки. Vaszil Besneyee поставил задачу показать в гриде чекбокс, чей текст зависит от одного поля таблицы, а статус от другого. Я предложил следующее решение. Заведем контрол и положим туда чекбокс с пустым caption Добавим туда текстовую коробку рид онли. Заведем в контроле два свойства- controlsource, и controlsource1 В Init контрола присвоим эти свойства controlsource чекбокса и текстовой коробки. this.check1.controlsource=this.controlsource this.text1.controlsource=this.controlsource1 Все - кладите контрол в грид, цепляейте его к двум полям и текст тестбоксах покажет значения поля. Вообще контрол обладает удивительным свойством решать кучу проблем, связанных с гридом, которые по другому никак не решаются. Приведенные коды грязноваты, но я надеюсь, если кто ими воспользуется , сделает их такими, какими нужно.
www.sdteam.com
Базы данных 28-01-2007 В России началось первое внедрение SAP for Insurance 24-09-2008 Базы данных Сегодня компании «Национальная страховая группа», SAP и группа Energy Consulting объявили о начале этапа опытно-промышленной эксплуатации первого в России проекта внедрения специализированного отраслевого решения для страховых компаний SAP for Insurance.Проект создания в «Национальной страховой группе» корпоративной информационной системы на базе решений SAP стартовал в 2007 году и реализуется поэтапно. В рамках проекта внед...
"Комстар-ОТС" завершил внедрение системы Oracle E-Business Suite 07-07-2008 Базы данных Оператор связи «Комстар-Объединенные ТелеСистемы» завершил проект по внедрению полнофункциональной ERP-системы Oracle E-Business Suite. Общий объем инвестиций в проект, включая услуги, лицензии, обучение, поддержку и оборудование, составил около 12 млн. долларов. Внедрение ERP-системы в «Комстар-ОТС» началось в 2005 году. Проект был выполнен в несколько этапов. Генеральным подрядчиком выступила компания «Квазар-Микро» (теперь работающая под б...
Oracle купила компанию Bridgestream 09-09-2007 Базы данных Корпорация Oracle сегодня объявила о покупке компании Brigestream, частной компании, разрабатывающей программное обеспечение для разграничения прав доступа. Сумма покупки компаниями не сообщается.Купленная Bridgestream довольно хорошо известна на западном корпоративном рынке за счет разработок, которые внедряются в корпоративные системы управления и разграничивают доступ сотрудников к тем или иным данным в зависимости от должностных обязанностей ...
Oracle открывает научно-исследовательскую сеть в азиатско-тихоокеанском регионе 24-07-2007 Базы данных Компания Oracle сегодня объявила об открытии научно-исследовательской сети, объединившей 19 исследовательских и внедренческих центров, расположенных на материковой Азии и в Японии.Как сообщает компания, новая сеть центров займется тестированием самых передовых разработок и технологий в области программного и аппаратного обеспечения в регионе.Наиболее крупные центры расположены в Пекине (Китай), Гургаоне (Индия), Сеуле (Южная К...
Использование технологий WWW для доступа к базам данных 06-06-2007 Базы данных Глава 1. Основы использования WWW - технологий для доступа к существующим базам данныхГлава 2. Подготовка гипертекстовых документов для World Wide WebГлава 3. Установка и администрирование WWW - сервераГлава 4. Использование CGI при создании интерактивных интерфейсовГлава 5. Использование пакета Cold Fusion для MS Windows при построении WWW - интерфейсов к базам данныхГлава 6. Использование языка PerlГлава 7. Использование пакета We... |