Using oRec:Modified() in BUTTON with WHEN

Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Hi,

I have compiled "maria15.prg" with this change "WHEN oRec:Modified()" in btnbmp command.

Code: Select all | Expand

  @ 420,020 BTNBMP PROMPT "Save"   SIZE 150,30 PIXEL FLAT OF oDlg ;                        
      ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() ) WHEN oRec:Modified()  
 


It behaved like I expected. When I press add or edit, "Save" button is disable. When I modified any field (with enter or focus another field), "Save" button is enabled. THERE IS NO PROBLEM IN THIS CASE.

Next, I have put all the fields in a folderEx and "Save" button never Enabled when I change fields. WHY?

Thanks in advance.
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
Antonio Linares
Site Admin
Posts: 42723
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 93 times
Been thanked: 106 times
Contact:

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Antonio Linares »

Hakan,

We are checking it
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

Horizon wrote:Hi,

It behaved like I expected. When I press add or edit, "Save" button is disable. When I modified any field (with enter or focus another field), "Save" button is enabled. THERE IS NO PROBLEM IN THIS CASE.

Next, I have put all the fields in a folderEx and "Save" button never Enabled when I change fields. WHY?

Thanks in advance.


Please, explain better
Your put your BtnBmp in oDlg ( parent of oFolderEx ) or in oFoldeEx:aDialogs[ n ] ( for example n = 1, .... ) ?
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

cnavarro wrote:
Horizon wrote:Hi,

It behaved like I expected. When I press add or edit, "Save" button is disable. When I modified any field (with enter or focus another field), "Save" button is enabled. THERE IS NO PROBLEM IN THIS CASE.

Next, I have put all the fields in a folderEx and "Save" button never Enabled when I change fields. WHY?

Thanks in advance.


Please, explain better
Your put your BtnBmp in oDlg ( parent of oFolderEx ) or in oFoldeEx:aDialogs[ n ] ( for example n = 1, .... ) ?


Hi Mr. Navarro,

This is modified version of Maria15.prg with folderex. This shows the problem.

Thanks.

Code: Select all | Expand

/*
* Demonstrates oRs:EditBaseRecord( [cFieldList], [lAppend], [bEditDlg], [oBrw] )
* Where RowSet contains only some of the fields. this method can be used
* to edit full record of the table with all fields/selected fields
*
*/


#include "fivewin.ch"
#include "dbcombo.ch"

static aStates

//----------------------------------------------------------------------------//

function Main()

   local oCn, oRs
   local oDlg, oBrw

   FWNumFormat( "A", .t. )

   oCn   := FW_DemoDB()

   aStates  := oCn:Execute( "SELECT CODE,NAME FROM states" )
   oRs   := oCn:RowSet( "SELECT ID,FIRST,CITY,SALARY FROM customer" )

   DEFINE DIALOG oDlg SIZE 500,600 PIXEL TRUEPIXEL ;
      TITLE "EditBaseRecord()"

   @ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oRs AUTOCOLS ;
      COLSIZES -4, -20, -20 ;
      CELL LINES NOBORDER FOOTERS

   WITH OBJECT oBrw
      :Salary:nFooterType  := AGGR_SUM
      :MakeTotals()
      :CreateFromCode()
   END

   @ 20, 20 BTNBMP PROMPT "ADD"  SIZE 100,30 PIXEL FLAT OF oDlg ;
      ACTION oRs:EditBaseRecord( nil, .t., { |oRec| MyEditDlg( oRec ) }, oBrw )

   @ 20,130 BTNBMP PROMPT "EDIT" SIZE 100,30 PIXEL FLAT OF oDlg ;
      ACTION oRs:EditBaseRecord( nil, .f., { |oRec| MyEditDlg( oRec ) }, oBrw )

   ACTIVATE DIALOG oDlg CENTERED

return nil

static function MyEditDlg( oRec )

   local lNew     := ( oRec:RecNo == 0 )
   local oDlg, oFont, oFld

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
   DEFINE DIALOG oDlg SIZE 400,470 PIXEL  FONT oFont ;
      TITLE If( lNew, "ADD NEW ", "EDIT" ) + " RECORD"
     
    @ 2, 3 FOLDERex oFld OF oDlg SIZE 395, 390 PIXEL;
      PROMPTS "Page1", "Page2","Page3","Page4" ;
      ROUND 10
 
   @ 015,010 SAY "ID :"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 030,010 SAY "First"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 045,010 SAY "Last"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 060,010 SAY "Street"        SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 075,010 SAY "City"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 090,010 SAY "State"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 105,010 SAY "Zip"           SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 120,010 SAY "HireDate"      SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 135,010 SAY "Married"       SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 150,010 SAY "Age"           SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 165,010 SAY "Salary"        SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 180,010 SAY "Notes"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT

   @ 015,055 GET oRec:ID         SIZE 050,12 PIXEL OF oFld:aDialogs[1] READONLY RIGHT
   @ 030,055 GET oRec:First      SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:First )
   @ 045,055 GET oRec:Last       SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:Last )
   @ 060,055 GET oRec:Street     SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:Street )
   @ 075,055 GET oRec:City       SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:City )
   @ 090,055 DBCOMBO oRec:State  SIZE 120,300 PIXEL OF oFld:aDialogs[1] ;
      ALIAS aStates ITEMFIELD "1" LISTFIELD "2"
   @ 105,055 GET oRec:Zip        SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:Zip )
   @ 120,055 GET oRec:HireDate   SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:HireDate )
   @ 135,055 CHECKBOX oRec:Married PROMPT "" SIZE 22,12 PIXEL OF oFld:aDialogs[1]
   @ 150,055 GET oRec:Age        SIZE 120,12 PIXEL OF oFld:aDialogs[1] PICTURE "99" RIGHT VALID ( oRec:Age >= 20 )
   @ 165,055 GET oRec:Salary     SIZE 120,12 PIXEL OF oFld:aDialogs[1] PICTURE "999,999.99" RIGHT VALID ( oRec:Salary > 0 )
   @ 180,055 GET oRec:Notes      SIZE 120,12 PIXEL OF oFld:aDialogs[1]

   @ 210,010 BTNBMP PROMPT "Save"   SIZE 75,15 PIXEL FLAT OF oDlg ;
      ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() ) WHEN oRec:Modified()
     
   @ 210,120 BTNBMP PROMPT "Cancel" SIZE 75,15 PIXEL FLAT OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED
      //ON PAINT oDlg:Box( 15, 10, 395, 390 )

return nil

 
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

Yes, please, look my sample
You are defining the coordinates of the buttons with values that belong to dialog 1 of the folder, so the defined actions do not work, even if you have defined with the OF clause, that belong to the main dialog
I changed any size and coordinates of your sample.
I changed nClrPane of dialogs childs of folder only for control size of folder and dialogs defined
When you define the buttons in the main dialog that contains the folder and not in the dialogs of the folder, the actions that you perform in the gets of each dialog do not refresh the defined buttons in main dialog
If you define buttons of oFld:aDialogs[ 1 ], run ok also ( please look your coordinates in this case )
Therefore, you have to control the refresh of the buttons when these controls are in another dialog different from the one with the focus ( and get defined )
Look get of oRec:Last,
This can be a way to control this

Code: Select all | Expand


/*
* Demonstrates oRs:EditBaseRecord( [cFieldList], [lAppend], [bEditDlg], [oBrw] )
* Where RowSet contains only some of the fields. this method can be used
* to edit full record of the table with all fields/selected fields
*
*/


#include "fivewin.ch"
#include "dbcombo.ch"

static aStates

//----------------------------------------------------------------------------//

function Main()

   local oCn, oRs
   local oDlg, oBrw

   FWNumFormat( "A", .t. )

   oCn   := FW_DemoDB()

   aStates  := oCn:Execute( "SELECT CODE,NAME FROM states" )
   oRs   := oCn:RowSet( "SELECT ID,FIRST,CITY,SALARY FROM customer" )

   DEFINE DIALOG oDlg SIZE 500,600 PIXEL TRUEPIXEL ;
      TITLE "EditBaseRecord()"

   @ 70,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oRs AUTOCOLS ;
      COLSIZES -4, -20, -20 ;
      CELL LINES NOBORDER FOOTERS

   WITH OBJECT oBrw
      :Salary:nFooterType  := AGGR_SUM
      :MakeTotals()
      :CreateFromCode()
   END

   @ 20, 20 BTNBMP PROMPT "ADD"  SIZE 100,30 PIXEL FLAT OF oDlg ;
      ACTION oRs:EditBaseRecord( nil, .t., { |oRec| MyEditDlg( oRec ) }, oBrw )

   @ 20,130 BTNBMP PROMPT "EDIT" SIZE 100,30 PIXEL FLAT OF oDlg ;
      ACTION oRs:EditBaseRecord( nil, .f., { |oRec| MyEditDlg( oRec ) }, oBrw )

   ACTIVATE DIALOG oDlg CENTERED

return nil

static function MyEditDlg( oRec )

   local lNew     := ( oRec:RecNo == 0 )
   local oDlg, oFont, oFld

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
   DEFINE DIALOG oDlg SIZE 400,570 PIXEL  FONT oFont ;
      TITLE If( lNew, "ADD NEW ", "EDIT" ) + " RECORD"
     
    //@ 2, 3 FOLDERex oFld OF oDlg SIZE 395, 390 PIXEL;
    @ 2, 3 FOLDERex oFld OF oDlg SIZE 380/2, 440/2 PIXEL;
      PROMPTS "Page1", "Page2","Page3","Page4" ;
      ROUND 10
   // This for look size of folder and dialogs and not put buttons in a dialog of folder
   AEVal( oFld:aDialogs, { | o | o:SetColor( CLR_BLUE, CLR_YELLOW ) } )

   @ 015,010 SAY "ID :"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 030,010 SAY "First"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 045,010 SAY "Last"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 060,010 SAY "Street"        SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 075,010 SAY "City"          SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 090,010 SAY "State"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 105,010 SAY "Zip"           SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 120,010 SAY "HireDate"      SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 135,010 SAY "Married"       SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 150,010 SAY "Age"           SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 165,010 SAY "Salary"        SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT
   @ 180,010 SAY "Notes"         SIZE 40,10 PIXEL OF oFld:aDialogs[1] RIGHT

   @ 015,055 GET oRec:ID         SIZE 050,12 PIXEL OF oFld:aDialogs[1] READONLY RIGHT
   @ 030,055 GET oRec:First      SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:First )
   @ 045,055 GET oRec:Last       SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID ( oDlg:AEValWhen(), !Empty( oRec:Last ) )
   @ 060,055 GET oRec:Street     SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:Street )
   @ 075,055 GET oRec:City       SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:City )
   @ 090,055 DBCOMBO oRec:State  SIZE 120,300 PIXEL OF oFld:aDialogs[1] ;
      ALIAS aStates ITEMFIELD "1" LISTFIELD "2"
   @ 105,055 GET oRec:Zip        SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:Zip )
   @ 120,055 GET oRec:HireDate   SIZE 120,12 PIXEL OF oFld:aDialogs[1] VALID !Empty( oRec:HireDate )
   @ 135,055 CHECKBOX oRec:Married PROMPT "" SIZE 22,12 PIXEL OF oFld:aDialogs[1]
   @ 150,055 GET oRec:Age        SIZE 120,12 PIXEL OF oFld:aDialogs[1] PICTURE "99" RIGHT VALID ( oRec:Age >= 20 )
   @ 165,055 GET oRec:Salary     SIZE 120,12 PIXEL OF oFld:aDialogs[1] PICTURE "999,999.99" RIGHT VALID ( oRec:Salary > 0 )
   @ 180,055 GET oRec:Notes      SIZE 120,12 PIXEL OF oFld:aDialogs[1]

   @ 250,010 BTNBMP PROMPT "Save"   SIZE 75,15 PIXEL FLAT OF oDlg ;
      ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() ) WHEN oRec:Modified()
     
   @ 250,120 BTNBMP PROMPT "Cancel" SIZE 75,15 PIXEL FLAT OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED
      //ON PAINT oDlg:Box( 15, 10, 395, 390 )

return nil

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Thank you Mr. Navarro,

This is only sample for demontranting my problem.

1. I cannot define save, cancel buton in folder's diyalog. Because this butons are in my class. I Just define The gets.

2. I also cannot write "odlg:AEvalWhen()" every gets. There are lots of gets.

I belive it should be a short way.

Regards
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

And you want the status of the button to change the moment you change the value of a get, right? .......................
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Yes Mr. Navarro
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

Or

Code: Select all | Expand



.../...

   AEVal( oFld:aDialogs[ 1 ]:aControls, { | o | o:bLostFocus := { | o | oDlg:AEValWhen() } } )  

   @ 250,010 BTNBMP PROMPT "Save"   SIZE 75,15 PIXEL FLAT OF oDlg ;
      ACTION ( If( oRec:Modified(), oRec:Save(), nil ), oDlg:End() ) WHEN oRec:Modified()
     
   @ 250,120 BTNBMP PROMPT "Cancel" SIZE 75,15 PIXEL FLAT OF oDlg ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Hi Mr. Navarro,

It seems it works when we don't use bLostFocus locally in get.

Thanks.
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Hi Mr. Navarro,

When I try use below line,

Code: Select all | Expand

AEVal( oFld:aDialogs[ 1 ]:aControls, { | o | o:bLostFocus := { | o | oDlg:AEValWhen() } } )


I think there is a problem like that. When you change a field and tab or using mouse another field. There is not any change in button status. it is still disabled. but when i press tab or using mouse another field second time, button is enabled. Is it normal?

This behavior can also be seen my modified example of maria15.prg.

Thanks.
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

Horizon wrote:Hi Mr. Navarro,

When I try use below line,

Code: Select all | Expand

AEVal( oFld:aDialogs[ 1 ]:aControls, { | o | o:bLostFocus := { | o | oDlg:AEValWhen() } } )


I think there is a problem like that. When you change a field and tab or using mouse another field. There is not any change in button status. it is still disabled. but when i press tab or using mouse another field second time, button is enabled. Is it normal?

This behavior can also be seen my modified example of maria15.prg.

Thanks.


Hakan, for me it's OK

Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Hi Mr. Navarro,

I think I could not tell my problem.

First, press edit button.

Change OSCAR to OSCAR1 at First field.

click Last field

You can see than Save button is not enabled.

click Street field.

Save button is enabled.

It is not ok.

You have not change any field in your example.

Thanks.
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
User avatar
cnavarro
Posts: 6605
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Has thanked: 6 times
Been thanked: 8 times

Re: Using oRec:Modified() in BUTTON with WHEN

Post by cnavarro »

Hakan, try with this

Code: Select all | Expand


   AEVal( oFld:aDialogs[ 1 ]:aControls, { | o | if( o:ClassName() == "TGET" .and. !o:lReadOnly, ;
               ( o:bGotFocus := { | o | oDlg:AEValWhen() } ), ) } )  

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Horizon
Posts: 1329
Joined: Fri May 23, 2008 1:33 pm
Has thanked: 6 times
Been thanked: 1 time

Re: Using oRec:Modified() in BUTTON with WHEN

Post by Horizon »

Hi Mr. Navarro,

It seems It is OK now.

Thank again.
Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
Post Reply