Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Повернуть Field в отчете используемом с ReportListener. / 6 сообщений из 6, страница 1 из 1
19.12.2011, 11:00
    #37582592
diesel_216
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
Здравствуйте!

В VFP 9.0 повернуть field не состовляет труда. Нужно в окне свойств field, в закладке Advanced установить размер угла, на который нужно повернуть field, и field поворачивается.
Но если отчет использовать с объектом ReportListener (т.е. report form Report1 PREVIEW object loRepList), то field не поворачивается. Может кто-нибудь подскажет что нужно сделать для поворота field с использованием отчета с ReportListener ? Может нужно выполнить какой-то метод ReportListener по умолчанию или установить какое-либо свойство?
...
Рейтинг: 0 / 0
21.12.2011, 11:25
    #37586416
diesel_216
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
Неужели никто не поворачивал field-ы таким способом?
...
Рейтинг: 0 / 0
23.12.2011, 18:29
    #37591323
diesel_216
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
Нашёл!
Для того что бы повернуть field с использованием отчета с ReportListener нужно выполнить следующее:

Код: sql
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.
set path to 'd:\test'

local oListener
oListener = createobject("rotateText")
oListener.ListenerType = 1
report form report1 preview object oListener

#define FRX_OBJCOD_PAGEHEADER 1 

DEFINE CLASS RotateText AS ReportListener
	IsInPageHeader = .F.
	
	procedure Init() 
		declare integer GdipRotateWorldTransform In GDIPlus.Dll integer graphics,single angle,integer enumMatrixOrder_order
		declare integer GdipTranslateWorldTransform In GDIPlus.Dll integer graphics,single dx,single dy,integer enumMatrixOrder_order
		declare integer GdipSaveGraphics IN GDIPlus.DLL integer graphics, integer @xx
		declare integer GdipRestoreGraphics IN GDIPlus.DLL integer graphics, integer xx
	endproc

	procedure BeforeBand(nBandObjCode, nFRXRecNo) 
		dodefault(nBandObjCode, nFRXRecNo)
		if  (nBandObjCode = FRX_OBJCOD_PAGEHEADER)
			THIS.IsInPageHeader = .T.
		endif  
	endproc 

	procedure AfterBand(nBandObjCode, nFRXRecNo)
		if (nBandObjCode = FRX_OBJCOD_PAGEHEADER)
			THIS.IsInPageHeader = .F.
		endif 
		DODEFAULT(nBandObjCode, nFRXRecNo)
	endproc 

	procedure Render(nFRXRecNo, nLeft, nTop, nWidth, nHeight,nObjectContinuationType, cContentsToBeRendered, GDIPlusImage) 
		local xx,x,y,z
		xx = 0

		if  this.IsInPageHeader
			* get appropriate versions of coords
			x = nLeft
			y = nTop

			* save the current state of the graphics handle
			z = GdipSaveGraphics(this.GDIPlusGraphics, @xx)

			* now move the 0,0 point to where we'd like it to be
			* so that when we rotate we're rotating around the
			* appropriate point 
			z = GdipTranslateWorldTransform(this.GDIPlusGraphics,x,y,0)
			* should check z here -- will be 0 if no error occurred

			* now change the angle at which the draw will occur
			z = GdipRotateWorldTransform(this.GDIPlusGraphics,-45,0)
			* should check z as above

			* restore the 0,0 point
			z = GdipTranslateWorldTransform(this.GDIPlusGraphics,-x,-y, 0)
			* should check z as above 
		endif

		* explicitly call the base class behavior when we are ready for it

		dodefault(nFRXRecNo, nLeft, nTop, nWidth, nHeight, nObjectContinuationType, cContentsToBeRendered, GDIPlusImage)

		* put back the state of the graphics handle 
		if this.IsInPageHeader
			GdipRestoreGraphics(this.GDIPlusGraphics, xx)
		endif 

		* don't let the base class behavior draw 
		* when and how it would otherwise do it 
		nodefault
	endproc 
enddefine
...
Рейтинг: 0 / 0
23.12.2011, 18:38
    #37591339
diesel_216
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
Теперь появился другой вопрос. Как идентифицировать объект отчёта, например, Line или Shape? В методе Render можно идентифицировать объект по его порядковому номеру в отчете. Но этот номер может меняться. Объекты Field можно идентифицировать по содержимому (св-во Text). А вот как обратиться к, например, Line? Может нужно сначала как-то обозначить нужный объект через присвоение какому-либо свойству какого-либо уникального значения, а потом обращаться к этому свойству?
Только вот как? Может знает кто-нибудь?
...
Рейтинг: 0 / 0
24.12.2011, 17:24
    #37592008
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
Закладка Adnvanced - это нововведение Service Pack 2. В базовой версии VFP9 его не было. Поэтому эта модификация сделана как класс-наследник от базового класса ReportListener. Код этого класса-наследника находится в библиотеке FFC, поставляемой вместе с FoxPro.

Код: sql
1.
2.
3.
4.
5.
Set Classlib To (home()+"ffc\_reportlistener.vcx")
oRepList = createObject('fxlistener')
oRepList.ListenerType = 1

report form MyReport.frx object oRepList


Другими словами, если хотите использовать фичи закладки Advanced, то свои классы надо строить на основе родительского класса fxlistener. Соответственно, необходимо будет прихватить и всю библиотеку ffc\_reportlistener.vcx
...
Рейтинг: 0 / 0
26.12.2011, 09:57
    #37593046
diesel_216
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Повернуть Field в отчете используемом с ReportListener.
ВладимирМ, Спасибо! Буду изучать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Повернуть Field в отчете используемом с ReportListener. / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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