2? names of headings of columns in DCBROWSECOL
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
2? names of headings of columns in DCBROWSECOL
Dear visitors of a forum!
I had two questions of names of headings of columns in DCBROWSECOL:
1 whether. It is possible to do headings of columns with transfers as was in CLIPPER (";")?
2 whether. It is possible to have the text in headings vertically?
And still:), whether it is possible to replace the image of zero values, for example, blank or in general to represent nothing, that is zero values of fields not to represent?
I had two questions of names of headings of columns in DCBROWSECOL:
1 whether. It is possible to do headings of columns with transfers as was in CLIPPER (";")?
2 whether. It is possible to have the text in headings vertically?
And still:), whether it is possible to replace the image of zero values, for example, blank or in general to represent nothing, that is zero values of fields not to represent?
Re: 2? names of headings of columns in DCBROWSECOL
The answer to all of your questions is YES.
Then use semicolons in your header text to divide the text.
Use the HEADLINES clause of @ .. DCBROWSE to determine the number of heading lines.It is possible to do headings of columns with transfers as was in CLIPPER (";")?
Then use semicolons in your header text to divide the text.
This is a strange request but it is possible. For example if you have headings that are 7 characters then you would want to use HEADLINES 7 in your @ .. DCBROWSE command and add a semicolon after each character in the heading.whether. It is possible to have the text in headings vertically?
Use a custom code block for DCBROWSECOL. Example:whether it is possible to replace the image of zero values, for example, blank or in general to represent nothing, that is zero values of fields not to represent?
Code: Select all
DCBROWSECOL DATA {|x|x:=MYFILE->numfield,IIF(Empty(x),'',Str(x,6))}
The eXpress train is coming - and it has more cars.
Re: 2? names of headings of columns in DCBROWSECOL
"just" vertical like Roger say or rotate it 45° ?Eugene Lutsenko wrote:2 whether. It is possible to have the text in headings vertically?
you can do almost everything with Ownerdraw (CustomDrawCell)
Code: Select all
**************************************
CLASS XbpBrowseVHeading FROM XbpBrowse
**************************************
PROTECTED:
VAR nTextYSize
EXPORTED:
VAR aSAttrs
VAR nHeadingHeight
VAR nHeadingAlign
INLINE METHOD destroy
*********************
::XbpBrowse:destroy()
::nTextYSize:= ::aSAttrs:= ::nHeadingHeight:= ::nHeadingAlign:= nil
RETURN self
INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible )
*****************************************************************
::XbpBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
::aSAttrs := Array( GRA_AS_COUNT )
* ::aSAttrs[ GRA_AS_ANGLE ]:= { 0, 1 }
::aSAttrs[ GRA_AS_ANGLE ]:= NIL
::aSAttrs[ GRA_AS_COLOR ]:= XBPSYSCLR_WINDOWSTATICTEXT
::nHeadingHeight := 110
::nHeadingAlign := XBPALIGN_LEFT
RETURN self
INLINE METHOD AddColumn( obCol, nWidth, xHeading, xFooting, nType )
*******************************************************************
LOCAL aPP, oColumn
IF ValType( obCol ) = 'O'
oColumn:= obCol
ELSE
aPP:= {}
IF nWidth <> nil ; Aadd( aPP, { XBP_PP_COL_DA_CHARWIDTH, nWidth } ) ; ENDIF
IF xHeading <> nil ; Aadd( aPP, { XBP_PP_COL_HA_CAPTION, xHeading } ) ; ENDIF
IF xFooting <> nil ; Aadd( aPP, { XBP_PP_COL_FA_CAPTION, xFooting } ) ; ENDIF
Aadd( aPP, { XBP_PP_COL_HA_HEIGHT, ::nHeadingHeight } )
oColumn:= XbpColumn():new( self,,,, aPP )
IF nType <> nil
oColumn:type:= nType
ENDIF
oColumn:datalink := obCol
ENDIF
oColumn:drawMode:= XBP_DRAW_OWNER
RETURN ::XbpBrowse:AddColumn( oColumn )
INLINE METHOD CustomDrawCell( oPS, aInfo )
******************************************
LOCAL xData, aRect
IF aInfo[ XBP_DRAWINFO_AREA ] = aInfo[ XBP_DRAWINFO_COLUMN ]:heading
xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( 1 )
IF valType( xData ) = 'C'
IF ::aSAttrs[ GRA_AS_ANGLE ] = NIL
::aSAttrs[ GRA_AS_ANGLE ]:= { aInfo[ XBP_DRAWINFO_RECT, 3 ] ,;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }
ENDIF
oPS:setAttrString( ::aSAttrs )
IF ::nHeadingAlign = XBPALIGN_HCENTER
IF ::nTextYSize = nil
aRect:= GraQueryTextBox( oPS, xData )
::nTextYSize:= aRect[ 3, 2 ] - aRect[ 2, 1 ]
ENDIF
GraCaptionStr( oPS, { Int( ( aInfo[ XBP_DRAWINFO_RECT, 1 ] + aInfo[ XBP_DRAWINFO_RECT, 3 ] - ::nTextYSize ) / 2 ), ;
aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 4 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ;
xData, XBPALIGN_LEFT + XBPALIGN_BOTTOM )
ELSE // IF XBPALIGN_LEFT
GraCaptionStr( oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 4 ], ;
aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData, XBPALIGN_LEFT + XBPALIGN_BOTTOM )
ENDIF
RETURN .F.
ENDIF
ENDIF
RETURN .T.
ENDCLASS
greetings by OHR
Jimmy
Jimmy
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: 2? names of headings of columns in DCBROWSECOL
Roger!
Thank you very much! Everything very well turned out:
Thank you very much! Everything very well turned out:
Code: Select all
DCSETPARENT TO
@ 5, 0 DCBROWSE oBrowGrSc ALIAS 'Rsp_it' SIZE 132,22 ;
PRESENTATION DC_BrowPres() ; // Только просмотр БД
NOSOFTTRACK ;
HEADLINES 3 ; // Кол-во строк в заголовке (перенос строки - ";")
SCOPE ;
ITEMMARKED bItems
// Сделать MAX - красным, MIN - синим
DCSETPARENT oBrowGrSc
DCBROWSECOL DATA {|x|x:=Rsp_it->Kod_Obj, IIF(Empty(x),'',Str(x,5))} HEADER "Код" PARENT oBrowse WIDTH 5
DCBROWSECOL FIELD Rsp_it->Name_Obj HEADER "Наим.объекта расп.выборки" PARENT oBrowse WIDTH 25
DCBROWSECOL DATA {|x|x:=Rsp_it->Max_Value,IIF(Empty(x),'',Str(x,5))} HEADER "MAX;уров.;сходства" PARENT oBrowse WIDTH 7 COLOR GRA_CLR_RED
DCBROWSECOL DATA {|x|x:=Rsp_it->KodC_MaxV,IIF(Empty(x),'',Str(x,5))} HEADER "Класс" PARENT oBrowse WIDTH 5 COLOR GRA_CLR_RED
DCBROWSECOL DATA {|x|x:=Rsp_it->Min_Value,IIF(Empty(x),'',Str(x,5))} HEADER "MIN;уров.;сходства" PARENT oBrowse WIDTH 7 COLOR GRA_CLR_BLUE
DCBROWSECOL DATA {|x|x:=Rsp_it->KodC_MinV,IIF(Empty(x),'',Str(x,5))} HEADER "Класс" PARENT oBrowse WIDTH 5 COLOR GRA_CLR_BLUE
DCBROWSECOL DATA {|x|x:=Rsp_it->Dost, IIF(Empty(x),'',Str(x,5))} HEADER "Досто-;верность" PARENT oBrowse WIDTH 7
Last edited by Eugene Lutsenko on Sun Aug 19, 2012 11:49 am, edited 1 time in total.
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: 2? names of headings of columns in DCBROWSECOL
Roger very much helped me, having prompted me practically everything that it is necessary to me. But generally I meant text rotation in headings, as in Word and Excel. The matter is that I have databases in which there are a lot of columns with long headings and I had a thought: "And suddenly and it is possible!". And as in practice to use the class given by you. You couldn't give an example?Auge_Ohr wrote:"just" vertical like Roger say or rotate it 45° ?Eugene Lutsenko wrote:2 whether. It is possible to have the text in headings vertically?
you can do almost everything with Ownerdraw (CustomDrawCell)Code: Select all
************************************** CLASS XbpBrowseVHeading FROM XbpBrowse ************************************** PROTECTED: VAR nTextYSize EXPORTED: VAR aSAttrs VAR nHeadingHeight VAR nHeadingAlign INLINE METHOD destroy ********************* ::XbpBrowse:destroy() ::nTextYSize:= ::aSAttrs:= ::nHeadingHeight:= ::nHeadingAlign:= nil RETURN self INLINE METHOD init( oParent, oOwner, aPos, aSize, aPP, lVisible ) ***************************************************************** ::XbpBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible ) ::aSAttrs := Array( GRA_AS_COUNT ) * ::aSAttrs[ GRA_AS_ANGLE ]:= { 0, 1 } ::aSAttrs[ GRA_AS_ANGLE ]:= NIL ::aSAttrs[ GRA_AS_COLOR ]:= XBPSYSCLR_WINDOWSTATICTEXT ::nHeadingHeight := 110 ::nHeadingAlign := XBPALIGN_LEFT RETURN self INLINE METHOD AddColumn( obCol, nWidth, xHeading, xFooting, nType ) ******************************************************************* LOCAL aPP, oColumn IF ValType( obCol ) = 'O' oColumn:= obCol ELSE aPP:= {} IF nWidth <> nil ; Aadd( aPP, { XBP_PP_COL_DA_CHARWIDTH, nWidth } ) ; ENDIF IF xHeading <> nil ; Aadd( aPP, { XBP_PP_COL_HA_CAPTION, xHeading } ) ; ENDIF IF xFooting <> nil ; Aadd( aPP, { XBP_PP_COL_FA_CAPTION, xFooting } ) ; ENDIF Aadd( aPP, { XBP_PP_COL_HA_HEIGHT, ::nHeadingHeight } ) oColumn:= XbpColumn():new( self,,,, aPP ) IF nType <> nil oColumn:type:= nType ENDIF oColumn:datalink := obCol ENDIF oColumn:drawMode:= XBP_DRAW_OWNER RETURN ::XbpBrowse:AddColumn( oColumn ) INLINE METHOD CustomDrawCell( oPS, aInfo ) ****************************************** LOCAL xData, aRect IF aInfo[ XBP_DRAWINFO_AREA ] = aInfo[ XBP_DRAWINFO_COLUMN ]:heading xData:= aInfo[ XBP_DRAWINFO_AREA ]:getCell( 1 ) IF valType( xData ) = 'C' IF ::aSAttrs[ GRA_AS_ANGLE ] = NIL ::aSAttrs[ GRA_AS_ANGLE ]:= { aInfo[ XBP_DRAWINFO_RECT, 3 ] ,; aInfo[ XBP_DRAWINFO_RECT, 4 ] } ENDIF oPS:setAttrString( ::aSAttrs ) IF ::nHeadingAlign = XBPALIGN_HCENTER IF ::nTextYSize = nil aRect:= GraQueryTextBox( oPS, xData ) ::nTextYSize:= aRect[ 3, 2 ] - aRect[ 2, 1 ] ENDIF GraCaptionStr( oPS, { Int( ( aInfo[ XBP_DRAWINFO_RECT, 1 ] + aInfo[ XBP_DRAWINFO_RECT, 3 ] - ::nTextYSize ) / 2 ), ; aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 4 ], aInfo[ XBP_DRAWINFO_RECT, 4 ] }, ; xData, XBPALIGN_LEFT + XBPALIGN_BOTTOM ) ELSE // IF XBPALIGN_LEFT GraCaptionStr( oPS, { aInfo[ XBP_DRAWINFO_RECT, 1 ], aInfo[ XBP_DRAWINFO_RECT, 2 ] }, { aInfo[ XBP_DRAWINFO_RECT, 4 ], ; aInfo[ XBP_DRAWINFO_RECT, 4 ] }, xData, XBPALIGN_LEFT + XBPALIGN_BOTTOM ) ENDIF RETURN .F. ENDIF ENDIF RETURN .T. ENDCLASS
Re: 2? names of headings of columns in DCBROWSECOL
whileEugene Lutsenko wrote:You couldn't give an example?
Code: Select all
CLASS XbpBrowseVHeading FROM XbpBrowse
use Help file Sample and replace
Code: Select all
FUNCTION GuiBrowseDB( oParent, aPos, aSize )
LOCAL oBrowse
oBrowse := XbpBrowse():new( oParent,, aPos, aSize ):create()
will be
oBrowse := XbpBrowseVHeading():new( oParent,, aPos, aSize ):create()
greetings by OHR
Jimmy
Jimmy
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
- Eugene Lutsenko
- Posts: 1649
- Joined: Sat Feb 04, 2012 2:23 am
- Location: Russia, Southern federal district, city of Krasnodar
- Contact:
Re: 2? names of headings of columns in DCBROWSECOL
I tried three options of preparation of the columns given for headings which I give below. I most of all liked the third option and I use it.
Code: Select all
//Options of preparation of headings of columns with transfers between lines
SELECT Classes //A database with names of headings of columns without transfers
M_NumVar = 3 //Option of formation of heading
DO CASE
CASE M_NumVar = 1 //1. To "cut" the name of classes on slices on the DL symbols and to write down in aHeadName through ";"
DL = 8 //Width of heading in number of symbols
Max_HeadLines = -999999999
FOR j=1 TO N_Cls
DBGOTO(j)
M_NameCls = ALLTRIM(Name_cls)
aHeadName[2+j] = ALLTRIM(STR(j,15))+".;"
DO WHILE LEN(M_NameCls) > 0
aHeadName[2+j] = aHeadName[2+j] + SUBSTR(M_NameCls,1,DL) + ";"
M_NameCls = SUBSTR(M_NameCls,DL+1)
ENDDO
Max_HeadLines = 1+MAX(Max_HeadLines, NUMAT(";", aHeadName[2+j])) //Definition of the maximum quantity of lines in heading
NEXT
CASE M_NumVar = 2 //2. "Transfers instead of gaps"
Max_HeadLines = -999999999
FOR j=1 TO N_Cls
DBGOTO(j)
aHeadName[2+j] = ALLTRIM(STR(j,15))+". "+STRTRAN(ALLTRIM((Name_cls))," ",";")
Max_HeadLines = 1+MAX(Max_HeadLines, NUMAT(";", aHeadName[2+j])) //Definition of the maximum quantity of lines in heading
NEXT
CASE M_NumVar = 3 //3. To fill lines of headings with the whole words until the maximum width of heading is exceeded
DL = 8 //Width of heading in number of symbols
Max_HeadLines = -999999999
FOR j=1 TO N_Cls
DBGOTO(j)
M_NameCls = ALLTRIM(Name_cls)
aHeadString := {} //Massif of lines of the heading j-y of a column
AADD(aHeadString, ALLTRIM(STR(j,15))+". ") //Class code
*** Начало цикла по словам
FOR w=1 TO NUMTOKEN(M_NameCls," ") //A divider between words - a gap
M_Word = UPPER(TOKEN(M_NameCls," ",w))
IF LEN(aHeadString[LEN(aHeadString)]+" "+M_Word) <= DL
//If after word addition to a line of heading its width less set,
//that to add a word by same line of heading
aHeadString[LEN(aHeadString)] = aHeadString[LEN(aHeadString)]+" "+M_Word
ELSE
//If after word addition to a line of heading its width more set,
//that to do a new line (";") and to it to add a word
AADD(aHeadString, ";"+M_Word)
ENDIF
NEXT
//To copy lines of heading in an array of names of columns
aHeadName[2+j] = ""
FOR s=1 TO LEN(aHeadString)
aHeadName[2+j] = aHeadName[2+j] + aHeadString[s]
NEXT
Max_HeadLines = LEN(aHeadString) //Definition of the maximum quantity of lines in heading
NEXT
ENDCASE