Multiple DCRADIO in a groupbox

This forum is for eXpress++ general support.
Post Reply
Message
Author
User avatar
jdsoft
Posts: 113
Joined: Thu Jan 28, 2010 1:13 pm
Location: Overberg
Contact:

Multiple DCRADIO in a groupbox

#1 Post by jdsoft »

Hello,

I try to add multiple DCRADIO groups is a single DCGROUP.
See the screenshot for the sample.
My code looks like this,

Code: Select all

DCSETPARENT TO oBox1
nBline               := 0.8
@ nBline    , 1      DCSAY {||oDb:extrabehwassen}           APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparenwassen          PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparenwassen          PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparenwassen          PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehknippen}          APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparenknippen         PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparenknippen         PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparenknippen         PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehdrogen}           APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparendrogen          PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparendrogen          PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparendrogen          PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehkleuren}          APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparenkleuren         PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparenkleuren         PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparenkleuren         PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehcoupesoleil}      APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparencoupesoleil     PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparencoupesoleil     PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparencoupesoleil     PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehpermanent}        APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparenpermanent       PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparenpermanent       PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparenpermanent       PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehnabehandeling}    APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparennabehandeling   PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparennabehandeling   PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparennabehandeling   PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehoverige}          APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparenoverige         PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparenoverige         PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparenoverige         PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
@ nBline    , 1      DCSAY {||oDb:extrabehdiversen}         APP_SAYCOLOR   SIZE 25
@ nBline    , nTab5  DCRADIO oDb:extrasparendiversen        PROMPT TAAL_LBL_GEEN    VALUE SPAREN_GEEN       APP_RADIOBUTTONCOLOR TABGROUP XBP_BEGIN_GROUP
@ nBline    , nTab6  DCRADIO oDb:extrasparendiversen        PROMPT TAAL_LBL_PUNTEN  VALUE SPAREN_SPAARKAART APP_RADIOBUTTONCOLOR TABGROUP XBP_WITHIN_GROUP
@ nBline++  , nTab7  DCRADIO oDb:extrasparendiversen        PROMPT TAAL_LBL_CREDITS VALUE SPAREN_CREDITS    APP_RADIOBUTTONCOLOR TABGROUP XBP_END_GROUP
If i click on any of the radio buttons, all aothers are disabled.
What is my mistake ?

Regards,
Jack Duijf
Attachments
Screenshot
Screenshot
14-10-2010 15-55-32.png (32.1 KiB) Viewed 7902 times
Regards,
Jack Duijf

User avatar
rdonnay
Site Admin
Posts: 4729
Joined: Wed Jan 27, 2010 6:58 pm
Location: Boise, Idaho USA
Contact:

Re: Multiple DCRADIO in a groupbox

#2 Post by rdonnay »

Jack -

Radio buttons are grouped by a common parent.
Each group buttons must have a different parent.
Below is a sample program that shows how to do this with very little code.

Code: Select all

#INCLUDE "dcdialog.CH"

FUNCTION Main()

LOCAL GetList[0]
LOCAL nRadio1, nRadio2, nRadio3, nRadio4, nRadio5
LOCAL nRow := 1

nRadio1 := nRadio2 := nRadio3 := nRadio4 := nRadio5 := 1

RadioGroup(GetList,@nRadio1,nRow++)
RadioGroup(GetList,@nRadio2,nRow++)
RadioGroup(GetList,@nRadio3,nRow++)
RadioGroup(GetList,@nRadio4,nRow++)
RadioGroup(GetList,@nRadio5,nRow++)

DCREAD GUI FIT ADDBUTTONS TITLE 'Radio Groups'

RETURN nil

* -------------

STATIC FUNCTION RadioGroup( GetList, nRadio, nRow )

LOCAL oStatic

@ nRow,0 DCSTATIC TYPE XBPSTATIC_TYPE_TEXT SIZE 40,1 OBJECT oStatic
@ 0,0 DCRADIO nRadio VALUE 1 PROMPT 'Geen' PARENT oStatic
@ DCGUI_ROW, DCGUI_COL + 20 DCRADIO nRadio VALUE 2 PROMPT 'Punten' PARENT oStatic
@ DCGUI_ROW, DCGUI_COL + 20 DCRADIO nRadio VALUE 3 PROMPT 'Credits' PARENT oStatic

RETURN nil

* ----------

PROC Appsys ; RETURN
The eXpress train is coming - and it has more cars.

User avatar
Auge_Ohr
Posts: 1407
Joined: Wed Feb 24, 2010 3:44 pm

Re: Multiple DCRADIO in a groupbox

#3 Post by Auge_Ohr »

hi Jack,

did you later plan to sort or Filter those Result ?
for Checkbox or Radiobutton many People use a Logic Field, but to create Index you need IF(MyField,"Y","N")
to make a SCOPE with those INDEX might be difficult ...

i now use "bitwise" Logic for this.

Code: Select all

STATIC PROCEDURE Bewertung(nMode)
LOCAL lExit := .F.
LOCAL oDlg
LOCAL nEvent
LOCAL mp1
LOCAL mp2
LOCAL oXbp
LOCAL nTimeout := 100                                     // timeout for AppEvent
LOCAL aPos     := {0,0}
LOCAL aSize    := {0,0}
LOCAL bSize    := {0,0}
LOCAL i,iMax
LOCAL aWert    := WertType()
LOCAL aSammel  := {}
LOCAL aPP      := {}
LOCAL nRec
LOCAL oStatic
LOCAL aDim
LOCAL oPb

STATIC lBewertung := .F.
STATIC nLast := 1

   IF lBewertung = .T.
      TONE(1234)
      RETURN
   ENDIF

   lBewertung := .T.

   AAdd ( aPP, { XBP_PP_COMPOUNDNAME, "14.Arial" } )

   iMax := LEN(aWert)

   aSize[1] := 200
   aSize[2] := iMax*22 +220

   bSize    := ACLONE(aSize)
   bSize[2] += 40

   IF aSize[2]  > AppDesktop():currentSize()[2]
      aSize[2] := AppDesktop():currentSize()[2]
   ENDIF

   aPos := CenterPos(aSize,AppDesktop():currentSize())

   oDlg := DSCForm():new(AppDesktop(),,aPos,aSize,aPP,.F.)

   oDlg:taskList                 := .T.
   oDlg:title                    := "Bewertung"
   oDlg:icon                     := 1000
*   oDlg:drawingArea:clipChildren := .T.                     // zeige das Logo
   oDlg:MaxButton                := .F.                     // geht nicht wenn MDI client
   oDlg:MinButton                := .F.                     // geht nicht wenn MDI client
   oDlg:border := XBPDLG_RECESSEDBORDERTHICK_FIXED
   oDlg:close  := {| mp1,mp2,obj | lExit := .T. }
*   oDlg:alwaysOnTop := .T.
*   oDlg:setInputFocus := {|| }
   oDlg:drawingArea:scrollbars := XBP_SCROLLBAR_VERT
   oDlg:create()

   oStatic := XbpStatic():new( oDlg:drawingArea,,{0,0},bSize)
   oStatic:create()
   oStatic:SetColorBG(GRA_CLR_WHITE)
   oStatic:show()

   oPb := XbpPushButton():new(oStatic, , {10,2}, {150,22} )
   oPb:caption := "Sa~ve"
   oPb:create()
   oPb:activate:= {|| cLastWert := GetNewWert(aSammel,nMode,aWert),;
                      StoreNewWert( cLastWert ),;
                      lEXIT := .T. }

   i:= 1
   FOR i := 1 TO iMax
      oXbp := XbpCheckbox():new( oStatic , , {10,i*30}, {170,22} )
      oXbp:caption := aWert[i,2]
      oXbp:autoSize  := .F.
      oXbp:selection := .F.
      oXbp:selected  := {| lCheck, uNIL, oSelf | IF(lCheck,oSelf:SetColorFG(GRA_CLR_GREEN),oSelf:SetColorFG(GRA_CLR_BLACK) ) }
      oXbp:TabStop := .T.
      oXbp:create()
      oXbp:show()
      AADD(aSammel,oXbp)
   NEXT

   //
   // assign .T. to Checkbox
   //
   WhatWert(nMode,aSammel,@nLast)

   //
   // need to "show" Scrollbar with Static
   //
   oDlg:LockUpdate(.T.)
   aDim := oDlg:CurrentSize()
   oDlg:SetSize({aDim[1] + 1, aDim[2] + 1}, .F.)
   oDlg:SetSize(aDim, .F.)
   oDlg:LockUpdate(.F.)
   oDlg:InvalidateRect()
   //
   // now Show it
   //
   oDlg:show()
   //
   // ScManager Hotkeys
   //
   oDlg:dohotkey()                                          // hotkeys einsammel

   setAppWindow(oDlg)
   setAppFocus(oDlg)
   setAppFocus(IF(nLast>0,aSammel[nLast],aSammel[iMax]))

   DO WHILE .NOT. lExit

      nEvent := AppEvent(@mp1,@mp2,@oXbp,nTimeout)          // nTimeout

      DO CASE
         CASE nEvent == xbe_None                            // nTimeout eingetreten

         CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
            EXIT

         CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ALT_F4
            EXIT

         OTHERWISE
            oXbp:handleEvent(nEvent,mp1,mp2)
      ENDCASE
   ENDDO

   oDlg:destroy()

   lBewertung := .F.

RETURN

STATIC FUNCTION WhatWert(nMode,aSammel,nLast)
LOCAL cRet  := ""
LOCAL cMode := LTRIM(STR(nMode))
LOCAL aType := WertType()
LOCAL nPosi := 0
LOCAL nRest := 0
LOCAL i,iMax
//
// bei {|x| nRest $ x[1] } von Max nach Min
//
// hier NICHT sortieren nach "gross"
//
// ASORT(aType,,,{|aX,aY| aX[1] > aY[1]})
//
   nRest := nMode
   iMax  := LEN(aType)
   FOR i = 1 TO iMax
      IF nRest > 0
      ELSE
         EXIT
      ENDIF
      IF aType[i,1] $ nRest
//
// debug
//
DOSTEXT(aType[1,2],nRest)
        //
        //
        //
        cRet  += aType[i,2]+CRLF
        nRest -= aType[i,1]
        //
        // "paint" Checkbox
        //
        aSammel[i]:setData(.T.)
        aSammel[i]:SetColorFG(GRA_CLR_GREEN)
        //
        // remember last
        //
        nLast := i
        //
        // reset i
        //
        i := 1
      ENDIF
   NEXT

RETURN cRet

STATIC PROCEDURE StoreNewWert(cWert)
LOCAL nRec := WM9MARK->(RECNO())
   IF WM9MARK->(DbRLock(nRec))
      REPLACE WM9MARK->WERT WITH cWert
      WM9MARK->(DbRUnlock(nRec))
   ENDIF
RETURN

STATIC FUNCTION GetNewWert(aSammel,nMode,aWert)
LOCAL i,iMax
LOCAL nNum := 0

   iMax := LEN(aSammel)
   i := 1
   FOR i := 1 TO iMax
      IF aSammel[i]:GetData() = .T.
         //
         // debug
         //
         DOSTEXT(aWert[i,1],aWert[i,2])
         //
         // Sum "Wert"
         //
         nNum := nNum + aWert[i,1]
      ENDIF
   NEXT

RETURN U2bin(nNum)

STATIC FUNCTION WertType()
//
// max. 2^32 ... real 2^30 while multiple Choice ?
//
LOCAL aType := { ;
{2^ 2,"~None      " },;
...
{2^28,"eof     " } }

RETURN aType
greetings by OHR
Jimmy

User avatar
jdsoft
Posts: 113
Joined: Thu Jan 28, 2010 1:13 pm
Location: Overberg
Contact:

Re: Multiple DCRADIO in a groupbox

#4 Post by jdsoft »

Hello Roger,

Thanks, this fixes my problem.
I inplemented this is my application.
I am suprised i did'nt encountered this before.

Regards,
Jack Duijf
Regards,
Jack Duijf

Post Reply