OpenDCL Forums

OpenDCL => Show and Tell => Topic started by: Kerry on August 26, 2008, 10:17:41 PM

Title: Test Color Combo Box
Post by: Kerry on August 26, 2008, 10:17:41 PM
For anyone following along ....
... there are a couple of things to remember if trying to set the current selection to a cpecific Color Number ... the color MUST be in the Combo Display List
... hope this helps ...

for example .. set the current layer to have a color higher than 7 ... and type DOIT at the command line to see that the combo list will be populated with the Layer Color ..

NOTE: the attached ODCL is compiled with Studio Build 5.0.0.23


(defun c:doit () (TestColorCombo))
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;

(defun TestColorCombo (/
                       _ConvertColorStringToNumber _ResetComboBox
                       ;;
                       currentLayerColorNumber
                      )
  (setq currentLayerColorNumber
         (vla-get-Color (vla-get-activelayer
                          (vla-get-activedocument
                            (vlax-get-acad-object)
                          )
                        )
         )
  )
  ;;-----------------------------------------------------------
  ;;
  ;; Convert the return value from the dcl_ComboBox_GetTBText Method to a Color Number (0-256)
  ;; (_ConvertColorStringToNumber "12")
  ;; (_ConvertColorStringToNumber "Color 122")
  ;; (_ConvertColorStringToNumber "Cyan") (_ConvertColorStringToNumber "0")
  ;;
  (defun _ConvertColorStringToNumber (ColorString / tmp)
    (cond
      ((numberp
         (setq tmp (read (vl-string-subst "" "Color " ColorString)))
       )
       tmp
      )
      ((numberp (setq
                  tmp (eval
                        (read
                          (strcat "ac"
                                  (vl-string-subst "" "Color " ColorString)
                          )
                        )
                      )
                )
       )
       tmp
      )
      (t 256)
    )
  )
  ;;-----------------------------------------------------------
  ;;
  (defun _ResetComboBox (ColorNumber / stringValue listIndex)
    (cond ((Setq listIndex (dcl_ComboBox_FindColor
                             TestColorCombo_Main_ComboBox1
                             ColorNumber
                           )
           )
           ;; the color exists in the display list, so select it by it's index
           (dcl_ComboBox_SetCurSel TestColorCombo_Main_ComboBox1
                                   listIndex
           )
          )
          ;;
          ;; the color is not in the combo display,
          ;; so add it if it's a valid color number.
          ((and (>= ColorNumber 8) (<= ColorNumber 256))
           (dcl_ComboBox_AddColor TestColorCombo_Main_ComboBox1
                                  ColorNumber
           )
           (dcl_ComboBox_SetCurSel
             TestColorCombo_Main_ComboBox1
             (dcl_ComboBox_FindColor TestColorCombo_Main_ComboBox1
                                     ColorNumber
             )
           )
          )
          ;;
    )
    (Setq stringValue
           (dcl_ComboBox_GetTBText TestColorCombo_Main_ComboBox1
           )
    )
    (c:TestColorCombo_Main_ComboBox1_OnSelChanged 0 stringValue)
  )
  ;;-----------------------------------------------------------
  ;;
  ;; Main Entry Point
  ;;-----------------------------------------------------------
  ;;---------------(findFile "TestColorCombo.odcl")
  (dcl_project_load "TestColorCombo.odcl" T)
  (dcl_form_show TestColorCombo_main)
  ;;
  (princ)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun c:TestColorCombo_Main_OnInitialize (/)
  (_ResetComboBox currentLayerColorNumber)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun c:TestColorCombo_Main_TextBox3_OnReturnPressed (/)
  (c:TestColorCombo_Main_DoIt_OnClicked)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun c:TestColorCombo_Main_ComboBox1_OnSelChanged
       (nSelection sSelText /)
  (dcl_Control_SetText TestColorCombo_Main_TextBox1
                       (itoa (_ConvertColorStringToNumber sSelText))
  )
  (dcl_Control_SetText TestColorCombo_Main_TextBox2 sSelText)
  (dcl_Control_SetText TestColorCombo_Main_TextBox3 "")
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;
(defun c:TestColorCombo_Main_DoIt_OnClicked
       (/ TextValue ColorNumber tmp)
  (Setq TextValue   (dcl_Control_GetText TestColorCombo_Main_TextBox3)
        ColorNumber (if (numberp (setq tmp (read TextValue)))
                      tmp
                      256
                    )
        ColorNumber (if (and (>= ColorNumber 0) (<= ColorNumber 256))
                      ColorNumber
                      256
                    )
  )
  (_ResetComboBox ColorNumber)
)
;;;------------------------------------------------------------------
;;;------------------------------------------------------------------
;;;

(princ)
Title: Re: Test Color Combo Box
Post by: jb on August 29, 2008, 06:31:49 AM
Nice example Kerry - thanks.

How's 5.0.0.23 doing?  I'm still using 4 - stability reasons.
Title: Re: Test Color Combo Box
Post by: Kerry on August 29, 2008, 04:13:01 PM
Quote from: jb on August 29, 2008, 06:31:49 AM
Nice example Kerry - thanks.

How's 5.0.0.23 doing?  I'm still using 4 - stability reasons.

thanks.

5.0.0.23 seems fine James .. i'm using it for production code without problem.
Title: Re: Test Color Combo Box
Post by: BazzaCAD on August 29, 2008, 04:27:33 PM
I think the only major changes Owen has left in 5.0 Alpha is ActiveX stuff.
(But I could be wrong)
Title: Re: Test Color Combo Box
Post by: owenwengerd on August 29, 2008, 08:02:38 PM
Quote from: BazzaCAD on August 29, 2008, 04:27:33 PM
I think the only major changes Owen has left in 5.0 Alpha is ActiveX stuff.
(But I could be wrong)

Yes, and I'm working on that now.  There are still some palette issues that I've been having trouble resolving, and I'd like to get the "selected control" painting in Studio more robust.  Everything else is pretty stable.
Title: Re: Test Color Combo Box
Post by: Fred Tomke on August 31, 2008, 11:14:22 PM
Hello,

I want to add my "mustard": We have distributed our new release using 5.0.0.19 as a stable release in our mind. All other new things changed after 5.0.0.19 are not as relevantly for us to publish an urgently servicepack.

Fred