Page 1 of 1

Refresh Say su Folder

Posted: Tue May 24, 2016 8:46 pm
by vicorx
Salve a tutti,
con FiveWin e Harbour ho un problema su refresh di una say su un Folder. Cambiando il valore della variabile la say viene aggiornata senza eliminare il valore precedente e pertanto si vedono i valori sovrapposti; su una Dialog invece viene eliminato il valore precedente ed il nuovo valore si legge correttamente.
Per spiegarmi meglio allego il codice modificato di Bigfold.prg e Bigfold.rc contenuti nella cartella Samples. Cliccando sul pulsante "?" presente nel folder One vengono incrementati le variabili delle say sulla Dialog e sul Folder e viene eseguito il refresh() delle due say; sulla Dialog la say si vede correttamente mentre sul Folder si sovrappongono i valori.

Bigfolder.prg

Code: Select all

// testing a many pages folder

#include "FiveWin.ch"

static oWnd, NumDlg, NumFld, oSayFld, oSayDlg

function Main()

   BWCCRegister(GetResources())
   SET _3DLOOK ON
   DEFINE WINDOW oWnd TITLE "A many pages folder" ;
      MENU BuildMenu()

   ACTIVATE WINDOW oWnd MAXIMIZED

return nil

DLL32 FUNCTION BWCCRegister( hInst AS LONG) AS WORD PASCAL LIB "BWCC32.DLL"

function BuildMenu()
   local oMenu

   MENU oMenu
      MENUITEM "Try it!" ACTION BigFolder()
      MENUITEM "Info" ACTION MsgAbout()
      MENUITEM "Exit" ACTION oWnd:End()
   ENDMENU

return oMenu

function BigFolder()

   local oDlg, oFld, oLbx
   local cOne := "Hello"
   local oFont
   NumDlg = 1
   NumFld = 1

   USE Customer

   DEFINE FONT oFont NAME "Arial" SIZE 0, -10

   DEFINE DIALOG oDlg RESOURCE "Test"
    REDEFINE SAY  oSayDlg  PROMPT  NumDlg ;
                ID 2101 OF oDlg

   REDEFINE FOLDER oFld ID 110 OF oDlg ;
      PROMPTS "One", "Two",   "Three";
      DIALOGS "One", "Three", "Three"

   REDEFINE LISTBOX oLbx FIELDS ;
      ID 110 OF oFld:aDialogs[ 1 ] ;
      FONT oFont

    REDEFINE SAY  oSayFld  PROMPT  NumFld ;
                ID 2201 OF oFld:aDialogs[1]
                
   REDEFINE BTNBMP ID 120 OF oFld:aDialogs[ 1 ] ;
      RESOURCE "Info" ACTION ChangeSay( )

   REDEFINE LISTBOX oLbx FIELDS ;
      ID 110 OF oFld:aDialogs[ 2 ]

   REDEFINE LISTBOX oLbx FIELDS ;
      ID 110 OF oFld:aDialogs[ 3 ]
   
   ACTIVATE DIALOG oDlg CENTERED
   USE

return nil


Function ChangeSay()
    NumDlg = NumDlg + 1
    NumFld = NumFld + 1
    oSayDlg:Refresh()
    oSayFld:Refresh()
    
    return Nil
 


Bigfolder.rc

Code: Select all

#define IDC_PUSHBUTTON2 111
#define IDC_CHECKBOX1   111
#define IDC_PUSHBUTTON1 112
#define BITMAP_1    1
#include "..\include\WinApi.ch"

test DIALOG 9, 30, 298, 194
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "DIALOG_1"
FONT 8, "MS Sans Serif"
{
 DEFPUSHBUTTON "OK", IDOK, 67, 173, 50, 14
 PUSHBUTTON "Cancel", IDCANCEL, 124, 173, 50, 14
 PUSHBUTTON "Help", 998, 180, 173, 50, 14
 CONTROL "", 110, FOLDER32, 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 7, 289, 162
 LTEXT "                ", 2101, 275, 3, 38, 10, WS_CHILD | WS_VISIBLE | WS_GROUP
}


one DIALOG 6, 15, 277, 157
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
 CONTROL "", 110, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 10, 268, 104
 CONTROL "", 120, "TBtnBmp", 0 | WS_CHILD | WS_VISIBLE, 121, 122, 20, 20
 CONTROL "", -1, "BorShade", BSS_HDIP | BSS_LEFT | WS_CHILD | WS_VISIBLE, 89, 117, 100, 2
 CONTROL "Button-1", IDC_PUSHBUTTON2, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 120, 37, 25
 LTEXT "                ", 2201, 270, 130, 38, 10, WS_CHILD | WS_VISIBLE | WS_GROUP
}

two DIALOG 6, 15, 277, 189
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
 CONTROL "", 110, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 10, 268, 104
 CONTROL "Button", 1, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 121, 37, 25
 CONTROL "Check", IDC_CHECKBOX1, "BorCheck", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 189, 127, 34, 10
 CONTROL "Button-2", IDC_PUSHBUTTON1, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 28, 147, 37, 25

}

three DIALOG 6, 15, 277, 151
STYLE WS_CHILD
FONT 8, "MS Sans Serif"
{
 CONTROL "", 110, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 5, 9, 268, 104
 CONTROL "Button-3", 1, "BorBtn", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 118, 121, 37, 25
}

info BITMAP "../bitmaps/info.bmp"
 
Avete qualche suggerimento ?

Grazie in anticipo a tutti.

Re: Refresh Say su Folder

Posted: Wed May 25, 2016 9:46 am
by Enrico Maria Giordano
Vedi se riesci a scrivere un esempio minimale del problema che non usi né BWCC32.DLL né file di risorse. Il tuo esempio così com'è non posso provarlo.

EMG

Re: Refresh Say su Folder

Posted: Wed May 25, 2016 1:43 pm
by vicorx
Ecco un esempio ridotto:

BIGFOLD.PRG

Code: Select all

    // testing a many pages folder
    #include "FiveWin.ch"

    static oWnd, NumDlg, NumFld, oSayFld, oSayDlg

    function BigFolder()

       local oDlg, oFld, oLbx
       local cOne := "Hello"
       NumDlg := 1
       NumFld := 1

       DEFINE DIALOG oDlg RESOURCE "Test"
        REDEFINE SAY  oSayDlg  PROMPT  NumDlg ;
                    ID 2101 OF oDlg

       REDEFINE FOLDER oFld ID 110 OF oDlg ;
          PROMPTS "One", "Two" ;
          DIALOGS "One", "Three"

        REDEFINE SAY  oSayFld  PROMPT  NumFld ;
                    ID 2201 OF oFld:aDialogs[1]

       REDEFINE BUTTON ID 120 OF oFld:aDialogs[ 1 ] ;
          ACTION ChangeSay( )

       REDEFINE LISTBOX oLbx FIELDS ;
          ID 110 OF oFld:aDialogs[ 2 ]

       ACTIVATE DIALOG oDlg CENTERED
    return nil


    Function ChangeSay()
        NumDlg++
        NumFld++
        oSayDlg:Refresh()
        oSayFld:Refresh()
        return Nil
 
BIGFOLD.RC

Code: Select all

    #define IDC_PUSHBUTTON2 111
    #define IDC_CHECKBOX1   111
    #define IDC_PUSHBUTTON1 112

    test DIALOG 9, 30, 298, 194
    STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    CAPTION "DIALOG_1"
    FONT 8, "MS Sans Serif"
    {
     DEFPUSHBUTTON "OK", IDOK, 67, 173, 50, 14
     PUSHBUTTON "Cancel", IDCANCEL, 124, 173, 50, 14
     PUSHBUTTON "Help", 998, 180, 173, 50, 14
     CONTROL "", 110, "SysTabControl32", 0 | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 7, 289, 162
     LTEXT "                ", 2101, 275, 3, 38, 10, WS_CHILD | WS_VISIBLE | WS_GROUP
    }


    one DIALOG 6, 15, 277, 157
    STYLE WS_CHILD
    FONT 8, "MS Sans Serif"
    {
     CONTROL "", 110, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 10, 10, 268, 104
     PUSHBUTTON "Premi", 120, 81, 122, 100, 20
     LTEXT "                ", 2201, 270, 130, 38, 10, WS_CHILD | WS_VISIBLE | WS_GROUP
    }

    three DIALOG 6, 15, 277, 151
    STYLE WS_CHILD
    FONT 8, "MS Sans Serif"
    {
     CONTROL "", 110, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 5, 9, 268, 104
    }
 
Il file delle risorse viene compilato in automatico da BUIILDH.BAT presente nella cartella SAMPLES.
Senza file delle risorse (.RC) non riesco a generare un esempio corretto. Ad esempio, il programma TESTFLD3.PRG presente nella cartella SAMPLES compilato con FW+CLIPPER funziona correttamente mentre con FWH+Harbour non visualizza correttamente i Folder.
TESTFLD3.PRG

Code: Select all

#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
   local oDlg, oFld

   DEFINE DIALOG oDlg TITLE "FiveWin Dynamic folders" ;
      FROM 5, 5 TO 20, 50

   @ 1, 1 FOLDER oFld PROMPT "&xBase", "&And OOP", "&Power" ;
      OF oDlg SIZE 150, 100

   @ 1, 1 BUTTON "&Hello" OF oFld:aDialogs[ 1 ] ;
      ACTION MsgInfo( "Hello world!" )

   ACTIVATE DIALOG oDlg CENTERED
return nil
//----------------------------------------------------------------------------//
 
Vicorx

Re: Refresh Say su Folder

Posted: Wed May 25, 2016 1:50 pm
by Enrico Maria Giordano
Niente, non me lo compila nemmeno. Secondo me c'è qualcosa che non va nel file RC.

EMG

Re: Refresh Say su Folder

Posted: Wed May 25, 2016 5:50 pm
by vicorx
Mi sembra strano che dia errore, ci sono solo controlli standard.
Comunque ecco quello che ottengo:

Image

Come si può vedere alla destra del tasto "Premi" (sul Folder) ci sono i caratteri 1, 2 e 3 sovrapposti mentre in alto (sulla Dialog) c'è solo il numero 3 che è l'ultimo valore assegnato.

A seguire quello che viene visualizzato con TESTFLD3.PRG.
Questa è la versione compilata con Clipper + FiveWin:
Image

Questa è la versione compilata con Harbour + FiveWin:
Image

vicorx

Re: Refresh Say su Folder

Posted: Wed May 25, 2016 5:54 pm
by Enrico Maria Giordano
Se non posso compilarlo ed eseguirlo non riesco ad aiutarti. Cerca di ridurlo ai minimi termini senza usare file di risorse.

EMG