powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не уверен... правильно ли написал...
6 сообщений из 6, страница 1 из 1
Не уверен... правильно ли написал...
    #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
Не уверен... правильно ли написал...
    #34104250
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
макроподстановка - зло

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

ну и т.д.
плохой и некрасивый код
...
Рейтинг: 0 / 0
Не уверен... правильно ли написал...
    #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
Не уверен... правильно ли написал...
    #34105729
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100макроподстановка - зло
....
ну и т.д.
плохой и некрасивый код

Макроподстановка - очень удобный инструмент. Не использовать его глупо. Красота кода не в наличии & , а в его универсальности, как у коллеги, например.
...
Рейтинг: 0 / 0
Не уверен... правильно ли написал...
    #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
Не уверен... правильно ли написал...
    #34107008
ORAselect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, а что разработчики в 1917 году писали?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Не уверен... правильно ли написал...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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