Home > Archive > Clipper > May 2005 > Fun, fun, fun 'til her daddy takes her TBrowse away
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Fun, fun, fun 'til her daddy takes her TBrowse away
|
|
| Peter B. Steiger 2005-05-24, 8:55 pm |
| I'm writing a basic TBrowse that should have taken me ten minutes, and I'm
stumped by problem with the colorblock property.
I have a ColorSpec table something like this:
// std unsel std sel special unsel special unsel
"W/B+, W/BG, R/B+, R+/BG"
The idea is that when a certain condition is met, the special cell will
show up as bright red on the same color (that's colour for you, Dave)
background as the rest of the cells - blue for unselected, cyan for
selected. Or to put it another way, normal cells are white on blue
selected, white on cyan unselected; special cells are red on blue
selected, red on cyan unselected.
Easy enough. Just a minor tweak to the colorblock of the column in
question:
oColumn:colorblock := { |e| iif( SomeCondition, { 3, 4 }, { 1, 2 } }
Copied straight out of the Norton Guide [tm] example, and easy enough that
even I can understand how it works. The only problem is... it doesn't.
With everything else in the TBrowse standard, it works as advertised. The
thing is, I want the whole row highlighted, so I use colorrect to
highlight the columns during stabilize. Again, that by itself works fine.
It's the combination of the two that's blowing up. My goal is to have the
user arrowing up and down among the rows, with the entire row highlighted,
but colum #1 should be in red with one background color if it's the
selected row, and red on another background color if it's the unselected
row. If I use the colorblock attribute as shown above, plus the colorrect
statement like this:
oBrowse:colorrect({oBrowse:rowpos,2,oBro
wse:rowpos,oBrowse:colcount},{2,1})
(note that I am only coloring columns 2-n, since column 1 needs to be
{3,4} rather than {1,2})
.... the result is that the colorblock always uses the unselected color
choice (3 if SomeCondition, 1 if not), no matter what. I thought I would
be smart and add a second colorrect statement:
oBrowse:colorrect({oBrowse:rowpos,1,oBro
wse:rowpos,oBrowse:1},{2,1})
But of course all that accomplished was to use the conditional colors
{3,4} on column 1, and the normal colors {1,2} on columns 2-n.
Am I trying to reach the unreachable star here? Is there no way to
combine a colorrect statement for some columns with a conditional
colorblock for other columns?
--
Peter B. Steiger
Cheyenne, WY
If you must reply by email, you can reach me by placing zeroes
where you see stars: wypbs_**3 at bornagain.com.
| |
| Charles Foot 2005-05-24, 8:55 pm |
| IIRC you can't use an enhanced colour as a background; therefore W/B+
and R/B+ won't work, but W+/B and R+/B would (should).
Peter B. Steiger wrote:
> I'm writing a basic TBrowse that should have taken me ten minutes, and I'm
> stumped by problem with the colorblock property.
>
> I have a ColorSpec table something like this:
> // std unsel std sel special unsel special unsel
> "W/B+, W/BG, R/B+, R+/BG"
>
> The idea is that when a certain condition is met, the special cell will
> show up as bright red on the same color (that's colour for you, Dave)
> background as the rest of the cells - blue for unselected, cyan for
> selected. Or to put it another way, normal cells are white on blue
> selected, white on cyan unselected; special cells are red on blue
> selected, red on cyan unselected.
>
> Easy enough. Just a minor tweak to the colorblock of the column in
> question:
>
> oColumn:colorblock := { |e| iif( SomeCondition, { 3, 4 }, { 1, 2 } }
>
> Copied straight out of the Norton Guide [tm] example, and easy enough that
> even I can understand how it works. The only problem is... it doesn't.
>
> With everything else in the TBrowse standard, it works as advertised. The
> thing is, I want the whole row highlighted, so I use colorrect to
> highlight the columns during stabilize. Again, that by itself works fine.
>
> It's the combination of the two that's blowing up. My goal is to have the
> user arrowing up and down among the rows, with the entire row highlighted,
> but colum #1 should be in red with one background color if it's the
> selected row, and red on another background color if it's the unselected
> row. If I use the colorblock attribute as shown above, plus the colorrect
> statement like this:
> oBrowse:colorrect({oBrowse:rowpos,2,oBro
wse:rowpos,oBrowse:colcount},{2,1})
>
> (note that I am only coloring columns 2-n, since column 1 needs to be
> {3,4} rather than {1,2})
>
> ... the result is that the colorblock always uses the unselected color
> choice (3 if SomeCondition, 1 if not), no matter what. I thought I would
> be smart and add a second colorrect statement:
> oBrowse:colorrect({oBrowse:rowpos,1,oBro
wse:rowpos,oBrowse:1},{2,1})
>
> But of course all that accomplished was to use the conditional colors
> {3,4} on column 1, and the normal colors {1,2} on columns 2-n.
>
> Am I trying to reach the unreachable star here? Is there no way to
> combine a colorrect statement for some columns with a conditional
> colorblock for other columns?
>
| |
| AUGE_OHR 2005-05-24, 8:55 pm |
| hi,
it depend how you build you Tbrowse.
create "empty" oTBrowse
create each colume with oCol:colorBlock than oTBrowse:addcolumn(oCol)
set oTBrowse:autoLite := .F.
use oTBrowse:hilite()
before oTBrowse:colorrect
and oTBrowse:dehilite()
greetings by OHR
Jimmy
"Peter B. Steiger" <see.sig@for.email.address> schrieb im Newsbeitrag
news:pan.2005.05.24.21.27.17.472372@access4less.net...
> I'm writing a basic TBrowse that should have taken me ten minutes, and I'm
> stumped by problem with the colorblock property.
>
> I have a ColorSpec table something like this:
> // std unsel std sel special unsel special unsel
> "W/B+, W/BG, R/B+, R+/BG"
>
> The idea is that when a certain condition is met, the special cell will
> show up as bright red on the same color (that's colour for you, Dave)
> background as the rest of the cells - blue for unselected, cyan for
> selected. Or to put it another way, normal cells are white on blue
> selected, white on cyan unselected; special cells are red on blue
> selected, red on cyan unselected.
>
> Easy enough. Just a minor tweak to the colorblock of the column in
> question:
>
> oColumn:colorblock := { |e| iif( SomeCondition, { 3, 4 }, { 1, 2 } }
>
> Copied straight out of the Norton Guide [tm] example, and easy enough that
> even I can understand how it works. The only problem is... it doesn't.
>
> With everything else in the TBrowse standard, it works as advertised. The
> thing is, I want the whole row highlighted, so I use colorrect to
> highlight the columns during stabilize. Again, that by itself works fine.
>
> It's the combination of the two that's blowing up. My goal is to have the
> user arrowing up and down among the rows, with the entire row highlighted,
> but colum #1 should be in red with one background color if it's the
> selected row, and red on another background color if it's the unselected
> row. If I use the colorblock attribute as shown above, plus the colorrect
> statement like this:
>
oBrowse:colorrect({oBrowse:rowpos,2,oBro
wse:rowpos,oBrowse:colcount},{2,1})[colo
r=darkred]
>
> (note that I am only coloring columns 2-n, since column 1 needs to be
> {3,4} rather than {1,2})
>
> ... the result is that the colorblock always uses the unselected color
> choice (3 if SomeCondition, 1 if not), no matter what. I thought I would
> be smart and add a second colorrect statement:
> oBrowse:colorrect({oBrowse:rowpos,1,oBro
wse:rowpos,oBrowse:1},{2,1})
>
> But of course all that accomplished was to use the conditional colors
> {3,4} on column 1, and the normal colors {1,2} on columns 2-n.
>
> Am I trying to reach the unreachable star here? Is there no way to
> combine a colorrect statement for some columns with a conditional
> colorblock for other columns?
>
> --
> Peter B. Steiger
> Cheyenne, WY
> If you must reply by email, you can reach me by placing zeroes
> where you see stars: wypbs_**3 at bornagain.com.
>[/color]
| |
| Peter B. Steiger 2005-05-24, 8:55 pm |
| On Tue, 24 May 2005 23:55:11 +0200, AUGE_OHR sez:
> it depend how you build you Tbrowse.
>
> create "empty" oTBrowse
> create each colume with oCol:colorBlock than oTBrowse:addcolumn(oCol) set
> oTBrowse:autoLite := .F.
>
> use oTBrowse:hilite()
> before oTBrowse:colorrect
> and oTBrowse:dehilite()
Interesting! Unfortunately it has the same effect whether I manually
highlight (using the hilite/dehilite methods) or use autolite.
No matter. I can live with the special cells being the same color when
you are or are not selecting that row... as long as the user's eye is
drawn to the red ones, I'm happy.
--
Peter B. Steiger
Cheyenne, WY
If you must reply by email, you can reach me by placing zeroes
where you see stars: wypbs_**3 at bornagain.com.
| |
| Peter B. Steiger 2005-05-24, 8:55 pm |
| On Wed, 25 May 2005 09:46:50 +1200, Charles Foot sez:
> IIRC you can't use an enhanced colour as a background; therefore W/B+ and
> R/B+ won't work, but W+/B and R+/B would (should).
Sadly, that's not the problem. See the setblink() function: with
setblink(.f.), you can use the "*" attribute on color pairs to make the
background appear with enhanced colors, rather than blinking.
--
Peter B. Steiger
Cheyenne, WY
If you must reply by email, you can reach me by placing zeroes
where you see stars: wypbs_**3 at bornagain.com.
| |
| AUGE_OHR 2005-05-24, 8:55 pm |
| hi,
>
> Interesting! Unfortunately it has the same effect whether I manually
> highlight (using the hilite/dehilite methods) or use autolite.
>
> No matter. I can live with the special cells being the same color when
> you are or are not selecting that row... as long as the user's eye is
> drawn to the red ones, I'm happy.
now i got it.
if you use "build in" oTBrowse:colorrect it will change all cell color
in a rectangular area with your oTBrowse:colorSpec(), but you like
to have oCol:colorBlock in that oTBrowse:hilite bar.
you have to make you own function/class "to paint" something like
oCol:Color - oTB:Color - oCol:Color - oTB:Color - oTB:Color
you have to step throw oCol and "paint" oCol:Color or oTB:Color
canīt find my "old cl*pper" code, this is Xbase++
greetings by OHR
Jimmy
CLASS XbpColumnLocal FROM XbpColumn
****************************************
**
EXPORTED:
INLINE METHOD HiliteRow( nRowPos, lHilite, lFrame, lRepaint )
****************************************
*********************
LOCAL aColor
LOCAL RETVAR
IF ( lHilite ) // .AND. ( aColor:= Eval(
::colorBlock ) ) # nil
IF ::colorBlock # NIL
// is there any :colorbock
aColor:= Eval( ::colorBlock )
IF aColor = NIL
// is any color
RETVAR := ::XbpColumn:HiliteRow( nRowPos, lHilite, lFrame,
lRepaint ) // recursive next
ELSE
RETVAR := ::dataArea:setCellColor( nRowPos, aColor[ 1 ],
aColor[ 2 ] ) // paint CellColor
ENDIF
ELSE
RETVAR := ::XbpColumn:HiliteRow( nRowPos, lHilite, lFrame,
lRepaint ) // recusive next
ENDIF
ELSE
RETVAR := ::XbpColumn:HiliteRow( nRowPos, lHilite, lFrame, lRepaint )
// recursiv next
ENDIF
RETURN RETVAR
ENDCLASS
*
* eof
*
| |
| AUGE_OHR 2005-05-24, 8:55 pm |
| found my old cl+pper code
[color=darkred]
must be first : oTBrowse:colorrect( ....) and than
*- freeze the cursur on position P2
oTbrowse:COLPOS := fix_posi +2
*- highlight current cell
oTbrowse:HILITE()
*- freeze the cursur on position P1
oTbrowse:COLPOS := fix_posi
*- highlight current cell
oTbrowse:HILITE()
and so on
greetings by OHR
Jimmy
| |
| Stephen Quinn 2005-05-25, 3:55 am |
| Peter
I think your trying to create a multi-coloured hilite bar, if so then you won't
achieve it with the normal TBrowse class.
There's code available on the OASIS that can do this for you though
(tbhilite.zip)
HTH
Steve
|
|
|
|
|