powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Повернуть Field в отчете используемом с ReportListener.
6 сообщений из 6, страница 1 из 1
Повернуть Field в отчете используемом с ReportListener.
    #37582592
diesel_216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

В VFP 9.0 повернуть field не состовляет труда. Нужно в окне свойств field, в закладке Advanced установить размер угла, на который нужно повернуть field, и field поворачивается.
Но если отчет использовать с объектом ReportListener (т.е. report form Report1 PREVIEW object loRepList), то field не поворачивается. Может кто-нибудь подскажет что нужно сделать для поворота field с использованием отчета с ReportListener ? Может нужно выполнить какой-то метод ReportListener по умолчанию или установить какое-либо свойство?
...
Рейтинг: 0 / 0
Повернуть Field в отчете используемом с ReportListener.
    #37586416
diesel_216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели никто не поворачивал field-ы таким способом?
...
Рейтинг: 0 / 0
Повернуть Field в отчете используемом с ReportListener.
    #37591323
diesel_216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл!
Для того что бы повернуть 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
Повернуть Field в отчете используемом с ReportListener.
    #37591339
diesel_216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь появился другой вопрос. Как идентифицировать объект отчёта, например, Line или Shape? В методе Render можно идентифицировать объект по его порядковому номеру в отчете. Но этот номер может меняться. Объекты Field можно идентифицировать по содержимому (св-во Text). А вот как обратиться к, например, Line? Может нужно сначала как-то обозначить нужный объект через присвоение какому-либо свойству какого-либо уникального значения, а потом обращаться к этому свойству?
Только вот как? Может знает кто-нибудь?
...
Рейтинг: 0 / 0
Повернуть Field в отчете используемом с ReportListener.
    #37592008
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закладка 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
Повернуть Field в отчете используемом с ReportListener.
    #37593046
diesel_216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ, Спасибо! Буду изучать.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Повернуть Field в отчете используемом с ReportListener.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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