Page 1 of 1

Get\Action .. disable the field only

Posted: Tue Apr 14, 2020 3:08 pm
by Rick Lipkin
To All

I have a Get\action statement that I add a bitmap to that allows me to click on the bitmap ( button magnifying glass ) within the field to fire off the code below. Everything works great but is there a way to disable the field so no one can enter in any data .. I just want the field to be read only .. be able to click the ( active ) button to run my Action routine and fill in the value back into the disabled field ..

Image

In the image above, I want to disable that field but still be able to click the button than send a value back to the disabled field and refresh the results.

Code: Select all | Expand


REDEFINE GET oBreakC   VAR nBreakC         ID 133 of oGRPS PICTURE "999.99" BITMAP "find";
      ACTION ( _RateSlct( cMode,oFontB,"BUTTON",cInstate,cOutState,1,;
                          @nBreakC,oBreakC,@nLunchC,oLunchC,@nDinnerC,oDinnerC,@nMRate,oMRate),;
                         _Exp(  @nBreak,  @nBreakC,  @nBreakT,oBreakT, ;
                         @nLunch,  @nLunchC,  @nLunchT,  oLunchT, ;
                         @nDinner, @nDinnerC, @nDinnerT, oDinnerT, ;
                         @nTmeals, oTmeals,   @nTotalExp,oTotalExp,;
                         @nTHotel, @nTMileage,@nTRegist, @nTAirFare,;
                         @nTMisc,  @nNights,  @nHcost,   oTHotel,;
                         @nMiles,  @nMrate, oTmileage,;
                         oLunch:SetFocus(),oLunch:oJump := oLunch ) ) UPDATE
       oBreakC:lAdjustBtn := .t.
 


Thanks
Rick Lipkin

Re: Get\Action .. disable the field only

Posted: Tue Apr 14, 2020 4:13 pm
by MOISES
Maybe you can set its lenght to 0?

Re: Get\Action .. disable the field only

Posted: Tue Apr 14, 2020 4:29 pm
by Natter
oGet:bGotFocus:={||oGet:aControls[1]:SetFocus()}

Re: Get\Action .. disable the field only

Posted: Tue Apr 14, 2020 5:09 pm
by nageswaragunupudi
Make the Get READONLY.
In that case, the user can not enter any text in the Get, but can click the button.

Re: Get\Action .. disable the field only

Posted: Tue Apr 14, 2020 5:10 pm
by Rick Lipkin
Gentleman

I found the answer ... and yes Rao .. you were correct !!!!!

Code: Select all | Expand

REDEFINE GET oBreakC   VAR nBreakC         ID 133 of oGRPS PICTURE "999.99" BITMAP "find";
      ACTION ( _RateSlct( cMode,oFontB,"BUTTON",cInstate,cOutState,1,;
                          @nBreakC,oBreakC,@nLunchC,oLunchC,@nDinnerC,oDinnerC,@nMRate,oMRate),;
                         _Exp(  @nBreak,  @nBreakC,  @nBreakT,oBreakT, ;
                         @nLunch,  @nLunchC,  @nLunchT,  oLunchT, ;
                         @nDinner, @nDinnerC, @nDinnerT, oDinnerT, ;
                         @nTmeals, oTmeals,   @nTotalExp,oTotalExp,;
                         @nTHotel, @nTMileage,@nTRegist, @nTAirFare,;
                         @nTMisc,  @nNights,  @nHcost,   oTHotel,;
                         @nMiles,  @nMrate, oTmileage,;
                         oLunch:SetFocus(),oLunch:oJump := oLunch ) ) COLOR CLR_BLACK, 16053492 READONLY
 
Adding the Readonly clause will disable the field and the button still works and returns the correct value to the readonly field

Image

Thanks
Rick Lipkin

Re: Get\Action .. disable the field only

Posted: Fri Mar 14, 2025 4:27 am
by dutch
Dear All,

I try as this topic but the TGET:VarPut() do not accept the new value assign from ACTION. I use TGET:VarPut() and after use TGET:VarGet(), it return as Original Data before change.

Thanks for any help and suggestion.

Re: Get\Action .. disable the field only

Posted: Fri Mar 14, 2025 8:52 am
by Antonio Linares
Dear Dutch,

Here you have a working example:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oDlg, oGet, cText := "test"

   DEFINE DIALOG oDlg 

   @ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY

   ACTIVATE DIALOG oDlg CENTERED

return nil

Re: Get\Action .. disable the field only

Posted: Sat Mar 15, 2025 8:59 am
by dutch
Dear Antonio,

I use reuse function to use in ACTION and I prefer to use TGET:VarPut() instead of write value to Variable. I see in TGET classes and modify as below and can use TGET:VarPut() write Value to TGET.

Code: Select all | Expand

  METHOD VarPut( uVal ) INLINE  If( ValType( ::bSetGet ) == "B", ; // .and. ! ::lReadOnly,; // Remark for use VarPut with READONLY 
                                     Eval( ::bSetGet, uVal ),)
Thank you so much,
Antonio Linares wrote: Fri Mar 14, 2025 8:52 am Dear Dutch,

Here you have a working example:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oDlg, oGet, cText := "test"

   DEFINE DIALOG oDlg 

   @ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY

   ACTIVATE DIALOG oDlg CENTERED

return nil

Re: Get\Action .. disable the field only

Posted: Sat Mar 15, 2025 9:15 am
by Antonio Linares
You can do it also this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oDlg, oGet, cText := "test"

   DEFINE DIALOG oDlg 

   @ 2, 2 GET oGet VAR cText ACTION ( oGet:lReadOnly := .F., oGet:VarPut( "hello" ), oGet:lReadOnly := .T. ) SIZE 80, 20 READONLY

   ACTIVATE DIALOG oDlg CENTERED

return nil

Re: Get\Action .. disable the field only

Posted: Sat Mar 15, 2025 4:27 pm
by dutch
Dear Antonio,

Yes, I got it. Thank you so much.