Page 1 of 1

Color palette

Posted: Sun Jan 24, 2021 10:17 pm
by ctoas
Hello guys...

I am looking for a solution to create a color palette for the user to select. Has anyone done?

Image

Thanks

Re: Color palette

Posted: Mon Jan 25, 2021 12:44 pm
by ukoenig
Christiano,

I think You want to select a color from a defined colorselection :?:
Just define a array with the colorvalues.
You can create Your own color palette (colorpicker) with xBrowse like :

This sample shows a array with the basiccolors.
Image

Code: Select all

FUNCTION RGB_BASIC( oDlgMain )
LOCAL oBrw2, n
// array of cellcolors for colorselection
LOCAL aDat1 := { { nRGB( 255, 128, 128 ), nRGB( 255, 255, 128 ), nRGB( 128, 255, 128 ), nRGB( 0, 255, 128 ), ;
                              nRGB( 128, 255, 255 ), nRGB( 0, 128, 255 ), nRGB( 255, 128, 192 ), nRGB( 255, 128, 255 ) },; 
                            { nRGB( 255, 0, 0 ), nRGB( 255, 255, 0 ), nRGB( 128, 255, 0 ), nRGB( 0, 255, 64 ), ;
                               nRGB( 0, 255, 255 ), nRGB( 0, 128, 192 ), nRGB( 128, 128, 192 ), nRGB( 255, 0, 255 ) },;                 
                            { nRGB( 64, 0, 0 ), nRGB( 255, 128, 64 ), nRGB( 0, 255, 0 ), nRGB( 0, 128, 128 ), ;
                              nRGB( 0, 64, 128 ), nRGB( 128, 128, 255 ), nRGB( 128, 0, 64 ), nRGB( 255, 0, 128 ) },;         
                            { nRGB( 128, 0, 0 ), nRGB( 255, 128, 0 ), nRGB( 0, 128, 0 ), nRGB( 0, 128, 64 ), ;
                              nRGB( 0, 0, 255 ), nRGB( 0, 0, 160 ), nRGB( 128, 0, 128 ), nRGB( 128, 0, 255 ) },;         
                            { nRGB( 64, 0, 0 ), nRGB( 128, 64, 0 ), nRGB( 0, 64, 0 ), nRGB( 0, 64, 64 ), ;
                              nRGB( 0, 0, 128 ), nRGB( 0, 0, 64 ), nRGB( 64, 0, 64 ), nRGB( 64, 0, 128 ) },;         
                            { nRGB( 0, 0, 0 ), nRGB( 128, 128, 0 ), nRGB( 128, 128, 64 ), nRGB( 128, 128, 128 ), ;
                              nRGB( 64, 128, 128 ), nRGB( 192, 192, 192 ), nRGB( 64, 0, 64 ), nRGB( 255, 255, 255 ) } }

REDEFINE XBROWSE oBrw2 ID 120 OF oDlgMain ARRAY aDat1 ;
FIELDS aDat1[ oBrw2:nArrayAt ][ 1 ], aDat1[ oBrw2:nArrayAt ][ 2 ], aDat1[ oBrw2:nArrayAt ][ 3 ], ;
              aDat1[ oBrw2:nArrayAt ][ 4 ], aDat1[ oBrw2:nArrayAt ][ 5 ], aDat1[ oBrw2:nArrayAt ][ 6 ], ;
              aDat1[ oBrw2:nArrayAt ][ 7 ], aDat1[ oBrw2:nArrayAt ][ 8 ] ;
LINES COLSIZES 30, 30, 30, 30, 30, 30, 30, 30 PIXEL

WITH OBJECT oBrw2
    :lRecordSelector        := .F. // .t.
    :lColDividerComplete    := .T. // .f.
    :lAllowColSwapping      := .F.
    :lAllowColHiding        := .F.
    :lFastEdit              := .F.
    :lHeader                := .F.
    :nStretchCol            := -1
    :lRecordSelector        := .F.
    :lAllowRowSizing        := .F.
    :lHScroll               := .F.
    :lVScroll               := .F.
    :lDrawBorder            := .T.
    :nMarqueeStyle      := 1
    :nRowHeight         := 30

    :aCols[1]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][1] } }
    :aCols[2]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][2] } }
    :aCols[3]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][3] } }
    :aCols[4]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][4] } }
    :aCols[5]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][5] } }
    :aCols[6]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][6] } }
    :aCols[7]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][7] } }
    :aCols[8]:bClrstd := {|| { , aDat1[ oBrw2:KeyNo() ][8] } }
END

FOR n := 1 to LEN( oBrw2:aCols )
      oBrw2:aCols[ n ]:bPaintText = { | oCol, hDC, cText | "" }
      oBrw2:aCols[ n ]:lAllowSizing := .F.
NEXT

oBrw2:bLClicked := { | nRow, nCol | ( nRPos := oBrw2:KeyNo(), ;
                                                        nCPos := oBrw2:SelectedCol():nCreationOrder, ;
                            COLORVALUE( aDat1[nRPos][nCPos]) ) } 
oBrw2:bChange := { | nRow, nCol | (  nRPos := oBrw2:KeyNo(), ;
                                                        nCPos := oBrw2:SelectedCol():nCreationOrder, ;
                            COLORVALUE( aDat1[nRPos][nCPos]) ) }
RETURN NIL

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

FUNCTION COLORVALUE( nColor )
LOCAL nRed := nRGBRed( nColor )
LOCAL nGreen := nRGBGreen( nColor )
LOCAL nBlue := nRGBBlue( nColor )

LOCal cWordRGB := "nRGB( " + ALLTRIM(STR(nRed)) + ", " + ;
                                     ALLTRIM(STR(nGreen)) + ", " + ;
                                     ALLTRIM(STR(nBlue)) + " )"

// save result to ???
MsgAlert( nColor, "Color NUMERIC") 
MsgAlert( cWordRGB, "Color RGB") 

RETURN NIL

 
best regards
Uwe :D

Re: Color palette

Posted: Mon Jan 25, 2021 9:30 pm
by ctoas
Thank you, perfect!

Re: Color palette (solved)

Posted: Sat Feb 06, 2021 7:30 pm
by ctoas
Hello guys.

Some adjustments are still missing, but it's perfect!

Image

Re: Color palette

Posted: Sun Feb 07, 2021 3:26 am
by nageswaragunupudi
May I know why can't we use Microsoft Windows color picker? This is a standard Windows interface and all Windows users are familiar with its use and functionality.
This is available in fwh function ChooseColor( nClr ) ---> nClr

Re: Color palette

Posted: Sun Feb 07, 2021 4:21 pm
by ctoas
Hello Nages.

I didn't know this function, but I would only use it if there was no option since it is out of the standard of my screens.

Hugs

Re: Color palette

Posted: Sun Feb 07, 2021 6:49 pm
by ukoenig
I*m building the needed array for this selection :!:
I didn't know this function, but
I would only use it if there was no option since it is out of the standard of my screens.
Image

a defined column-array looks like

Code: Select all

Row     Column 1 ( red )

1       nRGB( 51, 0, 0 )
2       nRGB( 102, 0, 0 )
3       nRGB( 153, 0, 0 )
4       nRGB( 204, 0, 0 )
5       nRGB( 255, 0, 0 )
6       nRGB( 255, 51, 51 )
7       nRGB( 255, 102, 102 )
8       nRGB( 255, 153, 153 )
9       nRGB( 255, 204, 204 )

Row     Column 2 ( brown )

1       nRGB( 51, 25, 0 )
2       nRGB( 102, 51, 0 )
3       nRGB( 153, 76, 0 )
4       nRGB( 204, 102, 0 )
5       nRGB( 255, 128, 0 )
6       nRGB( 255, 153, 51 )
7       nRGB( 255, 178, 102 )
8       nRGB( 255, 204, 153 )
9       nRGB( 255, 229, 204 )

Row     Column 3 ( yellow )

1       nRGB( 51, 51, 0 )
2       nRGB( 102, 102, 0 )
3       nRGB( 153, 153, 0 )
4       nRGB( 204, 204, 0 )
5       nRGB( 255, 255, 0 )
6       nRGB( 255, 255, 51 )
7       nRGB( 255, 255, 102 )
8       nRGB( 255, 255, 153 )
9       nRGB( 255, 255, 204 )

 
like You can see with this function ChooseColor( nClr ) the colors are not splitted to the same brightness-level
I think that is the solution You are looking for :?:

Image

regards
Uwe :D

Re: Color palette

Posted: Sun Feb 07, 2021 7:24 pm
by nageswaragunupudi
This is Windows API ChooseColor() made available by FWH through its function ChooseColor().
One can make his own function, but can not easily match its functionality.