function no codeblock

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

function no codeblock

Mensagem por JoséQuintas »

twolstsub.png
Tô achando interessante isso, pra evitar passar muitos parâmetros pra uma função substituta.

Código: Selecionar todos

#include "hwgui.ch"
// #include "common.ch"
// #ifdef __XHARBOUR__
//    #include "ttable.ch"
// #endif

FUNCTION DemoTwoLstSub()

   LOCAL oDlg
   LOCAL aControls := Array(10)
   LOCAL oBrowseSource, oBrowseTarget, oFont
   LOCAL aListSource, aListTarget := {}
   LOCAL aListFull := { { "Eins" }, { "Zwei" }, { "Drei" }, { "Vier" } }

#ifdef __PLATFORM__WINDOWS
   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
#else
   PREPARE FONT oFont NAME "Sans" WIDTH 0 HEIGHT 12 && vorher 13
#endif

   aListSource := AClone( aListFull )

   (aListSource);(aListTarget) // warning -w3 -es2

   INIT DIALOG oDlg ;
      TITLE "demotwolstsub.prg - Select Browsebox Items" ;
      AT    0, 0 ;
      SIZE  800, 600 ;
      FONT  oFont;
      STYLE WS_SYSMENU + WS_SIZEBOX + WS_VISIBLE

   //ButtonForSample( "demotwolstsub.prg", oDlg )

   // Please dimensionize size of both BROWSE windows so that it is enough space to display
   // all items in oItems1 with additional reserve about 20 pixels.
   @ 34, 106  BROWSE oBrowseSource  ;
      ARRAY ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER  // NO VSCROLL

   oBrowseSource:aArray := aListSource
   oBrowseSource:AddColumn( HColumn():New( "Source", { |v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   oBrowseSource:lEditable := .F.
   oBrowseSource:lDispHead := .F. // No Header
   oBrowseSource:active := .T.

   @ 308, 106 BROWSE oBrowseTarget  ;
      ARRAY ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER // NO VSCROLL

   oBrowseTarget:aArray := aListTarget
   oBrowseTarget:AddColumn( HColumn():New( "Target",{|v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   oBrowseTarget:lEditable := .F.
   oBrowseTarget:lDispHead := .F.
   oBrowseTarget:active := .T.

   @ 207, 102 BUTTON aControls[1] CAPTION ">" ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP+BS_FLAT ;
      ON CLICK { ||
         IF Empty( oBrowseSource:aArray )
            RETURN Nil
         ENDIF
         AAdd( oBrowseTarget:aArray, AClone( oBrowseSource:aArray[ oBrowseSource:nCurrent ] ) )
         hb_ADel( oBrowseSource:aArray, oBrowseSource:nCurrent, .T. )
         oBrowseSource:Refresh()
         oBrowseTarget:Refresh()
         RETURN Nil
         }

   @ 207, 147 BUTTON aControls[2] CAPTION  ">>" ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         LOCAL aItem
         FOR EACH aItem IN oBrowseSource:aArray
            AAdd( oBrowseTarget:aArray, AClone( aItem ) )
         NEXT
         oBrowseSource:aArray := {} // reference?
         oBrowseSource:Refresh()
         oBrowseTarget:Refresh()
         RETURN Nil
         }

   @ 207, 233 BUTTON aControls[3] CAPTION  "<"   ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         IF Empty( oBrowseTarget:aArray )
            RETURN Nil
         ENDIF
         AAdd( oBrowseSource:aArray, AClone( oBrowseTarget:aArray[ oBrowseTarget:nCurrent ] ) )
         hb_ADel( oBrowseTarget:aArray, oBrowseTarget:nCurrent, .T. )
         oBrowseSource:Refresh()
         oBrowseTarget:Refresh()
         RETURN Nil
         }

   @ 207, 291 BUTTON aControls[4] CAPTION  "<<"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         LOCAL aItem
         FOR EACH aItem IN oBrowseTarget:aArray
            AAdd( oBrowseSource:aArray, AClone( oBrowseTarget:aArray[ oBrowseTarget:nCurrent ] ) )
         NEXT
         oBrowseTarget:aArray := {} // reference?
         oBrowseSource:Refresh()
         oBrowseTarget:Refresh()
         RETURN Nil
         }

   @ 36, 355 BUTTON aControls[5] CAPTION "Show"   ;
      SIZE    80,32 ;
      STYLE   WS_TABSTOP + BS_FLAT ;
      ON CLICK ;
         { || hwg_MsgInfo( hb_ValToExp( oBrowseTarget:aArray ) ) }

   @ 158, 355 BUTTON aControls[6] CAPTION   "Reset"   ;
      SIZE      80, 32 ;
      STYLE     WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         oBrowseSource:aArray := AClone( aListFull )
         oBrowseTarget:aArray:= {} // reference?
         oBrowseSource:Refresh()
         oBrowseTarget:Refresh()
         RETURN Nil
         }

   @ 367, 355 BUTTON aControls[7] CAPTION  "Help"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         hwg_MsgInfo( "No help" )
         RETURN Nil
         }

   @ 33, 400 SAY aControls[9] CAPTION "Select items"  ;
      SIZE 441,22 ;
      STYLE SS_CENTER

   ACTIVATE DIALOG oDlg CENTER

RETURN Nil

//#include "demo.ch"
Fonte original

Código: Selecionar todos

#include "hwgui.ch"
// #include "common.ch"
// #ifdef __XHARBOUR__
//    #include "ttable.ch"
// #endif

FUNCTION Main()

   LOCAL oMainWindow
   LOCAL aResult

   aResult := {}

   INIT WINDOW oMainWindow ;
      MAIN ;
      TITLE "Example" ;
      AT 0,0 ;
      SIZE hwg_Getdesktopwidth(), hwg_Getdesktopheight() - 28

   // MENUITEM in main menu on GTK/Linux does not start the desired action
   // Submenu needed
   MENU OF oMainWindow
      MENU TITLE "&Exit"
        MENUITEM "&Quit" ACTION oMainWindow:Close()
      ENDMENU
      MENU TITLE "&Teste"
        MENUITEM "&Do it" ACTION { || aResult := Teste() }
      ENDMENU
      MENU TITLE "&Show Result"
        MENUITEM "&Show" ACTION ShowR( aResult )
      ENDMENU
   ENDMENU

   ACTIVATE WINDOW oMainWindow CENTER

RETURN Nil

FUNCTION ShowR( ar, bdebug )

   * Show the contents of the result array
   * or for debugging purpose
   * --------------------------------------------

   LOCAL j, co , d , t

   d := .F.
   IF bdebug <> NIL
      d := bdebug
   ENDIF
   IF d
      t := "Debug"
   ELSE
      t := "Result Array"
   ENDIF
   co := ""
   IF LEN(ar) < 1
      hwg_msgInfo( "Result is empty", t )
      RETURN NIL
   ENDIF
   FOR j := 1 TO LEN( ar )
     co := co + ar[ j ] + CHR(10)
   NEXT
   hwg_msgInfo( co, t )

RETURN Nil

FUNCTION Teste()

   * Main dialog for moving items beetween
   * two browsboxes
   * --------------------------------------------

   LOCAL _frm_2browsboxsel

   LOCAL oLabel1, obrowsbox1, obrowsbox2, oButton1, oButton2, oButton3, oButton4, oButton5
   LOCAL oButton6, oButton7, oFont, oItemsR
   LOCAL oItems1, oItems2

#ifdef __PLATFORM__WINDOWS
   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
#else
   PREPARE FONT oFont NAME "Sans" WIDTH 0 HEIGHT 12 && vorher 13
#endif

   * items
   oItems1 := GetItems()
   oItems2 := {}
   (oItems1);(oItems2) // -w3 -es2

   * return Value
   oItemsR := {}

   INIT DIALOG _frm_2browsboxsel ;
      TITLE "Select Browsebox Items" ;
      AT    536, 148 ;
      SIZE  516, 465 ;
      FONT  oFont;
      STYLE WS_SYSMENU+WS_SIZEBOX+WS_VISIBLE

   @ 33,15 SAY oLabel1 CAPTION "Select items"  SIZE 441,22 ;
        STYLE SS_CENTER

   // Please dimensionize size of both BROWSE windows so that it is enough space to display
   // all items in oItems1 with additional reserve about 20 pixels.
   @ 34,56  BROWSE obrowsbox1  ;
      ARRAY oItems1 ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER  // NO VSCROLL

   @ 308,56 BROWSE obrowsbox2  ;
      ARRAY oItems2 ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER // NO VSCROLL

   // Init Browse windows
   obrowsbox1:aArray := GetItems() // Fill source browse box with all items
   obrowsbox2:aArray := {}
   obrowsbox1:AddColumn( HColumn():New( "Source",{|v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   obrowsbox2:AddColumn( HColumn():New( "Target",{|v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   obrowsbox1:lEditable := .F.
   obrowsbox2:lEditable := .F.
   obrowsbox1:lDispHead := .F. // No Header
   obrowsbox2:lDispHead := .F.
   obrowsbox1:active := .T.
   obrowsbox2:active := .T.

   @ 207,92 BUTTON oButton1 CAPTION ">" ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP+BS_FLAT ;
      ON CLICK { || browsBOX_ITEMTORI( obrowsbox1, obrowsbox2 ) }

   @ 207,137 BUTTON oButton2 ;
      CAPTION  ">>" ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || browsBOX_ITEMTORA( obrowsbox1, obrowsbox2, GetItems() ) }

   @ 207,223 BUTTON oButton3 ;
      CAPTION  "<"   ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || browsBOX_ITEMTOLI( obrowsbox1, obrowsbox2 ) }

   @ 207,281 BUTTON oButton4 ;
      CAPTION  "<<"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || browsBOX_ITEMTOLA( obrowsbox1, obrowsbox2, GetItems() ) }

   @ 36,345 BUTTON oButton5 ;
      CAPTION "OK"   ;
      SIZE    80,32 ;
      STYLE   WS_TABSTOP + BS_FLAT ;
      ON CLICK ;
         { || oItemsR := obrowsbox2:aArray , _frm_2browsboxsel:Close() }  /* return content of target browsbox */

   @ 158,345 BUTTON oButton6 ;
      CAPTION   "Cancel"   ;
      SIZE      80, 32 ;
      STYLE     WS_TABSTOP + BS_FLAT ;
      ON CLICK { || _frm_2browsboxsel:Close() }

   @ 367,345 BUTTON oButton7 ;
      CAPTION  "Help"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || Hilfe() }

   ACTIVATE DIALOG _frm_2browsboxsel CENTER
   * Returns thze array with results.
   * Empty array, if pressed "Cancel" Button

RETURN browsBOX_procarray( oItemsR )

STATIC FUNCTION GetItems()

   * This function is a solution of a strange behavior:
   * browsBOX_ITEMTORA(obrowsbox1,obrowsbox2,oItems1)
   * Parameter oItems1 left the items moved by browsBOX_ITEMTORI()
   * (seems to be only a pointer to oItems1)
   * Is overwritten, but should be fixed.
   * This works:
   * browsBOX_ITEMTORA(obrowsbox1,obrowsbox2,GetItems() )
   * --------------------------------------------

RETURN { { "Eins" },{ "Zwei" },{ "Drei" },{ "Vier" } }

FUNCTION browsBOX_procarray( aEin )

   * Reduces the 2 dimensional array of
   * BROWSE classs to one dimension.
   * Is only valid for this case, because the
   * BROWSE list contains only one column.
   * --------------------------------------------

   LOCAL iii, aret, cret

   aret := {}
   FOR iii := 1 TO LEN( aEin )
      cret := aEin[ iii , 1 ]
      AADD( aret, cret )
   NEXT

RETURN aret

FUNCTION browsBOX_ITEMTORI( obrows1, obrows2 )

   * moves selected item to target browse box
   * --------------------------------------------

   LOCAL nPosi, cIt , aIt

   * Source browse box empty: nothing to do
   IF Empty( obrows1:aArray )
      RETURN NIL
   ENDIF
   * Get selected item
   nPosi := obrows1:nCurrent
   cIt   := obrows1:aArray[ nPosi, 1 ]
   aIt   := { cIt }
   * Search item in target browse box, if found, nothing to do (programing error)
   IF browsBOX_ITEMFIND( obrows2, cIt ) <> 0
      RETURN NIL
   ENDIF
   // dbg(obrows2)
   * delete item in source browse box
   browsBOX_DelItem( obrows1, nPosi )
   * add item in target browse box
   AADD( obrows2:aArray, aIt )
   * refresh both
   obrows1:Refresh()
   obrows2:Refresh()

RETURN Nil

FUNCTION browsBOX_DelItem( obrw, nPosi )

   * Deletes an item in browse array
   * --------------------------------------------

   ADEL( obrw:aArray, nPosi )
   ASize( obrw:aArray, Len( obrw:aArray ) - 1 )
   obrw:lChanged := .T.

RETURN Nil

FUNCTION browsBOX_ITEMTOLI( obrows1, obrows2 )

   * moves selected item to source browsbox
   * --------------------------------------------

   LOCAL nPosi, cIt, aIt

   IF Empty( obrows2:aArray )
      RETURN Nil
   ENDIF
   nPosi := obrows2:nCurrent
   cIt   := obrows2:aArray[ nPosi, 1 ]
   aIt := { cIt }
   IF browsBOX_ITEMFIND( obrows1, cIt ) <> 0
      RETURN NIL
   ENDIF
   browsBOX_DelItem( obrows2, nPosi )
   AADD(obrows1:aArray, aIt )
   * refresh both
   obrows2:Refresh()
   obrows1:Refresh()

RETURN Nil

FUNCTION browsBOX_ITEMTORA( obrows1, obrows2, oIto )

   * moves all items to target browsbox
   * --------------------------------------------
   // Clear both browse boxes
   obrows1:aArray := {}
   obrows2:aArray := {}
   // Init target with all items
   obrows2:aArray := oIto
   obrows1:Refresh()
   obrows2:Refresh()

RETURN Nil

FUNCTION browsBOX_ITEMTOLA( obrows1, obrows2, oIto )

   * moves all items to source browsbox
   * --------------------------------------------
   obrows1:aArray := {}
   obrows2:aArray := {}
   obrows1:aArray := oIto
   obrows1:Refresh()
   obrows2:Refresh()

RETURN Nil

FUNCTION browsBOX_ITEMFIND( obrows, cItem )

   * searches the item cItem (String value) in
   * browsbox obrows and returns their position.
   * returns 0, if no match.

   LOCAL i

   //    hwg_msgInfo(STR( LEN(obrows:aArray)  ) )
   FOR i := 1 TO LEN( obrows:aArray )
      IF AllTrim( obrows:aArray[ i, 1 ] ) == ALLTRIM( cItem )
         RETURN i
      ENDIF
   NEXT

RETURN 0

FUNCTION Hilfe()

   * Display help window

   hwg_MsgInfo( "Need Help", "HELP !" )

RETURN Nil

FUNCTION dbg( obr )

   * Debug output
   * --------------------------------------------

   LOCAL i,m,s

   m := Len( obr:aArray )
   s := AllTrim( Str( m ) ) + CHR(10)
   FOR i := 1 TO m
      s:=  s + obr:aArray[ i, 1 ] + CHR(10)
   NEXT
   IF m == 0
      s := s + "Empty Array"
   ENDIF
   hwg_MsgInfo( s, "Debug" )

RETURN Nil
Nem tudo se trata de apenas incluir no demoall.
É trabalhoso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

function no codeblock

Mensagem por JoséQuintas »

Mesmo assim, alterei pra função.
Reduzi de5 pra 3 "funções".

Código: Selecionar todos

/*
 * $Id$
 *
 * HWGUI - Harbour Win32 and Linux (GTK) GUI library
 *
 *  TwoLstSub.prg
 *
 * Sample for select and move items between two browse windows,
 * a source and a target box.
 * This sample is a good substitute for TwoListbox.prg,
 * because listbox is at the moment Windows only.
 *
 * Copyright 2020 Wilfried Brunken, DF7BE
 * https://sourceforge.net/projects/cllog/
 */

    * Status:
    *  WinAPI   :  Yes
    *  GTK/Linux:  Yes
    *  GTK/Win  :  Yes
    * Port of Listbox to GTK under construction

*  Modification documentation
*
*  +------------+-------------------------+----------------------------------+
*  + Date       ! Name and Call           ! Modification                     !
*  +------------+-------------------------+----------------------------------+
*  ! 10.12.2024 ! W.Brunken        DF7BE  ! Bugfix compile GTK               !
*  +------------+-------------------------+----------------------------------+
*  ! 27.04.2020 ! W.Brunken        DF7BE  ! first creation                   !
*  +------------+-------------------------+----------------------------------+
*

#include "hwgui.ch"
// #include "common.ch"
// #ifdef __XHARBOUR__
//    #include "ttable.ch"
// #endif

FUNCTION DemoTwoLstSub()

   LOCAL oDlg
   LOCAL aControls := Array(10)
   LOCAL oBrowseSource, oBrowseTarget, oFont
   LOCAL aListSource, aListTarget := {}
   LOCAL aListFull := { { "Eins" }, { "Zwei" }, { "Drei" }, { "Vier" } }

#ifdef __PLATFORM__WINDOWS
   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
#else
   PREPARE FONT oFont NAME "Sans" WIDTH 0 HEIGHT 12 && vorher 13
#endif

   aListSource := AClone( aListFull )

   (aListSource);(aListTarget) // warning -w3 -es2

   INIT DIALOG oDlg ;
      TITLE "demotwolstsub.prg - Select Browsebox Items" ;
      AT    0, 0 ;
      SIZE  800, 600 ;
      FONT  oFont;
      STYLE WS_SYSMENU + WS_SIZEBOX + WS_VISIBLE

   //ButtonForSample( "demotwolstsub.prg", oDlg )

   // Please dimensionize size of both BROWSE windows so that it is enough space to display
   // all items in oItems1 with additional reserve about 20 pixels.
   @ 34, 106  BROWSE oBrowseSource  ;
      ARRAY ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER  // NO VSCROLL

   oBrowseSource:aArray := aListSource
   oBrowseSource:AddColumn( HColumn():New( "Source", { |v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   oBrowseSource:lEditable := .F.
   oBrowseSource:lDispHead := .F. // No Header
   oBrowseSource:active := .T.

   @ 308, 106 BROWSE oBrowseTarget  ;
      ARRAY ;
      SIZE  150,96 ;
      FONT  oFont  ;
      STYLE WS_BORDER // NO VSCROLL

   oBrowseTarget:aArray := aListTarget
   oBrowseTarget:AddColumn( HColumn():New( "Target",{|v,o| (v), o:aArray[ o:nCurrent, 1 ] }, "C", 10, 0 ) )
   oBrowseTarget:lEditable := .F.
   oBrowseTarget:lDispHead := .F.
   oBrowseTarget:active := .T.

   @ 207, 102 BUTTON aControls[1] CAPTION ">" ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP+BS_FLAT ;
      ON CLICK { || ItemToBrowse( oBrowseSource, oBrowseTarget ) }

   @ 207, 147 BUTTON aControls[2] CAPTION  ">>" ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || AllToBrowse( oBrowseSource, oBrowseTarget ) }

   @ 207, 233 BUTTON aControls[3] CAPTION  "<"   ;
      SIZE     80,32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || ItemToBrowse( oBrowseTarget, oBrowseSource ) }

   @ 207, 291 BUTTON aControls[4] CAPTION  "<<"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { || AllToBrowse( oBrowseTarget, oBrowseSource ) }

   @ 36, 355 BUTTON aControls[5] CAPTION "Show"   ;
      SIZE    80,32 ;
      STYLE   WS_TABSTOP + BS_FLAT ;
      ON CLICK ;
         { || hwg_MsgInfo( hb_ValToExp( oBrowseTarget:aArray ) ) }

   @ 158, 355 BUTTON aControls[6] CAPTION   "Reset"   ;
      SIZE      80, 32 ;
      STYLE     WS_TABSTOP + BS_FLAT ;
      ON CLICK { || ResetBrowse( oBrowseSource, oBrowseTarget, aListFull ) }

   @ 367, 355 BUTTON aControls[7] CAPTION  "Help"   ;
      SIZE     80, 32 ;
      STYLE    WS_TABSTOP + BS_FLAT ;
      ON CLICK { ||
         hwg_MsgInfo( "No help" )
         RETURN Nil
         }

   @ 33, 400 SAY aControls[9] CAPTION "Select items"  ;
      SIZE 441,22 ;
      STYLE SS_CENTER

   ACTIVATE DIALOG oDlg CENTER

RETURN Nil

STATIC FUNCTION ItemToBrowse( oBrowseSource, oBrowseTarget )

   IF Empty( oBrowseSource:aArray )
      RETURN Nil
   ENDIF
   AAdd( oBrowseTarget:aArray, AClone( oBrowseSource:aArray[ oBrowseSource:nCurrent ] ) )
   hb_ADel( oBrowseSource:aArray, oBrowseSource:nCurrent, .T. )
   oBrowseSource:Refresh()
   oBrowseTarget:Refresh()
   RETURN Nil

STATIC FUNCTION AllToBrowse( oBrowseSource, oBrowseTarget )

   LOCAL aItem

   FOR EACH aItem IN oBrowseSource:aArray
      AAdd( oBrowseTarget:aArray, AClone( aItem ) )
   NEXT
   oBrowseSource:aArray := {} // reference?
   oBrowseSource:Refresh()
   oBrowseTarget:Refresh()

   RETURN Nil

STATIC FUNCTION ResetBrowse( oBrowseSource, oBrowseTarget, aListFull )

   oBrowseSource:aArray := AClone( aListFull )
   oBrowseTarget:aArray:= {} // reference?
   oBrowseSource:Refresh()
   oBrowseTarget:Refresh()
   RETURN Nil

//#include "demo.ch"

* ============== EOF of TwoLstSub.prg =================
Copiar item de um browse pro outro... tanto faz de onde pra onde
Copiar tudo de um browse pro outro... tanto faz de onde pra onde
Resetar não tem jeito, é uma só.

Aí tem uma coisa que muitos esquecem ACLONE.
Fazer um browse igual outro pode ser problema, porque array é por referência, o vínculo continua.
Pra esses casos, o AClone()

Nomes de variáveis também, pra evitar confusão.

Agora que tá resolvido, agora sim é adicionar ao demoall.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder