Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не уверен... правильно ли написал... / 6 сообщений из 6, страница 1 из 1
03.11.2006, 13:38
    #34104045
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
Все тот же класс чекБокса

Постороение индексов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
WITH This.Form1.Grid2
	FOR m.my_n_kol =  1  TO .ColumnCount
		This.order_tab(.Columns[m.my_n_kol])
	ENDFOR
	SELECT mat_post
	SET ORDER TO
	GO TOP IN mat_post
ENDWITH
Метод order_tab
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PARAMETERS obj
m.my_tabl = m.obj.Parent.RecordSource
m.my_order = m.obj.ControlSource
m.my_order = IIF(AT('.',m.my_order)# 0 ,RIGHT(m.my_order,LEN(m.my_order)-RAT('.',m.my_order)),m.my_order)
m.my_order = UPPER(IIF(TYPE(m.my_tabl+'.'+m.my_order)="M" OR (FSIZE(m.my_order,m.my_tabl)> 150  AND TYPE(m.my_tabl+'.'+m.my_order)="C"),;
			"LEFT(&my_order.,150)",IIF(TYPE(m.my_tabl+'.'+m.my_order)#"U",m.my_order,'')))
IF !EMPTY(m.my_order) AND m.my_order#'.'
	m.my_tag = STRTRAN(STRTRAN(m.my_order,"LEFT(",""),",150)","")
	SELECT &my_tabl.
	INDEX ON &my_order. TAG (UPPER(m.obj.Name)) ASCENDING
	INDEX ON &my_order. TAG (UPPER(m.obj.Name+"_D")) DESCENDING
ENDIF

Сортировка
Код: plaintext
ThisFormset.order_set(This)

Метод order_set
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
PARAMETERS obj
This.Form1.LockScreen = .T.
m.my_tabl = m.obj.Parent.Parent.RecordSource
m.my_tag = UPPER(m.obj.Parent.Name)
SELECT &my_tabl.
DO CASE
	CASE AT("TAG &my_tag._D",SET("Order"))# 0 
		SET ORDER TO ("&my_tag.")
	CASE AT("TAG &my_tag.",SET("Order"))# 0 
		SET ORDER TO ("&my_tag._D")
	OTHERWISE
		SET ORDER TO ("&my_tag.")
ENDCASE
This.buildgrid
This.Form1.LockScreen = .F.

Выделение с шифтом
Метод MouseDown Нужного чекБокса
Код: 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.
LPARAMETERS nButton, nShift, nXCoord, nYCoord
IF !This.Grup_check  && не надо выделять
	RETURN
ENDIF
This.Parent.Parent.Parent.LockScreen = .T.
m.my_tabl = This.Parent.Parent.RecordSource
m.my_change = This.Parent.ControlSource
DO CASE
	CASE m.nShift= 1 
		SELECT &my_tabl.
		m.my_order = IIF(!EMPTY(SET("Order")),STRTRAN(TAG(),'_D',''),'')
		IF !EMPTY(m.my_order)
			m.my_order = This.Parent.Parent.&my_order..ControlSource
			m.my_order = IIF(AT('.',m.my_order)# 0 ,RIGHT(m.my_order,LEN(m.my_order)-RAT('.',m.my_order)),m.my_order)
			m.my_order = UPPER(IIF(TYPE(m.my_tabl+'.'+m.my_order)="M" OR (FSIZE(m.my_order,m.my_tabl)> 150  AND TYPE(m.my_tabl+'.'+m.my_order)="C"),;
						"LEFT(&my_order.,150)",IIF(TYPE(m.my_tabl+'.'+m.my_order)#"U",m.my_order,'')))
			m.my_order = "ORDER BY " + m.my_order + IIF(AT('_D',TAG())# 0 ,' DESCENDING','')
		ENDIF
		SELECT RECNO() as rec_check FROM mat_post &my_order INTO CURSOR check_cursor
		LOCATE FOR rec_check = This.Old_rec
		This.Old_rec = RECNO(m.my_tabl)
		m.my_nach = RECNO('check_cursor')
		LOCATE FOR rec_check = RECNO(m.my_tabl)
		m.kon = RECNO('check_cursor')
		m.my_step = IIF(m.my_nach>m.kon, 1 ,- 1 )
		DO WHILE RECNO('check_cursor') # m.my_nach
			GO check_cursor.rec_check IN &my_tabl.
			REPLACE &my_change. WITH IIF(&my_change.,.F.,.T.) IN &my_tabl.
			SKIP m.my_step IN check_cursor
		ENDDO
		IF This.Old_rec> 0  AND This.Old_rec<=RECCOUNT(m.my_tabl)
			GO This.Old_rec IN &my_tabl.
		ENDIF
		USE IN check_cursor
	OTHERWISE
		This.Old_rec = RECNO(m.my_tabl)
ENDCASE
This.Parent.Parent.Parent.LockScreen = .F.

Есть ли есть глюки плиз укажите на них...
...
Рейтинг: 0 / 0
03.11.2006, 14:21
    #34104250
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
макроподстановка - зло

in (lcAlias)
select (lcAlias)
.....

ну и т.д.
плохой и некрасивый код
...
Рейтинг: 0 / 0
03.11.2006, 14:39
    #34104339
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
Вопрос не в красивом коде...
А в его функциональности...

Мне надо что б в неЗАВИСИМОСТи от таблицы и сортировки проставлялисЪ отметки от(начала/конца) и до(конца/начала)...

Кстати есть баг...

правильный селект в MouseDown
Код: plaintext
1.
2.
3.
4.
5.
6.
		IF AT('LEFT(',my_order)= 0 
			SELECT RECNO() as rec_check FROM mat_post &my_order. INTO CURSOR check_cursor
		ELSE
			SELECT RECNO() as rec_check, &my_order. as m_order FROM mat_post INTO CURSOR check_cursor
			m.dop_order = IIF(AT('_D',TAG())# 0 ,' DESCENDING','')
			SELECT * FROM check_cursor ORDER BY m_order &dop_order. INTO CURSOR check_cursor
		ENDIF
И забыл метод KeyPress чекБокса
Код: plaintext
1.
2.
3.
IF !This.Grup_check
	RETURN
ENDIF
This.Change_Loc = .T.
и AfterColRowChange грида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
LPARAMETERS nColIndex
m.my_obj = 'This.Column' + ALLTRIM(STR(This.ActiveColumn)) + '.Standart1'
IF TYPE(m.my_obj+'.Change_Loc')="U"
	RETURN
ENDIF
m.my_obj = &my_obj.
IF !m.my_obj.Change_Loc
	RETURN
ENDIF
m.my_tabl = m.my_obj.Parent.Parent.RecordSource
m.my_obj.Old_rec = RECNO(m.my_tabl)
m.my_obj.Change_Loc = .F.

А по поводу красоты кода...
У меня все СА собираются через макро-подстановку...
Дело как-говорится привычки ;)
...
Рейтинг: 0 / 0
04.11.2006, 16:12
    #34105729
ORAselect
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
alex11100макроподстановка - зло
....
ну и т.д.
плохой и некрасивый код

Макроподстановка - очень удобный инструмент. Не использовать его глупо. Красота кода не в наличии & , а в его универсальности, как у коллеги, например.
...
Рейтинг: 0 / 0
06.11.2006, 07:19
    #34106733
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
Макро - оно конечно здорово - тока пихать его не думая и не обращая внимания на замечание разработчиков - я думаю - уж как минимум опрометчиво

Help Tip
Whenever possible, use a name expression instead of macro substitution. A name expression operates like macro substitution. However, a name expression is limited to passing character strings as names. Use a name expression for significantly faster processing if a command or function accepts a name (a file name, window name, menu name, and so on).
...
Рейтинг: 0 / 0
06.11.2006, 13:17
    #34107008
ORAselect
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не уверен... правильно ли написал...
Интересно, а что разработчики в 1917 году писали?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не уверен... правильно ли написал... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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