powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно обработать .protect в datawindow expression
9 сообщений из 9, страница 1 из 1
Как правильно обработать .protect в datawindow expression
    #32436486
NewOne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Формалист Филипп потребовал переспросить в новой ветке...

Собственно вопрос:
Как правильно в dw expression сослаться на текущее значение проперти .protect? Например, переустанавливаем цвет или цвет фона в зависимости от текущего значения выражения .protect для конкретного поля конкретной строки...
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436683
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще для DW:
либо
this.Describe("<Columnname>.Protect")
или
this.Object.<Columnname>.Protect

НО ИМХО, так как свойво protect установить для строку нельзя, то без
дополнительного поля, значение которого и будет опряделять изменение цвета, не обойтись.

Если возможно как нить по другому, то я с радостью приму к сведению.

Но вот:

These properties are set per column and can only be changed on a per row base by
declaring an expression for the properties.

For instance, if you want to change the color based on something unrelated to the
data in the datawindow you will need to add a hidden computed column/field, and set
the background color of the desired column to be based on the value in the computed
column/field. Then just set the value in the computed column/field for that row, to
set the color of the desired column for that row.

I'm afraid there's no way to automate this but please find below a do-it-yourself
w/a which is our solution:

1* Create a new tabular dw which SQL select is:
SELECT emp_fname, emp_lname
FROM employee

2* Add two computed fields in the footer band called CF_ROW and CF_COL
Expression for CF_ROW is 0, expression for CF_COL is ""
3* Set the footer height to 0 to hide the computed fields
4* Select emp_fname in the detail band
5* Enter an expression for the desired property (e.g., Font Background Color)
6* Enter:
If (GetRow()= cf_row and string(cf_col) = "emp_fname", RGB(192,192,192), RGB(255,
255, 255))

//You have to do this for all columns for any property
7* Select emp_lname in the detail band
8* Enter an expression for the same property
9* Enter:
If (GetRow()= cf_row and string(cf_col) = "emp_lname", RGB(192,192,192), RGB(255,
255, 255))

10* Place the dw inside the dw control on a sheet
11* Add the window a singlelineedit control called SLE_1, an editmask EM_1 and a
command button CB_1
12* Regarding the editmask, set its mask to ## and check the spin property
13* Add the following code to CB_1 clicked event:
dw_1.object.cf_row.expression = em_1.text
dw_1.object.cf_col.expression = "'"+sle_1.text+"'"

14* Run the application
15* Type in SLE_1 a value for the column: either emp_fname, or emp_lname
16* Use the EM_1 spin to increment the row value
17* Click CB_1
=> The new background color will only concern the designed column.

This shows you that you can modify a property w/o altering the whole column or row
so now you can remove controls from the sheet and store their values in variables.
No other way.
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436707
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это официальный ответ от Sybase
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436792
NewOne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Сотников AKA Sybase
Использовать компьютед филдс для установки цвета, это понятно... Хотелось бы только уточнить, что получение цвета с помощью RGB, не слишком, скажем, sophisticated approarch... Правильнее, ИМХО, ориентироваться на виндузовые константы явно указывая из значения, или получая их через что-то типа:describe('ef_sample_wnd_bkgrnd.color').
Describe("<Columnname>.Protect"), как вы изволили выразиться... ...Замечательно. Он возвращает, дефолтное значение и експрешн скрепленные символом табуляции. Если мы не закладываемся на то, что expression это '0' или '1', штука не слишком полезная. Можно-ли получить фактическое значение для известного "поля" и известной строки? Describe('evaluate... здесь сработает? Или выцеплять expression и его эвалюировать?
Да, чуть не забыл - спасибо за ответ!
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436837
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
// Protection may be an expression that we must evaluate
		s_protection = this.Describe(s_token+ ".Protect" )
		IF Pos(s_protection,  "~t" ) >  0  THEN
			// Strip off section prior to tab
			s_protection = Mid(s_protection, Pos(s_protection,  "~t" ) +  1 ,  999 )
			// Strip off last double quote
			s_protection = Left(s_protection, Len(s_protection) -  1 )
		ELSEIF s_protection =  "!"  THEN
			s_protection =  "1 "
		END IF
		// if there are single quotes in the protection expression then 
		// we could have conflicts with the single quotes in the evaluate so
		// add some escape characters
		s_protection = gf_global_replace(s_protection,  "'", "~~~'" )
		s_eval =  "Evaluate('" + s_protection + "', "  + String(l_row) +  ")" 
		s_eval = this.Describe(s_eval)
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436889
NewOne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Филипп!
Этого я и опасался - выцеплять и эвалюировать. Да ещё про одинарные кавычки не забывать. Внутри expression это будет весьма громоздко... Ну да ладно...
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436897
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего опасаться. Вам же уже дали (не я) правильный ответ на не совсем правильно поставленный вопрос.
Вы же собрались цвет\фон менять в зависимости от .protectа.
Но .protect может быть conditional от ряда к ряду только основываясь на значении какой то колонки в datawindow в данном ряду.
Значит expressionы для цвет\фон должны смотреть туда же, а НЕ на .protect expression...
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436935
NewOne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ФилиппЗначит expressionы для цвет\фон должны смотреть туда же, а НЕ на .protect expression...Так и происходит, 'cource. Просто, хотелось укоротить цепочку. А то всегда остается вероятность, при изменении условия на протект не поменяются условия на цвет и наоборот... Конечно, это можно обойти - пусть оба смотрят на значение вычисляемого поля, но тогда - сколько условий на .protect'ы столько (dedicated) computed fields... Не по Оккаму, как-то...
...
Рейтинг: 0 / 0
Как правильно обработать .protect в datawindow expression
    #32436975
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторхотелось укоротить цепочку
Это вы оговорились, хотели удлиннить :-)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как правильно обработать .protect в datawindow expression
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]