FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour XBrowse โ€“ show lines slashed
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Sat Dec 08, 2007 04:29 PM
Is it possible to show some lines in a crossed out font?
Thanks in advance
Otto
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 06:56 AM

Otto,

You have to replace each column row DATA oDataFont

Its not a codeblock so you have to do it manually

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 01:49 PM
Thank you, Antonio. I got it working.

Posts: 946
Joined: Thu Oct 06, 2005 07:05 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 02:07 PM

Otto

Would you mind sharing the way you did it (the font issue)

Antonio, a codeblock would be a good idea for column data, it could be evaluated easilly

Richard

http://www.cbati.com

Uestudio
Fwh 13.05 Harbour 3.2 MSVC 2013
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 03:10 PM

Hello Richard,
here is the define of the font:
StrikeOut is not in font.ch!!!
oFNT := TFont():New( "MS Sans Serif", 10, 15,,.T.,,,,.f.,.f.,.t.,,,,, )
Regards,
Otto

Posts: 946
Joined: Thu Oct 06, 2005 07:05 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 03:15 PM

Otto

My concern is how did you draw a different font per column without a codeblock being evaluated

Thanks for help

Richard

http://www.cbati.com

Uestudio
Fwh 13.05 Harbour 3.2 MSVC 2013
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Sun Dec 16, 2007 05:43 PM

Do you mean per column or row?
column is standard in xBrowser:

oCol := oxBrw:AddCol()
oCol:cHeader    := "...."
oCol:oHeaderFont   := oWHSetup:oFntKlein()
oCol:bStrData   := { || ...}
--->  oCol:oDataFont  := oFntAnzeig
oCol:nWidth     := 181

Try my snipkeeper.exe.

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 09:17 AM
Hello Antonio,
I did some changes to get rowFont for each column.

Could you please have a look if these changes are save.
xBrowser is very complex and I don't feel secure about my own changes.

In xbrowse-class i made 5 chances:
Please see the red lines


1) //----------------------------------------------------------------------------//

CLASS TXBrowse FROM TControl

DATA bClrHeader,; // default color pair for header
bClrFooter,; // default color pair for footer
bClrStd,; // default color pair for normal rows
bClrSel,; // default color pair for selected row
bClrSelFocus,; // default color pair for selected row when control has focus
bFntRowData // default color pair for edition


2) //----------------------------------------------------------------------------//

METHOD New( oWnd ) CLASS TXBrowse

::bFntRowData := {|| oWnd:oFont }

3) //----------------------------------------------------------------------------//
CLASS TXBrwColumn


DATA bClrHeader,; // default color pair for header
bClrFooter,; // default color pair for footer
bClrStd,; // default color pair for normal rows
bClrSel,; // default color pair for selected row
bClrSelFocus,; // default color pair for selected row when control has focus
bClrEdit,; // default color pair for edition
bFntRowData
4) //----------------------------------------------------------------------------//

METHOD Adjust() CLASS TXBrwColumn

DEFAULT ::bClrHeader := ::bClrHeader,;
::bClrFooter := ::bClrFooter,;
::bClrStd := ::bClrStd,;
::bClrSel := ::bClrSel,;
::bClrSelFocus := ::bClrSelFocus ,;
::bClrEdit := ::bClrStd,;
::bFntRowData := ::bFntRowData

5) //----------------------------------------------------------------------------//

METHOD PaintData( nRow, nCol, nHeight, lHighLite, lSelected, nOrder ) CLASS TXBrwColumn


hDC := ::GetDC()
oFont := ::oDataFont


if ::bFntRowData != nil

oFont := Eval( ::bFntRowData )

endif

//----------------------------------------------------------------------------//




In your prg-file adress the codeblock like:
//----------------------------------------------------------------------------//

oxBrw:bFntRowData := { || f_fntRowData() }




STATIC FUNCTION f_fntRowData()
LOCAL oFntRow:=""

IF (ordkeyno()) % 2 == 0
oFntRow := oWHSetup:oFntKlein()
ELSE
oFntRow := oWHSetup:oFntGross()
ENDIF
RETURN (oFntRow)
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 10:22 AM
Otto,

Instead of adding a new DATA, we could check if ::oDataFont contains a codeblock:
METHOD PaintData( nRow, nCol, nHeight, lHighLite, lSelected, nOrder ) CLASS TXBrwColumn 

oFont := ::oDataFont 

if ValType( oFont ) == "B"
   oFont = Eval( oFont, Self )
endif


Anyhow, there are more places where this must be checked. See next msg
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 10:25 AM
METHOD DataHeight() CLASS TXBrwColumn
...
   if ::bStrData != nil .and. ::oDataFont != nil
      if ValType( ::oDataFont ) == "B"
         nHeight := FontHeight( ::oBrw, Eval( ::oDataFont, Self ) )
      else   
         nHeight := FontHeight( ::oBrw, ::oDataFont )
      endif   
   endif
...

METHOD DataWidth() CLASS TXBrwColumn
...
   if ::bStrData != nil
       cText := Eval( ::bStrData, Self )
       nLen  := Len( cText )
       if ValType ( ::oDataFont ) == "B"
          oFont = Eval( ::oDataFont, Self )
       else
          oFont = ::oDataFont
       endif      
       while nFrom <= nLen
         cLine  := ExtractLine( cText, @nFrom )
         cLine  := Replicate( "B", Len( cLine ) )
         nWidth := Max( nWidth, ::oBrw:GetWidth( cLine, oFont ) )
       enddo
   endif
...

METHOD CreateButtons() CLASS TXBrwColumn
...
      ::oBtnList:SetFont( If( ValType( ::oDataFont ) == "B", Eval( ::oDataFont, Self ), ::oDataFont ) )
...
      ::oBtnElip:SetFont( If( ValType( ::oDataFont ) == "B", Eval( ::oDataFont, Self ), ::oDataFont ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 11:15 AM

>Instead of adding a new DATA, we could check if ::oDataFont contains a codeblock:
But
oxBrw:bFntRowData := { || }
I think we need to know what Font should be used.

Antonio, do you think 8.01 will have a codeblock for different row height.
For the moment I have hard coded the functionality for my neccessity.

So I can wait for 8.01.

Regards,
Otto

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 11:21 AM

Otto,

>
But oxBrw:bFntRowData := { || }
I think we need to know what Font should be used.
>

Each column can have a different font, and the font can change in the same column too. oDataFont is ok for that. Unless I am missing something.

>
Antonio, do you think 8.01 will have a codeblock for different row height.
For the moment I have hard coded the functionality for my neccessity.
>

If we have enough time then we will work to include it

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 12:28 PM

Thank you.

I meant not different row height but Font.

Although row height would be nice too depending how much text (memofield) you have.

Could you please post a little example how this font codeblock should look like
and how to evaluate.

At the moment I use this to get the different fonts per column:

oCol:bFntRowData := { || f_fntRowData() }

STATIC FUNCTION f_fntRowData()
LOCAL oFntRow:=""

IF (ordkeyno()) % 2 == 0
oFntRow := oFnt1
elseif
โ€ฆ
ELSE
oFntRow := oFnt2
ENDIF
RETURN (oFntRow)

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 01:22 PM

Mr Antonio

My small suggestion. Instead of having a public data bRowfont or oFont holding either codeblock or font object, if oFont is a setget method( access assign ) we do not have to search where all we need to change in the code.

In my personal copy I have done the same for cFooter so that it works without breaking or making too many changes in the orginal source.

my 2 cents

Regards



G. N. Rao.

Hyderabad, India
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
XBrowse โ€“ show lines slashed
Posted: Mon Dec 17, 2007 01:26 PM
Otto,

You use it exactly the same way:
oCol:oDataFont := { || f_fntRowData() } 


STATIC FUNCTION f_fntRowData() 
LOCAL oFntRow:="" 

IF (ordkeyno()) % 2 == 0 
oFntRow := oFnt1 
elseif 
โ€ฆ 
ELSE 
oFntRow := oFnt2 
ENDIF 
RETURN (oFntRow)
regards, saludos

Antonio Linares
www.fivetechsoft.com