How to set all controls to ReadOnly state?

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
User avatar
mol
Posts: 3825
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

How to set all controls to ReadOnly state?

Post by mol »

Hi guys!
I need to enable/disable editing and changing controls depending on user rights.

Is it possible to realize it?

Marek
User avatar
gfilatov
Posts: 1116
Joined: Fri Aug 01, 2008 5:42 am
Location: Ukraine
Contact:

Re: How to set all controls to ReadOnly state?

Post by gfilatov »

mol wrote:Hi guys!
I need to enable/disable editing and changing controls depending on user rights.

Is it possible to realize it?
Hello Marek,

It is possible if you have the list of all controls on your form(s).

Please take a look for the following simple sample:

Code: Select all

/*
 * HMG - Harbour Win32 GUI library Demo
 *
 * Copyright 2002 Roberto Lopez <mail.box.hmg@gmail.com>
 * http://sites.google.com/site/hmgweb/
*/

#include "hmg.ch"

Function Main

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 600 HEIGHT 400 ;
		TITLE "HMG Slider Demo" ;
		MAIN ;
		FONT "Arial" SIZE 10

      // Horizontal

      @ 20,20 SLIDER Slider_1 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Horizontal" ;
      ON CHANGE {||Slider1_Change()}

		@ 70,20 TEXTBOX TextBox_1 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 20,160 SLIDER Slider_2 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Horizontal Top" ;
      ON CHANGE {||Slider2_Change()} ;
      TOP

		@ 70,160 TEXTBOX TextBox_2 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 20,300 SLIDER Slider_3 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Horizontal Both" ;
      ON CHANGE {||Slider3_Change()} ;
      BOTH

		@ 70,300 TEXTBOX TextBox_3 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 20,440 SLIDER Slider_4 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Horizontal NoTicks" ;
      ON CHANGE {||Slider4_Change()} ;
      NOTICKS

		@ 70,440 TEXTBOX TextBox_4 VALUE " 5" WIDTH 60 MAXLENGTH 5

      // Vertical

      @ 150,20 SLIDER Slider_5 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Vertical" ;
      VERTICAL ;
      ON CHANGE {||Slider5_Change()}

		@ 280,20 TEXTBOX TextBox_5 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 150,160 SLIDER Slider_6 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Vertical Left" ;
      VERTICAL ;
      ON CHANGE {||Slider6_Change()} ;
      LEFT

		@ 280,160 TEXTBOX TextBox_6 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 150,300 SLIDER Slider_7 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Vertical Both" ;
      VERTICAL ;
      ON CHANGE {||Slider7_Change()} ;
      BOTH

		@ 280,300 TEXTBOX TextBox_7 VALUE " 5" WIDTH 60 MAXLENGTH 5

      @ 150,440 SLIDER Slider_8 ;
      RANGE 1,10 ;
      VALUE 5 ;
      TOOLTIP "Slider Vertical NoTicks" ;
      VERTICAL ;
      ON CHANGE {||Slider8_Change()} ;
      NOTICKS

		@ 280,440 TEXTBOX TextBox_8 VALUE " 5" WIDTH 60 MAXLENGTH 5

	@ 320,20 BUTTON Btn_8 CAPTION "DISABLE ALL SLIDERS" WIDTH 160 ACTION Sliders_Disable( 'Form_1' )

	@ 320,200 BUTTON Btn_9 CAPTION "ENABLE ALL SLIDERS" WIDTH 160 ACTION Sliders_Enable( 'Form_1' )

	END WINDOW

	Form_1.TextBox_1.Enabled := .f.
	Form_1.TextBox_2.Enabled := .f.
	Form_1.TextBox_3.Enabled := .f.
	Form_1.TextBox_4.Enabled := .f.
	Form_1.TextBox_5.Enabled := .f.
	Form_1.TextBox_6.Enabled := .f.
	Form_1.TextBox_7.Enabled := .f.
	Form_1.TextBox_8.Enabled := .f.

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return Nil

Function Sliders_Disable( cForm )

   aeval( _GetArrayOfAllControlsForForm( cForm ), {|x,i| iif("Slider_" $ x, SetProperty( cForm, x, "Enabled", .f. ), ) } )

Return Nil

Function Sliders_Enable( cForm )

   aeval( _GetArrayOfAllControlsForForm( cForm ), {|x,i| iif("Slider_" $ x, SetProperty( cForm, x, "Enabled", .t. ), ) } )

Return Nil

Function Slider1_Change

   Local nValue := Form_1.Slider_1.Value

   Form_1.TextBox_1.Value := Str(nValue,2)

Return Nil

Function Slider2_Change

   Local nValue := Form_1.Slider_2.Value

   Form_1.TextBox_2.Value := Str(nValue,2)

Return Nil

Function Slider3_Change

   Local nValue := Form_1.Slider_3.Value

   Form_1.TextBox_3.Value := Str(nValue,2)

Return Nil

Function Slider4_Change

   Local nValue := Form_1.Slider_4.Value

   Form_1.TextBox_4.Value := Str(nValue,2)

Return Nil

Function Slider5_Change

   Local nValue := Form_1.Slider_5.Value

   Form_1.TextBox_5.Value := Str(nValue,2)

Return Nil

Function Slider6_Change

   Local nValue := Form_1.Slider_6.Value

   Form_1.TextBox_6.Value := Str(nValue,2)

Return Nil

Function Slider7_Change

   Local nValue := Form_1.Slider_7.Value

   Form_1.TextBox_7.Value := Str(nValue,2)

Return Nil

Function Slider8_Change

   Local nValue := Form_1.Slider_8.Value

   Form_1.TextBox_8.Value := Str(nValue,2)

Return Nil


/******************************************************************************/
Function _GetArrayOfAllControlsForForm ( cFormName )
/******************************************************************************/
Local nFormHandle , i , nControlCount , aRetVal := {} , x

nFormHandle := GetFormHandle ( cFormName )
nControlCount := Len ( _HMG_SYSDATA [3] )
For i := 1 To nControlCount
   If _HMG_SYSDATA [4] [i] == nFormHandle
      If ValType( _HMG_SYSDATA [3] [i] ) == 'N'
         IF ! Empty( _HMG_SYSDATA [2] [i] )
            If Ascan( aRetVal, _HMG_SYSDATA [2] [i] ) == 0
               Aadd( aRetVal, _HMG_SYSDATA [2] [i] )
            EndIf
         ENDIF
      ElseIf ValType( _HMG_SYSDATA [3] [i] ) == 'A'
         For x := 1 To Len ( _HMG_SYSDATA [3] [i] )
            IF !Empty( _HMG_SYSDATA [2] [i] )
               If Ascan( aRetVal, _HMG_SYSDATA [2] [i] ) == 0
                  Aadd( aRetVal, _HMG_SYSDATA [2] [i] )
               EndIf
            ENDIF
         Next x
      EndIf
   EndIf
Next i

Return Asort( aRetVal )
Hope that give you an idea :idea:
Kind Regards,
Grigory Filatov

"Everything should be made as simple as possible, but no simpler." Albert Einstein
Post Reply