Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выделение цветом в гриде. Срочно!!! / 11 сообщений из 11, страница 1 из 1
30.04.2008, 13:34
    #35288488
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
Есть ли возможность выделять цветом при разных условиях, я делаю так:
This.SETALL("dynamicbackcolor", "iif(AT('задержка',контроль)>0, rgb(255,0,0), rgb(255,255,255))", "Column")
THISFORM.grid1.REFRESH()

а кесли пытаюсь добавить др условия с др цветом, то остается только последний

This.SETALL("dynamicbackcolor", "iif(AT('задержка',контроль)>0, rgb(255,0,0), IIF((контроль='Контроль'),RGB(206,239,255),RGB(255,255,255))"", "Column")
THISFORM.grid1.REFRESH()
почему второй вариант не действует?
...
Рейтинг: 0 / 0
30.04.2008, 13:45
    #35288532
stoopper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
По-моему, вместо конструкции
IIF((контроль='Контроль'),RGB(206,239,255),RGB(255,255,255 ))"" , "Column")
нужно
IIF((контроль='Контроль'),RGB(206,239,255),RGB(255,255,255 )))" , "Column")
...
Рейтинг: 0 / 0
30.04.2008, 13:48
    #35288547
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
написала с опечаткой
This.SETALL("dynamicbackcolor", "iif(AT('задержка',контроль)>0, rgb(255,0,0), IIF((контроль='Контроль'),RGB(206,239,255),RGB(255,255,255))", "Column")
THISFORM.grid1.REFRESH()

не выделяет никаким цветом
...
Рейтинг: 0 / 0
30.04.2008, 13:54
    #35288571
stoopper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
Я же и говорю - не хватает ) в конце
...
Рейтинг: 0 / 0
30.04.2008, 13:56
    #35288581
Вика2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
Спасибо
...
Рейтинг: 0 / 0
30.04.2008, 14:04
    #35288622
Выделение цветом в гриде. Срочно!!!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN


DEFINE CLASS form1 AS form


	Top =  0 
	Left =  0 
	Height =  430 
	Width =  375 
	DoCreate = .T.
	Caption = "Form1"
	Name = "Form1"


	ADD OBJECT grid1 AS grid WITH ;
		ColumnCount =  1 , ;
		Height =  400 , ;
		Left =  24 , ;
		Panel =  1 , ;
		RowHeight =  34 , ;
		Top =  20 , ;
		Width =  320 , ;
		Name = "Grid1", ;
		Column1.Width =  244 , ;
		Column1.Sparse = .F., ;
		Column1.Name = "Column1"


	PROCEDURE Load
		create cursor acc (acc c( 20 ))

		insert into acc values('40601810520101234561')
		insert into acc values('40601810520101234562')
		insert into acc values('40601810520101234563')
		insert into acc values('40601810520101234564')
		insert into acc values('40601810520101234565')
		insert into acc values('40601810520101234567')
		insert into acc values('40601810520101234567')
		insert into acc values('40601810520101234567')
		go top

		*left(acc, 3 )+' '+substr(acc, 4 , 2 )+' '+subst(acc, 6 , 3 )+' '+substr(acc, 9 , 1 )+ ' '+substr(acc, 10 , 4 )+' '+substr(acc, 14 )
	endproc
	
	procedure init 
		with this.grid1.column1
				with .text1
					BorderStyle =  0 
					Format = "R"
					InputMask = "999 99 999 9 9999 9999999"
					Margin =  0 
				endwith
				text to .dynamicbackcolor noshow pretext  15 
					icase(acc='40601810520101234561',  10000 ,
						  acc='40601810520101234562',  20000 , 
						  acc='40601810520101234563',  30000 , 
						  acc='40601810520101234564',  50000 ,
						  acc='40601810520101234565',  60000 ,
						   90000 )
				endtext
		endwith

ENDDEFINE

значения функции rgb предвычисляйте и вставляйте в условей в виде готового
значения
...
Рейтинг: 0 / 0
30.04.2008, 16:42
    #35289267
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
если интересно, то вот мой класс грида, где выделяется активная строка, удаленные строки а так же можно выдеять строки мышкой и(или) клавой на манер файлманагера. :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
**************************************************
*-- Class:        grid_color (c:\)
*-- ParentClass:  grid
*-- BaseClass:    grid
*-- Time Stamp:   10/20/06 01:04:02 PM
*
DEFINE CLASS grid_color AS grid


	ColumnCount = - 1 
	Anchor =  0 
	DeleteMark = .F.
	Height =  200 
	Width =  320 
	*-- nRecno
	nrecno =  1 
	selectstringsource = ""
	Name = "grid_color"



	*-- Метод, для массового выделения строк
	PROCEDURE selectstring
		LPARAMETERS lcSelectString
		*По определенному полю, имя которого передается в д-ый метод выделяются строки 
		*для своеобразного мультиселекта.
		*если в поле стоит  1  - красный цвет шрифта, а если к тому же данная стока в фокусе - тогда
		*текст выделяется жирным шрифтом. 
		*Если  0  (по умолчанию) или любая другая цифра - цвет шрифта остается черным.

		*Возвращает:
		*   0  - если не передан параметр
		* - 1  - если не верно узнан параметр (не существует такого поля)
		* - 2  - если произошла другая ошибка
		*   1  - если удачно установлено свойство мультиселект в гриде
		LOCAL lnError
		lnError= 0 
		ON ERROR lnError=ERROR()
		IF TYPE(lcSelectString)='L' &&параметр не передан
			ON ERROR 
			RETURN  0  
		ENDIF 
		IF TYPE(lcSelectString)='N' &&Если таблица.поле существует и тип Num
			this.SetAll("DynamicForeColor","IIF(&lcSelectString=1, RGB(255,0,0),RGB(0,0,0))", "column")
			*Отмеченную выделенную строку (lcSelectString= 1 ) красным цветом
			this.SetAll("DynamicFontBold","IIF(&lcSelectString=1 and RECNO()=this.nrecno, .T., .F.)", "column")
			*Отмечею строку жирным, которая выделена (lcSelectString= 1 ) и находиться в фокусе
			IF lnError= 0 
				ON ERROR 
				this.selectstringsource=lcSelectString
				RETURN  1 
			ELSE 
				ON ERROR 
				RETURN - 2 
			ENDIF 
		ELSE 
			ON ERROR 
			RETURN - 1 
		ENDIF 
	ENDPROC


	PROCEDURE MouseDown
		LPARAMETERS nButton, nShift, nXCoord, nYCoord
		IF !EMPTY(this.selectstringsource) AND nButton= 1 
			this.KeyPress( 0 ,nShift)
		ENDIF 
	ENDPROC


	PROCEDURE KeyPress
		LPARAMETERS nKeyCode, nShiftAltCtrl
		IF !EMPTY(this.selectstringsource)
			LOCAL lcTableName, lcFieldName
			lcTableName=LEFT(this.selectstringsource,AT('.', this.selectstringsource)- 1 )
			lcFieldName=RIGHT(this.selectstringsource, LEN(this.selectstringsource)-AT('.', this.selectstringsource))
			DO CASE 
				CASE m.nKeyCode= 22 
					NODEFAULT
					replace &lcFieldName WITH ABS(&lcFieldName - 1 ) IN &lcTableName
					KEYBOARD '{DNARROW}'  PLAIN CLEAR 
				CASE m.nKeyCode= 50  AND m.nShiftAltCtrl= 1 
					replace &lcFieldName WITH ABS(&lcFieldName - 1 ) IN &lcTableName
					KEYBOARD '{DNARROW}'  PLAIN CLEAR 
				CASE m.nKeyCode= 56  AND m.nShiftAltCtrl= 1 
					replace &lcFieldName WITH ABS(&lcFieldName - 1 ) IN &lcTableName
					KEYBOARD '{UPARROW}'  PLAIN CLEAR 
				CASE m.nKeyCode= 0  AND m.nShiftAltCtrl= 2  &&из MouseDown передается  0  + nShiftAltCtrl( 1 -Shift,  2 -Ctrl)
					replace &lcFieldName WITH ABS(&lcFieldName - 1 ) IN &lcTableName
				CASE m.nKeyCode= 0  AND m.nShiftAltCtrl= 1  &&из MouseDown передается  0  + nShiftAltCtrl( 1 -Shift,  2 -Ctrl)
					lnRecnoEnd=RECNO(lcTableName)
					SELECT MIN(nRecno) FROM (SELECT RECNO() as nRecno , &lcFieldName FROM &lcTableName) c1 ;
					WHERE &lcFieldName= 1  GROUP BY &lcFieldName HAVING MIN(nRecno)>lnRecnoEnd INTO ARRAY a_SelectString
					IF TYPE('a_selectString(1)')<>'N'
						SELECT MAX(nRecno) FROM (SELECT RECNO() as nRecno , &lcFieldName FROM &lcTableName) c1 ;
						WHERE &lcFieldName= 1  GROUP BY &lcFieldName HAVING MAX(nRecno)<lnRecnoEnd INTO ARRAY a_SelectString
					ENDIF 
					IF TYPE('a_selectString(1)')='N'
						lcCondition=IIF(lnRecnoEnd<a_selectString( 1 ),'BETWEEN(RECNO(),lnRecnoEnd,a_selectString(1))',;
																	'BETWEEN(RECNO(),a_selectString(1), lnRecnoEnd)')
						UPDATE &lcTableName SET &lcFieldName= 1  WHERE &lcCondition
						GO lnRecnoEnd IN &lcTableName
					ENDIF 
					DIMENSION a_selectString( 1 )
					RELEASE a_selectString
			ENDCASE 
		ENDIF
	ENDPROC


	PROCEDURE Init
		this.nrecno=RECNO()
		this.SetAll("DynamicBackColor" , ;
			" IIF(DELETED()=.T., RGB(129,129,129), IIF(RECNO()=this.nrecno, RGB(215,235,255), RGB(255,255,255)))" , "Column")
		*Выделяется синим цветом активная строка и серым строка помеченная на удаление
		FOR k= 1  TO this.ColumnCount
			this.Columns(k).Header1.Alignment= 2 
			this.Columns(k).Header1.FontBold=.t.
		ENDFOR 
		*Заголовк столбца, выравнивание по центру жирным шрифтом.
		LOCAL lcControl
		FOR k= 1  TO this.ColumnCount
			lcControl=this.Columns(k).currentControl
			BINDEVENT(this.Columns(k).&lcControl, "keyPress", this, "KeyPress")
			BINDEVENT(this.Columns(k).&lcControl, "MouseDown", this, "MouseDown")
		ENDFOR 
	ENDPROC


	PROCEDURE AfterRowColChange
		LPARAMETERS nColIndex
		this.nrecno=RECNO()
		this.Refresh()
	ENDPROC


	PROCEDURE Refresh
		this.nrecno=RECNO()
	ENDPROC


ENDDEFINE
*
*-- EndDefine: grid_color
**************************************************
...
Рейтинг: 0 / 0
30.04.2008, 18:08
    #35289438
Выделение цветом в гриде. Срочно!!!
а если таблица буфферизированная и изначально она пустая, то как сделать подсветку строк при добавлении новой строки? у меня при добавлении новых строк в ПУСТУЮ бефферизированную таблицу выделяется весь диапазон строк от начала и до последней добавленной строки... а подсветка одной строки получается только после того как, например, кликом мышкой выделишь какую-нибудь одну строку...
...
Рейтинг: 0 / 0
04.05.2008, 10:11
    #35291625
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
может после добавления перемещать фокус на грид?
...
Рейтинг: 0 / 0
04.05.2008, 11:09
    #35291733
Выделение цветом в гриде. Срочно!!!
Фокус и так перемещается.
Помогло следующее: после добавления новой записи свойству nrecno присваивать значение GETNEXTMODIFIED(0), т.е.
INSERT INTO.....
THISFORM.nrecno = GETNEXTMODIFIED(0)
...
Рейтинг: 0 / 0
04.05.2008, 11:57
    #35291824
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выделение цветом в гриде. Срочно!!!
Еще как вариант добавить "GO BOTTOM"
только что протестил, работает :)
Код: plaintext
1.
2.
3.
INSERT INTO c222 (c1) VALUES ('')
GO BOTTOM 
thisform.Refresh()
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Выделение цветом в гриде. Срочно!!! / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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