BUTTON ACTION in a Loop

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: BUTTON ACTION in a Loop

Post by AUGE_OHR »

hi,

i have made a Sample
DEMOMEMO.ZIP
(2.51 KiB) Downloaded 72 times
i have try every Answer but still none was right. :(

i do understand "Problem of loop".
under Xbase++ i can use a Function to get a "detached Local"

but it does not work with harbour HMG :evil:
please have a look and tell me what i´m doing wrong, thx
have fun
Jimmy
edk
Posts: 998
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: BUTTON ACTION in a Loop

Post by edk »

AUGE_OHR wrote: Fri Jan 01, 2021 9:02 pm hi,

i have made a Sample
DEMOMEMO.ZIP
i have try every Answer but still none was right. :(

i do understand "Problem of loop".
under Xbase++ i can use a Function to get a "detached Local"

but it does not work with harbour HMG :evil:
please have a look and tell me what i´m doing wrong, thx
As I wrote in my previous post: http://hmgforum.com/viewtopic.php?p=64676#p64676 , this is a working solution:
edk wrote: Fri Jan 01, 2021 11:41 am IMHO it should be

Code: Select all

   cProc := "ShowMemo( '" + cFIELD + "' ) "
   ACTION &cProc  
Working sample:

Code: Select all

#include "HMG.CH"
#include "Dbstruct.ch"

REQUEST DBFCDX
REQUEST DBFNTX

MEMVAR _HMG_SYSDATA
PROCEDURE Main

   DEFINE WINDOW Win_1 ;
         AT 0, 0 ;
         WIDTH 640 HEIGHT 480 ;
         TITLE 'Demo Memo' ;
         MAIN

      DEFINE BUTTON Button_F1
         PARENT Win_1
         ROW 10
         COL 10
         WIDTH 610
         HEIGHT 410
         ACTION GetStartFile()
         CAPTION "start Demo"
         FONTNAME "ARIAL"
         FONTSIZE "20"
         TABSTOP .T.
         VISIBLE .T.
         TRANSPARENT .F.
         MULTILINE .F.
      END BUTTON

   END WINDOW

   CENTER WINDOW Win_1
   ACTIVATE WINDOW Win_1

RETURN


PROCEDURE GetStartFile()
LOCAL ii, iMax, aStruct := {}
LOCAL nIndex  := 1
LOCAL cTitle  := "load DBF Structure"
LOCAL cFile   := GetFile( { { "DBF File", "*.DBF" } }, cTitle )

   IF !EMPTY( cFile )
      USE ( cFile ) VIA "DBFCDX"
      EditDetail(nIndex, .T. )
      CLOSE
   ENDIF

RETURN


PROCEDURE EditDetail(nIndex ,lEdit )
LOCAL i, iMax, cObj, cLabel, nHeight
LOCAL cText, cType, nSize, nDec, nRow, cFIELD
LOCAL nMaxheight  := GetDeskTopRealHeight()
LOCAL nMaxwide    := GetDesktopRealWidth()
LOCAL nEditHeight := 600
LOCAL nTitlebar   := GETTITLEHEIGHT()
LOCAL nItemheight := 33
LOCAL cTitle      := IF( lEdit, "Edit Record ", "View only " )
LOCAL oBroEdit    := "BroEdit_" + STRZERO( nIndex, 2 )
LOCAL aStruc, nMaxLen := 0
LOCAL nRecno, xValue, cRepl, cProc


   aStruc := DBSTRUCT()
   iMax := LEN( aStruc )
   nHeight := iMax * nItemheight

   IF nHeight + nItemheight + nTitlebar < nEditHeight
      nEditHeight := nHeight + nItemheight + nTitlebar
   ENDIF
   IF nHeight > nMaxheight
      nEditHeight := nMaxheight
   ENDIF

   IF !EMPTY( ALIAS() )
      cTitle += ALIAS()
   ENDIF

   DEFINE WINDOW &oBroEdit ;
         AT 0, 0 ;
         WIDTH 300 ;
         HEIGHT nEditHeight ;
         VIRTUAL WIDTH 9999 ;
         VIRTUAL HEIGHT( iMax * nItemheight ) + nItemheight + nTitlebar + 1 ;
         TITLE cTitle ;
         ICON "A1MAIN" ;
         TOPMOST ;
         BACKCOLOR WHITE

      FOR i := 1 TO iMax

         cType := SUBSTR( aStruc[ i ] [ DBS_TYPE ], 1, 1 )

         cLabel := "LABEL_" + STRZERO( i, 3 )
         cObj := "TEXT_" + STRZERO( i, 3 )
         nRow := 32 * ( i - 1 )
         nSize := aStruc[ i ] [ DBS_LEN ]
         nDec := aStruc[ i ] [ DBS_DEC ]

         nMaxLen := MAX( nMaxLen, nSize * 14 )

         cFIELD := aStruc[ i ] [ DBS_NAME ]

         DEFINE LABEL &cLabel
            ROW nRow
            COL 10
            VALUE cFIELD
            WIDTH 80
            HEIGHT 30
            BACKCOLOR WHITE
            FONTCOLOR BLACK
         END LABEL

         // need ALIAS()
         cFIELD := "FIELD->" + aStruc[ i ] [ DBS_NAME ]

         DO CASE
            CASE aStruc[ i ] [ DBS_TYPE ] = "C"

               cRepl := REPLICATE( "!", nSize )

               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TOOLTIP ""
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE CHARACTER
                  CASECONVERT NONE
                  RIGHTALIGN .F.
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK cRepl
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "N" .OR. aStruc[ i ] [ DBS_TYPE ] = "I"

               IF nDec = 0
                  cRepl := REPLICATE( "9", nSize )
               ELSE
                  cRepl := REPLICATE( "9", nSize - nDec - 1 )
                  cRepl += "."
                  cRepl += REPLICATE( "9", nDec )
               ENDIF

               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE NUMERIC
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK cRepl
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "D"
               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE DATE
                  VISIBLE .T.
                  TABSTOP .T.
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "L"

               DEFINE CHECKBOX &cObj
                  ROW nRow
                  COL 100
                  CAPTION ""
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  WIDTH 50
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  VISIBLE .T.
                  TABSTOP .T.
               END CHECKBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "T" .OR. aStruc[ i ] [ DBS_TYPE ] = "@"
               //               cRepl := REPLICATE( "!", nSize )
               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE hb_TSToStr( &cFIELD, .T. )
                  READONLY !lEdit
                  WIDTH( nSize + 6 ) * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TOOLTIP ""
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  CASECONVERT NONE
                  RIGHTALIGN .F.
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK nil                                       // cRepl
               END TEXTBOX


            CASE aStruc[ i ] [ DBS_TYPE ] = "M"

               cFIELD := aStruc[ i ] [ DBS_NAME ]
               cProc := "ShowMemo( '" + cFIELD + "' )"

               DEFINE BUTTON &cObj
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
                  ACTION &cProc
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON

         ENDCASE

      NEXT
   END WINDOW

   nMaxLen += 140
   nMaxLen := MIN( nMaxLen, nMaxwide )
   SetProperty( oBroEdit, "Width", nMaxLen )

   ON KEY ESCAPE OF &oBroEdit ACTION Domethod( oBroEdit, "Release" )
   CENTER WINDOW &oBroEdit

   ACTIVATE WINDOW &oBroEdit

RETURN


PROCEDURE ShowMemo( cFIELD )
*LOCAL cText := &( cFIELD )
LOCAL cText := ( cFIELD )
   Msginfo( cText, "Memo " + cFIELD )
RETURN

*
* EOF
*
Also works:

Code: Select all

               cFIELD := aStruc[ i ] [ DBS_NAME ]
               cProc := "EVAL( { || ShowMemo( '" + cFIELD + "' ) } )"

               DEFINE BUTTON &cObj
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
                  ACTION &cProc
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON
In this case, note how the actions for each control are stored in HMG.
If a variable is used in the definition of an action, then when the action is called, the current, in this case, the last value of the variable will always be taken. Therefore, you must use its current value instead of a variable and toughly pass this value as a parameter.

Here are the errors:

Code: Select all

ACTION & ("{|| ShowMemo (" + cFIELD + ")}")
The result of this entry for the first memo field would be:
&{|| ShowMemo (DIVERSES)}, where DIVERSES will be interpreted as a variable (quotes are missing). Additionally, no block call via EVAL.

However, with this notation:

Code: Select all

ACTION EVAL (cBlock)
the cBlock variable code block will always be executed (after exiting the loop, the cBlock variable has the last value)
Last edited by edk on Sat Jan 02, 2021 12:11 am, edited 6 times in total.
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: BUTTON ACTION in a Loop

Post by SALINETAS24 »

AUGE_OHR wrote: Fri Jan 01, 2021 9:02 pm hi,

i have made a Sample
DEMOMEMO.ZIP
i have try every Answer but still none was right. :(

i do understand "Problem of loop".
under Xbase++ i can use a Function to get a "detached Local"

but it does not work with harbour HMG :evil:
please have a look and tell me what i´m doing wrong, thx

Y esta opción también te la indique en mi primer ejemplo, utilizando el nombre interno del control. :shock:
LA IMAGINACION AL PODER !! :lol:
Un saludo

Code: Select all


#include "HMG.CH"
#include "Dbstruct.ch"

REQUEST DBFCDX
REQUEST DBFNTX

MEMVAR _HMG_SYSDATA
PROCEDURE Main

   DEFINE WINDOW Win_1 ;
         AT 0, 0 ;
         WIDTH 640 HEIGHT 480 ;
         TITLE 'Demo Memo' ;
         MAIN

      DEFINE BUTTON Button_F1
         PARENT Win_1
         ROW 10
         COL 10
         WIDTH 610
         HEIGHT 410
         ACTION GetStartFile()
         CAPTION "start Demo"
         FONTNAME "ARIAL"
         FONTSIZE "20"
         TABSTOP .T.
         VISIBLE .T.
         TRANSPARENT .F.
         MULTILINE .F.
      END BUTTON

   END WINDOW

   CENTER WINDOW Win_1
   ACTIVATE WINDOW Win_1

RETURN


PROCEDURE GetStartFile()
LOCAL ii, iMax, aStruct := {}
LOCAL nIndex  := 1
LOCAL cTitle  := "load DBF Structure"
LOCAL cFile   := GetFile( { { "DBF File", "*.DBF" } }, cTitle )

   IF !EMPTY( cFile )
      USE ( cFile ) VIA "DBFCDX"
      EditDetail(nIndex, .T. )
      CLOSE
   ENDIF

RETURN


PROCEDURE EditDetail(nIndex ,lEdit )
LOCAL i, iMax, cObj, cLabel, nHeight
LOCAL cText, cType, nSize, nDec, nRow, cFIELD
LOCAL nMaxheight  := GetDeskTopRealHeight()
LOCAL nMaxwide    := GetDesktopRealWidth()
LOCAL nEditHeight := 600
LOCAL nTitlebar   := GETTITLEHEIGHT()
LOCAL nItemheight := 33
LOCAL cTitle      := IF( lEdit, "Edit Record ", "View only " )
LOCAL aStruc, nMaxLen := 0
LOCAL nRecno, xValue, cRepl, cBlock, xTal,cBton
LOCAL  oBroEdit    := "BroEdit_" + STRZERO( nIndex, 2 )


   aStruc := DBSTRUCT()
   iMax := LEN( aStruc )
   nHeight := iMax * nItemheight

   IF nHeight + nItemheight + nTitlebar < nEditHeight
      nEditHeight := nHeight + nItemheight + nTitlebar
   ENDIF
   IF nHeight > nMaxheight
      nEditHeight := nMaxheight
   ENDIF

   IF !EMPTY( ALIAS() )
      cTitle += ALIAS()
   ENDIF

   DEFINE WINDOW &oBroEdit ;
         AT 0, 0 ;
         WIDTH 300 ;
         HEIGHT nEditHeight ;
         VIRTUAL WIDTH 9999 ;
         VIRTUAL HEIGHT( iMax * nItemheight ) + nItemheight + nTitlebar + 1 ;
         TITLE cTitle ;
         ICON "A1MAIN" ;
         TOPMOST ;
         BACKCOLOR WHITE

      FOR i := 1 TO iMax

         cType := SUBSTR( aStruc[ i ] [ DBS_TYPE ], 1, 1 )

         cLabel := "LABEL_" + STRZERO( i, 3 )
         cObj := "TEXT_" + STRZERO( i, 3 )
         nRow := 32 * ( i - 1 )
         nSize := aStruc[ i ] [ DBS_LEN ]
         nDec := aStruc[ i ] [ DBS_DEC ]

         nMaxLen := MAX( nMaxLen, nSize * 14 )

         cFIELD := aStruc[ i ] [ DBS_NAME ]

         DEFINE LABEL &cLabel
            ROW nRow
            COL 10
            VALUE cFIELD
            WIDTH 80
            HEIGHT 30
            BACKCOLOR WHITE
            FONTCOLOR BLACK
         END LABEL

         // need ALIAS()
         cFIELD := "FIELD->" + aStruc[ i ] [ DBS_NAME ]
		 
         DO CASE
            CASE aStruc[ i ] [ DBS_TYPE ] = "C"

               cRepl := REPLICATE( "!", nSize )

               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TOOLTIP ""
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE CHARACTER
                  CASECONVERT NONE
                  RIGHTALIGN .F.
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK cRepl
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "N" .OR. aStruc[ i ] [ DBS_TYPE ] = "I"

               IF nDec = 0
                  cRepl := REPLICATE( "9", nSize )
               ELSE
                  cRepl := REPLICATE( "9", nSize - nDec - 1 )
                  cRepl += "."
                  cRepl += REPLICATE( "9", nDec )
               ENDIF

               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE NUMERIC
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK cRepl
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "D"
               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  READONLY !lEdit
                  WIDTH nSize * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  DATATYPE DATE
                  VISIBLE .T.
                  TABSTOP .T.
               END TEXTBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "L"

               DEFINE CHECKBOX &cObj
                  ROW nRow
                  COL 100
                  CAPTION ""
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE &( cFIELD )
                  WIDTH 50
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  VISIBLE .T.
                  TABSTOP .T.
               END CHECKBOX

            CASE aStruc[ i ] [ DBS_TYPE ] = "T" .OR. aStruc[ i ] [ DBS_TYPE ] = "@"
               //               cRepl := REPLICATE( "!", nSize )
               DEFINE TEXTBOX &cObj
                  ROW nRow
                  COL 100
                  HEIGHT 30
                  FIELD &( cFIELD )
                  VALUE hb_TSToStr( &cFIELD, .T. )
                  READONLY !lEdit
                  WIDTH( nSize + 6 ) * 14
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TOOLTIP ""
                  BACKCOLOR WHITE
                  FONTCOLOR BLACK
                  DISABLEDBACKCOLOR IF( lEdit = .T., WHITE, GRAY )
                  DISABLEDFONTCOLOR IF( lEdit = .T., BLACK, GRAY )
                  CASECONVERT NONE
                  RIGHTALIGN .F.
                  VISIBLE .T.
                  TABSTOP .T.
                  INPUTMASK nil                                       // cRepl
               END TEXTBOX


            CASE aStruc[ i ] [ DBS_TYPE ] = "M"

                cFIELD := aStruc[ i ] [ DBS_NAME ]
*               cBlock := DetachLocal(cFIELD)
*               cBlock := &("{||ShowMemo( "+cFIELD+" )}")

               DEFINE BUTTON &cFIELD
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
*                 ACTION &("{||ShowMemo( "+cFIELD+" )}")
*                 ACTION EVAL(cBlock)
                  ACTION ShowMemo( cBton:=GetProperty( ThisWindow.Name, 'FocusedControl') )
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON

         ENDCASE

      NEXT
   END WINDOW

   nMaxLen += 140
   nMaxLen := MIN( nMaxLen, nMaxwide )
   SetProperty( oBroEdit, "Width", nMaxLen )

   ON KEY ESCAPE OF &oBroEdit ACTION Domethod( oBroEdit, "Release" )
   CENTER WINDOW &oBroEdit

   ACTIVATE WINDOW &oBroEdit

RETURN


PROCEDURE ShowMemo( cFIELD )
LOCAL cText := ( cFIELD )
LOCAL cVar:= "FIELD->" + cField
   Msginfo( cText, "Memo " + cFIELD )
   MSGBOX(&cVar)
RETURN


FUNCTION DetachLocal(cFIELD)
LOCAL cRet := "{|| ShowMemo( "+cFIELD+" ) }"
*LOCAL cRet := cFIELD
RETURN &(cRet)

*
* EOF
*

Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
edk
Posts: 998
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: BUTTON ACTION in a Loop

Post by edk »

SALINETAS24 wrote: Fri Jan 01, 2021 10:10 pm Y esta opción también te la indique en mi primer ejemplo, utilizando el nombre interno del control. :shock:
LA IMAGINACION AL PODER !! :lol:
Un saludo

Code: Select all

            CASE aStruc[ i ] [ DBS_TYPE ] = "M"

                cFIELD := aStruc[ i ] [ DBS_NAME ]
*               cBlock := DetachLocal(cFIELD)
*               cBlock := &("{||ShowMemo( "+cFIELD+" )}")

               DEFINE BUTTON &cFIELD
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
*                 ACTION &("{||ShowMemo( "+cFIELD+" )}")
*                 ACTION EVAL(cBlock)
                  ACTION ShowMemo( cBton:=GetProperty( ThisWindow.Name, 'FocusedControl') )
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON

         ENDCASE
This works only if control (button) have the same name as memo field
User avatar
SALINETAS24
Posts: 667
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Contact:

Re: BUTTON ACTION in a Loop

Post by SALINETAS24 »

edk wrote: Fri Jan 01, 2021 10:22 pm
SALINETAS24 wrote: Fri Jan 01, 2021 10:10 pm Y esta opción también te la indique en mi primer ejemplo, utilizando el nombre interno del control. :shock:
LA IMAGINACION AL PODER !! :lol:
Un saludo

Code: Select all

            CASE aStruc[ i ] [ DBS_TYPE ] = "M"

                cFIELD := aStruc[ i ] [ DBS_NAME ]
*               cBlock := DetachLocal(cFIELD)
*               cBlock := &("{||ShowMemo( "+cFIELD+" )}")

               DEFINE BUTTON &cFIELD
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
*                 ACTION &("{||ShowMemo( "+cFIELD+" )}")
*                 ACTION EVAL(cBlock)
                  ACTION ShowMemo( cBton:=GetProperty( ThisWindow.Name, 'FocusedControl') )
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON

         ENDCASE
This works only if control (button) have the same name as memo field
Efectivamente.., ya lo he dicho arriba..."utilizando el nombre interno del control."
Pero también funciona :lol:
Un saludo,
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. :shock:
edk
Posts: 998
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: BUTTON ACTION in a Loop

Post by edk »

Lo siento, no sé español y uso un traductor, que no siempre es perfecto, así que escribí mi comentario después de analizar el código fuente.
Seguro que tu solución funciona. Saludos.
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: BUTTON ACTION in a Loop

Post by AUGE_OHR »

edk wrote: Fri Jan 01, 2021 10:03 pm As I wrote in my previous post: http://hmgforum.com/viewtopic.php?p=64676#p64676 , this is a working solution:
edk wrote: Fri Jan 01, 2021 11:41 am IMHO it should be
Also works:
THX, both Solution work now and give me Name of Field so i can work on to get Value of Memo
have fun
Jimmy
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: BUTTON ACTION in a Loop

Post by AUGE_OHR »

SALINETAS24 wrote: Fri Jan 01, 2021 10:42 pm

Code: Select all

            CASE aStruc[ i ] [ DBS_TYPE ] = "M"
               cFIELD := aStruc[ i ] [ DBS_NAME ]
               
               DEFINE BUTTON &cFIELD
                  ROW nRow
                  COL 100
                  WIDTH 100
                  HEIGHT 30
                  ACTION ShowMemo( cBton:=GetProperty( ThisWindow.Name, 'FocusedControl') )
                  CAPTION "Memo"
                  FONTNAME "ARIAL"
                  FONTSIZE 12
                  TABSTOP .F.
                  VISIBLE .T.
               END BUTTON
         ENDCASE

Code: Select all

PROCEDURE ShowMemo( cFIELD )
LOCAL cText := ( cFIELD )
LOCAL cVar:= "FIELD->" + cField
*   Msginfo( cText, "Memo " + cFIELD )
   MSGinfo(&cVar)      // THIS i want to have
RETURN
This works only if control (button) have the same name as memo field
YES, this Way it work now and i got Context of Memo Field, THX :D
have fun
Jimmy
User avatar
AUGE_OHR
Posts: 2093
Joined: Sun Aug 25, 2019 3:12 pm
DBs Used: DBF, PostgreSQL, MySQL, SQLite
Location: Hamburg, Germany

Re: BUTTON ACTION in a Loop

Post by AUGE_OHR »

hi,
edk wrote: Fri Jan 01, 2021 10:03 pm Here are the errors:

Code: Select all

ACTION & ("{|| ShowMemo (" + cFIELD + ")}")
The result of this entry for the first memo field would be:
&{|| ShowMemo (DIVERSES)}, where DIVERSES will be interpreted as a variable (quotes are missing). Additionally, no block call via EVAL.
now i "saw" my Error

Code: Select all

cProc := "EVAL( { || ShowMemo( ' " + cFIELD + " ' ) } )"
i have miss those "single-quote" :roll:

thx again for help
have fun
Jimmy
Post Reply