Hello!
How to draw a box - border around
current/focused line in TWBrowse.
Thanks, Roman
Border around focused line in browse?
Border around focused line in browse?
© I'm not patented!
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Antonio,
Well, easy for you probably, but I remember spending quite some time trying to get it working without success. I think part of the problem was that the cells are kind of still 3d from the old days. There are actually two lines around each cell. Maybe one is drawn in the background color. I don't remember exactly, but there were issues.
I'd be happy if someone proved me wrong.
James
Well, easy for you probably, but I remember spending quite some time trying to get it working without success. I think part of the problem was that the cells are kind of still 3d from the old days. There are actually two lines around each cell. Maybe one is drawn in the background color. I don't remember exactly, but there were issues.
I'd be happy if someone proved me wrong.
James
Hello!
I try to draw a box around the line and there are problems when I
move to the next line - the previous one is not redrawn correctly.
IMHO there is a (optimization) bug in static function WBrwLine (which is called from Paint method), because only left (gray) and bottom edge of each cell are redrawn:
One solution is to create subclass of TWBrowse, copy WBrwLine and all methods which are calling WBrwLine (DrawLine, DrawSelect, Paint and LButtonDown) and then change WBrwLine to something like that:
The next step is to create function based on wBrwLine that draws frame around selected line, which is to be called after wBrwLine in DrawSelect method:
Here is the result:
Regards, Roman
I try to draw a box around the line and there are problems when I
move to the next line - the previous one is not redrawn correctly.
IMHO there is a (optimization) bug in static function WBrwLine (which is called from Paint method), because only left (gray) and bottom edge of each cell are redrawn:
Code: Select all
case nLineStyle == LINES_GRAY
hPen = CreatePen( PS_SOLID, 1, CLR_GRAY )
hOld = SelectObject( hDC, hPen )
MoveTo( hDC, nLeft - 2, nTop - 2 )
LineTo( hDC, nLeft - 2, nBottom )
LineTo( hDC, nRight , nBottom )
SelectObject( hDC, hOld )
DeleteObject( hPen )
Code: Select all
case nLineStyle == LINES_GRAY
hPen = CreatePen( PS_SOLID, 1, CLR_GRAY )
hOld = SelectObject( hDC, hPen )
MoveTo( hDC, nLeft - 2, nTop - 1 )
LineTo( hDC, nLeft - 2, nBottom )
LineTo( hDC, nRight , nBottom )
MoveTo( hDC, nLeft - 2, nTop - 1 )
LineTo( hDC, nRight , nTop - 1 )
SelectObject( hDC, hOld )
DeleteObject( hPen )
hPen = CreatePen( PS_SOLID, 1, CLR_WHITE )
hOld = SelectObject( hDC, hPen )
MoveTo( hDC, nLeft - 1, nTop )
LineTo( hDC, nLeft - 1, nBottom )
SelectObject( hDC, hOld )
DeleteObject( hPen )
Code: Select all
**************************************************************************
static function wBrwSimple( hWnd, hDC, nRowPos, aValues, aColSizes,;
nColPos, nClrText, nClrPane,;
hFont, lTree, aJustify, nPressed, nLineStyle,;
nColAct, lFocused, oVScroll, bLogicLen )
**************************************************************************
local nTxtHeight, hOldFont
local nColStart := -1
local nWidth := WndWidth( hWnd ) - If( oVScroll != nil .and. ;
Eval( bLogicLen ) > 1,;
GetSysMetrics( SM_CYHSCROLL ) + 3, 0 )
local nRow := nRowPos, nTop, nBottom, nLeft, nRight, n
local lReleaseDC := .f.
local nForeColor, nBackColor
local hPen, hOld, hBrush
DEFAULT lTree := .f.
if Empty( hDC )
hDC = GetDC( hWnd )
lReleaseDC = .t.
endif
hOldFont = SelectObject( hDC, hFont )
nTxtHeight = GetTextHeight( hWnd, hDC ) + 1
nTop = nTxtHeight * nRow
nBottom = nTop + nTxtHeight - 1
for n := nColPos to Len( aValues )
nLeft = nColStart + 1
nRight = Min( nColStart := ( nLeft + aColSizes[ n ] - 1 ), nWidth )
if nLeft > nWidth
exit
endif
if n == Len( aValues )
nRight = nWidth
endif
if lFocused
hPen = CreatePen( PS_SOLID, 1, CLR_BLACK )
hOld = SelectObject( hDC, hPen )
MoveTo( hDC, nLeft-1 , nBottom-1 )
LineTo( hDC, nRight, nBottom-1 )
MoveTo( hDC, nRight-1, nTop )
LineTo( hDC, nLeft-2 , nTop )
SelectObject( hDC, hOld )
DeleteObject( hPen )
else
hPen = CreatePen( PS_DOT, 1, CLR_BLACK )
hOld = SelectObject( hDC, hPen )
MoveTo( hDC, nLeft-1 , nBottom )
LineTo( hDC, nRight, nBottom )
MoveTo( hDC, nRight-1, nTop-1 )
LineTo( hDC, nLeft-2 , nTop-1 )
SelectObject( hDC, hOld )
DeleteObject( hPen )
endif
if nColPos > nWidth
exit
endif
next
return NIL // wBrwSimple
Regards, Roman
© I'm not patented!
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: