Page 1 of 1

create a circle colored in a dialog

Posted: Mon Dec 09, 2024 11:46 am
by Silvio.Falconi
I wish create a circle colored into a dialog ... why I not see the ellipse ?

Notice
each color is created in the circle as if in triangles

Image


Problem the circle is black
not load colors

Code: Select all | Expand

 
 
#include "FiveWin.ch"

#define PI 3.14159265359


FUNCTION Main()
   LOCAL oDlg
   LOCAL nHeight := 200, nWidth := 200
   local oCircle

 



   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"
    
     oCircle:= MyCircle():NEW(1, 1, oDlg,  nWidth, nHeight, CLR_BLACK, CLR_BLACK,;
            .t., .f.,.t.)
             
   ACTIVATE DIALOG oDlg CENTER
       RETURN NIL











Class MyCircle From Tcontrol
   CLASSDATA lRegistered AS LOGICAL

    DATA nColorCirc
    DATA nColorText
    DATA lDrawBorder
    DATA hPen
    DATA nDimPenCircle

     DATA nMedWidth,nMedHeight,nMedSide
    DATA nTopCir, nLeftCir
    DATA nRadiusExt
    DATA nRadiusInt



      METHOD New( nRow, nCol, oWnd,  nWidth, nHeight) CONSTRUCTOR
      METHOD Paint()
      METHOD Display() INLINE ::BeginPaint(), ::Paint(), ::EndPaint(), 0
      METHOD PaintCircle()
ENDCLASS

METHOD New( nRow, nCol, oWnd,  nWidth, nHeight, nColorCirc, nColorText,;
            lPixel, lDesign,lDrawBorder) CLASS MyCircle

   DEFAULT  nRow     := 0, nCol := 0, oWnd := GetWndDefault()
   DEFAULT  lPixel   := .f.
   DEFAULT  nColorCirc   := CLR_HGRAY
   DEFAULT nWidth := 50, nHeight := 50
   DEFAULT   lDrawBorder := .F.

   ::nTop      = If( lPixel, nRow, nRow * MTR_CHARPIX_H )  //14
   ::nLeft     = If( lPixel, nCol, nCol *  MTR_CHARPIX_W ) //8
   ::nBottom   = ::nTop  + nHeight
   ::nRight    = ::nLeft + nWidth
   ::oWnd      = oWnd
   ::lDrawBorder = lDrawBorder

   ::hPen = CreatePen( PS_SOLID, 1, nRGB( 128, 128, 128 ) )

   ::nId       = ::GetNewId()

   ::nColorCirc   =  nColorCirc
   ::nColorText   = nColorText
   ::nClrPane = nRGB( 220, 223, 228 )
   ::nDimPenCircle := 1

   ::lDrag     = lDesign
   ::lCaptured = .f.
   ::lTransparent =.t.


 ::nStyle  = nOr( WS_CHILD, WS_VISIBLE, WS_CLIPCHILDREN, WS_TABSTOP,;
                                 if( lDrawBorder, WS_BORDER, 0 ) )


   ::Register()


     if oWnd:lVisible
      ::Create()
      ::Default()
      ::lVisible = .t.
      oWnd:AddControl( Self )
   else
      oWnd:DefControl( Self )
      ::lVisible  = .F.
   endif

  if lDesign
      ::CheckDots()
   endif

return Self

METHOD Paint() CLASS MyCircle
 local aInfo, aRect
 local  hGrayPen,hOldPen,hWhitePen
 Local hBrush, hOldBrush

   aInfo    := ::DispBegin()

   if ::lTransparent .or. ::nOpacity < 255
      aRect    := GetClientRect( ::hWnd )
      SetBrushOrgEx( ::hDC, -::nLeft, -::nTop )
      FillRect( ::hDC, aRect, ::oWnd:oBrush:hBrush )
      if ! ::lTransparent
         FillRectEx( ::hDC, aRect, nARGB( ::nOpacity, ::nClrPane ) )
      endif
   else
      ::PaintBack( ::hDC )
   endif


   ::PaintCircle()



 if ValType( ::bPainted ) == "B"
      Eval( ::bPainted, ::hDC, ::cPS, Self )
   endif

   ::DispEnd( aInfo )

return nil


METHOD PaintCircle() CLASS MyCircle
   local aRect    := GetClientRect( ::hWnd )


      local aColors   := { CLR_BLACK,CLR_WHITE,CLR_RED,CLR_BLUE,;
      CLR_YELLOW,CLR_HGRAY,CLR_HRED,CLR_CYAN,CLR_GREEN,CLR_MAGENTA}

   LOCAL nCenterX
   LOCAL nCenterY
   LOCAL nRadius

   LOCAL nStep := 360 / Len(aColors) // Dimensione angolare di ogni spicchio
   LOCAL i, nStartAngle := 0
   LOCAL oPen, hBrush


    ::nTopCir    := ::nHeight / 2
    ::nLeftCir   := ::nWidth  / 2
    ::nMedWidth  :=  aRect[4]/2
    ::nMedHeight := aRect[3]/2
    ::nMedSide   := min( ::nMedWidth, (::nMedHeight-5) ) - 10

    nCenterX := ::nTopCir
    nCenterY := ::nLeftCir
    nRadius :=  ::nMedSide

  FOR i := 1 TO Len(aColors)

     DrawPie(::hDC, nCenterX, nCenterY, nRadius, nStartAngle, nStartAngle + nStep, aColors[i])

      nStartAngle += nStep

      DeleteObject(hBrush)
      DeleteObject(oPen)

   NEXT

return 0



STATIC FUNCTION DrawPie(hDC, nCenterX, nCenterY, nRadius, nStartAngle, nEndAngle, nclr)
   LOCAL xStart, yStart, xEnd, yEnd


   xStart := nCenterX - nRadius
   yStart := nCenterY - nRadius
   xEnd   := nCenterX + nRadius
   yEnd   := nCenterY + nRadius

     FW_Box( hDC, {xStart,yStart,xEnd, yEnd }, { nClr, 3 }, nClr, , 2 )


   RETURN NIL

 

Re: create a circle colored in a dialog

Posted: Mon Dec 09, 2024 1:08 pm
by nageswaragunupudi
This can be simplified

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"

   ACTIVATE DIALOG oDlg CENTER ON PAINT ;
      oDlg:PieChart( { 50,50,350,350 }, ; // rect
                     { 120,120,120 }, ;   // values
                     { CLR_HRED,CLR_HGREEN,CLR_BLUE }, ; // colors
                     CLR_BLACK ) // pen

RETURN NIL
Image

Re: create a circle colored in a dialog

Posted: Mon Dec 09, 2024 1:36 pm
by Silvio.Falconi
nageswaragunupudi wrote:This can be simplified

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"

   ACTIVATE DIALOG oDlg CENTER ON PAINT ;
      oDlg:PieChart( { 50,50,350,350 }, ; // rect
                     { 120,120,120 }, ;   // values
                     { CLR_HRED,CLR_HGREEN,CLR_BLUE }, ; // colors
                     CLR_BLACK ) // pen

RETURN NIL
Image
I wnated create a chromatic circle to enable the classification of color shades of dyes as the choosecolor circle
sample Image

Re: create a circle colored in a dialog

Posted: Mon Dec 09, 2024 3:06 pm
by nageswaragunupudi
We need to use Ring Gradients.
I will provide a simple sample using some colors.
You may later modify the colors to your taste.
Pls wait

Re: create a circle colored in a dialog

Posted: Mon Dec 09, 2024 3:41 pm
by nageswaragunupudi

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg
   local aClrGrad[ 3 ]

   aClrGrad[ 1 ] := { { 0.5, CLR_GREEN, CLR_HGREEN }, { 0.5, CLR_HGREEN, CLR_YELLOW }, "RING" }
   aClrGrad[ 2 ] := { { 0.5, CLR_RED,   CLR_HRED   }, { 0.5, CLR_HRED,   CLR_YELLOW }, "RING" }
   aClrGrad[ 3 ] := { { 0.5, CLR_BLUE,  CLR_HBLUE  }, { 0.5, CLR_HBLUE,  CLR_HGREEN }, "RING" }

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"

    ACTIVATE DIALOG oDlg CENTER ON PAINT ;
      oDlg:PieChart( { 50,50,350,350 }, ; // rect
                     { 120,120,120 }, ;   // values
                     aClrGrad, ; // colors
                     CLR_BLACK ) // pen

RETURN NIL
 
Image

Re: create a circle colored in a dialog

Posted: Tue Dec 10, 2024 7:36 am
by Silvio.Falconi
nageswaragunupudi wrote:

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg
   local aClrGrad[ 3 ]

   aClrGrad[ 1 ] := { { 0.5, CLR_GREEN, CLR_HGREEN }, { 0.5, CLR_HGREEN, CLR_YELLOW }, "RING" }
   aClrGrad[ 2 ] := { { 0.5, CLR_RED,   CLR_HRED   }, { 0.5, CLR_HRED,   CLR_YELLOW }, "RING" }
   aClrGrad[ 3 ] := { { 0.5, CLR_BLUE,  CLR_HBLUE  }, { 0.5, CLR_HBLUE,  CLR_HGREEN }, "RING" }

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"

    ACTIVATE DIALOG oDlg CENTER ON PAINT ;
      oDlg:PieChart( { 50,50,350,350 }, ; // rect
                     { 120,120,120 }, ;   // values
                     aClrGrad, ; // colors
                     CLR_BLACK ) // pen

RETURN NIL
 
Image
Nice!!
wich is RING?
RING is the one last option ?

I tried to insert many colors and it create a fractal on center

Image

see it

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oDlg,n

   local aValues := {}

   local aColors:= Load_OfficeColors()
   local aClrGrad:= array(len(aColors))

   For n:=1 to len( acolors)
       aClrGrad[n] := { { 0.5,GetBackColor(aColors,n) , GetBackColor(aColors,n) }, { 0.5, GetBackColor(aColors,n), GetBackColor(aColors,n) }  }
    Next

    For n= 1 to  len( aClrGrad)
       aadd(aValues,20)
    Next

   DEFINE DIALOG oDlg SIZE 400, 400 PIXEL TITLE "Cerchio Colorato"

    ACTIVATE DIALOG oDlg CENTER ON PAINT ;
      oDlg:PieChart( { 50,50,350,350 }, ; // rect
                     aValues, ;   // values
                     aClrGrad, ; // colors
                     CLR_BLACK ) // pen

RETURN NIL


 Function GetBackColor(aColors,n)
 Local nR := Val(aColors[n][3] )
 Local nG := Val( aColors[n][4])
 Local nB := Val( aColors[n][5] )
 Local nColore := val(aColors[n][6])
 //Local   nColor:= 'RBG('+str(nR)+','+str(nG)+','+ str(nB)+')'
 RETURN nColore







 Function Load_OfficeColors()
      Local aOfficeColor :={;
{'aliceblue','#F0F8FF','240','248','255','16775408'},;
{'antiquewhite','#FAEBD7','250','235','215','14150650'},;
{'aqua','#00FFFF','0','255','255','16776960'},;
{'aquamarine','#7FFFD4','127','255','212','13959039'},;
{'azure','#F0FFFF','240','255','255','16777200'},;
{'beige','#F5F5DC','245','245','220','14480885'},;
{'bisque','#FFE4C4','255','228','196','12903679'},;
{'black','#000000','0','0','0','0'},;
{'blanchedalmond','#FFEBCD','255','235','205','13495295'},;
{'blue','#0000FF','0','0','255','16711680'},;
{'blueviolet','#8A2BE2','138','43','226','14822282'},;
{'brown','#A52A2A','165','42','42','2763429'},;
{'burlywood','#DEB887','222','184','135','8894686'},;
{'cadetblue','#5F9EA0','95','158','160','10526303'},;
{'chartreuse','#7FFF00','127','255','0','65407'},;
{'chocolate','#D2691E','210','105','30','1993170'},;
{'coral','#FF7F50','255','127','80','5275647'},;
{'cornflowerblue','#6495ED','100','149','237','15570276'},;
{'cornsilk','#FFF8DC','255','248','220','14481663'},;
{'crimson','#DC143C','220','20','60','3937500'},;
{'darkblue','#00008B','0','0','139','9109504'},;
{'darkcyan','#008B8B','0','139','139','9145088'},;
{'darkgoldenrod','#B8860B','184','134','11','755384'},;
{'darkgray','#A9A9A9','169','169','169','11119017'},;
{'darkgreen','#006400','0','100','0','25600'},;
{'darkkhaki','#BDB76B','189','183','107','7059389'},;
{'darkmagenta','#8B008B','139','0','139','9109643'},;
{'darkolivegreen','#556B2F','85','107','47','3107669'},;
{'darkorange','#FF8C00','255','140','0','36095'},;
{'darkorchid','#9932CC','153','50','204','13382297'},;
{'darkred','#8B0000','139','0','0','139'},;
{'darksalmon','#E9967A','233','150','122','8034025'},;
{'darkseagreen','#8FBC8F','143','188','143','9419919'},;
{'darkslateblue','#483D8B','72','61','139','9125192'},;
{'darkslategray','#2F4F4F','47','79','79','5197615'},;
{'darkturquoise','#00CED1','0','206','209','13749760'},;
{'darkviolet','#9400D3','148','0','211','13828244'},;
{'deeppink','#FF1493','255','20','147','9639167'},;
{'deepskyblue','#00BFFF','0','191','255','16760576'},;
{'dimgray','#696969','105','105','105','6908265'},;
{'dodgerblue','#1E90FF','30','144','255','16748574'},;
{'firebrick','#B22222','178','34','34','2237106'},;
{'floralwhite','#FFFAF0','255','250','240','15792895'},;
{'forestgreen','#228B22','34','139','34','2263842'},;
{'fuchsia','#FF00FF','255','0','255','16711935'},;
{'gainsboro','#DCDCDC','220','220','220','14474460'},;
{'ghostwhite','#F8F8FF','248','248','255','16775416'},;
{'gold','#FFD700','255','215','0','55295'},;
{'goldenrod','#DAA520','218','165','32','2139610'},;
{'gray','#808080','128','128','128','8421504'},;
{'green','#008000','0','128','0','32768'},;
{'greenyellow','#ADFF2F','173','255','47','3145645'},;
{'honeydew','#F0FFF0','240','255','240','15794160'},;
{'hotpink','#FF69B4','255','105','180','11823615'},;
{'indianred','#CD5C5C','205','92','92','6053069'},;
{'indigo','#4B0082','75','0','130','8519755'},;
{'ivory','#FFFFF0','255','255','240','15794175'},;
{'khaki','#F0E68C','240','230','140','9234160'},;
{'lavender','#E6E6FA','230','230','250','16443110'},;
{'lavenderblush','#FFF0F5','255','240','245','16118015'},;
{'lawngreen','#7CFC00','124','252','0','64636'},;
{'lemonchiffon','#FFFACD','255','250','205','13499135'},;
{'lightblue','#ADD8E6','173','216','230','15128749'},;
{'lightcoral','#F08080','240','128','128','8421616'},;
{'lightcyan','#E0FFFF','224','255','255','16777184'},;
{'lightgoldenrodyellow','#FAFAD2','250','250','210','13826810'},;
{'lightgreen','#90EE90','144','238','144','9498256'},;
{'lightgrey','#D3D3D3','211','211','211','13882323'},;
{'lightpink','#FFB6C1','255','182','193','12695295'},;
{'lightsalmon','#FFA07A','255','160','122','8036607'},;
{'lightseagreen','#20B2AA','32','178','170','11186720'},;
{'lightskyblue','#87CEFA','135','206','250','16436871'},;
{'lightslategray','#778899','119','136','153','10061943'},;
{'lightsteelblue','#B0C4DE','176','196','222','14599344'},;
{'lightyellow','#FFFFE0','255','255','224','14745599'},;
{'lime','#00FF00','0','255','0','65280'},;
{'limegreen','#32CD32','50','205','50','3329330'},;
{'linen','#FAF0E6','250','240','230','15134970'},;
{'maroon','#800000','128','0','0','128'},;
{'mediumaquamarine','#66CDAA','102','205','170','11193702'},;
{'mediumblue','#0000CD','0','0','205','13434880'},;
{'mediumorchid','#BA55D3','186','85','211','13850042'},;
{'mediumpurple','#9370DB','147','112','219','14381203'},;
{'mediumseagreen','#3CB371','60','179','113','7451452'},;
{'mediumslateblue','#7B68EE','123','104','238','15624315'},;
{'mediumspringgreen','#00FA9A','0','250','154','10156544'},;
{'mediumturquoise','#48D1CC','72','209','204','13422920'},;
{'mediumvioletred','#C71585','199','21','133','8721863'},;
{'midnightblue','#191970','25','25','112','7346457'},;
{'mintcream','#F5FFFA','245','255','250','16449525'},;
{'mistyrose','#FFE4E1','255','228','225','14804223'},;
{'moccasin','#FFE4B5','255','228','181','11920639'},;
{'navajowhite','#FFDEAD','255','222','173','11394815'},;
{'navy','#000080','0','0','128','8388608'},;
{'oldlace','#FDF5E6','253','245','230','15136253'},;
{'olive','#808000','128','128','0','32896'},;
{'olivedrab','#6B8E23','107','142','35','2330219'},;
{'orange','#FFA500','255','165','0','42495'},;
{'orangered','#FF4500','255','69','0','17919'},;
{'orchid','#DA70D6','218','112','214','14053594'},;
{'palegoldenrod','#EEE8AA','238','232','170','11200750'},;
{'palegreen','#98FB98','152','251','152','10025880'},;
{'paleturquoise','#AFEEEE','175','238','238','15658671'},;
{'palevioletred','#DB7093','219','112','147','9662683'},;
{'papayawhip','#FFEFD5','255','239','213','14020607'},;
{'peachpuff','#FFDAB9','255','218','185','12180223'},;
{'peru','#CD853F','205','133','63','4163021'},;
{'pink','#FFC0CB','255','192','203','13353215'},;
{'plum','#DDA0DD','221','160','221','14524637'},;
{'powderblue','#B0E0E6','176','224','230','15130800'},;
{'purple','#800080','128','0','128','8388736'},;
{'red','#FF0000','255','0','0','255'},;
{'rosybrown','#BC8F8F','188','143','143','9408444'},;
{'royalblue','#4169E1','65','105','225','14772545'},;
{'saddlebrown','#8B4513','139','69','19','1262987'},;
{'salmon','#FA8072','250','128','114','7504122'},;
{'sandybrown','#F4A460','244','164','96','6333684'},;
{'seagreen','#2E8B57','46','139','87','5737262'},;
{'seashell','#FFF5EE','255','245','238','15660543'},;
{'sienna','#A0522D','160','82','45','2970272'},;
{'silver','#C0C0C0','192','192','192','12632256'},;
{'skyblue','#87CEEB','135','206','235','15453831'},;
{'slateblue','#6A5ACD','106','90','205','13458026'},;
{'slategray','#708090','112','128','144','9470064'},;
{'snow','#FFFAFA','255','250','250','16448255'},;
{'springgreen','#00FF7F','0','255','127','8388352'},;
{'steelblue','#4682B4','70','130','180','11829830'},;
{'tan','#D2B48C','210','180','140','9221330'},;
{'teal','#008080','0','128','128','8421376'},;
{'thistle','#D8BFD8','216','191','216','14204888'},;
{'tomato','#FF6347','255','99','71','4678655'},;
{'turquoise','#40E0D0','64','224','208','13688896'},;
{'violet','#EE82EE','238','130','238','15631086'},;
{'wheat','#F5DEB3','245','222','179','11788021'},;
{'white','#FFFFFF','255','255','255','16777215'},;
{'whitesmoke','#F5F5F5','245','245','245','16119285'},;
{'yellow','#FFFF00','255','255','0','65535'},;
{'yellowgreen','#9ACD32','154','205','50','3329434'}}
Return aOfficeColor
//---------------------------------------