diff --git a/libreria/output/lib200-832/rel/DBLANG.DLL b/libreria/output/lib200-832/rel/DBLANG.DLL index 84b786d..3af2c69 100644 Binary files a/libreria/output/lib200-832/rel/DBLANG.DLL and b/libreria/output/lib200-832/rel/DBLANG.DLL differ diff --git a/libreria/output/lib200-832/rel/DBLANG.lib b/libreria/output/lib200-832/rel/DBLANG.lib index f317d3e..67f7f01 100644 Binary files a/libreria/output/lib200-832/rel/DBLANG.lib and b/libreria/output/lib200-832/rel/DBLANG.lib differ diff --git a/libreria/output/lib200-832/rel/DBLANGBR.DLL b/libreria/output/lib200-832/rel/DBLANGBR.DLL index 1bbf312..d8b7636 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGBR.DLL and b/libreria/output/lib200-832/rel/DBLANGBR.DLL differ diff --git a/libreria/output/lib200-832/rel/DBLANGBR.lib b/libreria/output/lib200-832/rel/DBLANGBR.lib index edc02a5..872f1e8 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGBR.lib and b/libreria/output/lib200-832/rel/DBLANGBR.lib differ diff --git a/libreria/output/lib200-832/rel/DBLANGEN.DLL b/libreria/output/lib200-832/rel/DBLANGEN.DLL index 21fedff..00120c6 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGEN.DLL and b/libreria/output/lib200-832/rel/DBLANGEN.DLL differ diff --git a/libreria/output/lib200-832/rel/DBLANGEN.lib b/libreria/output/lib200-832/rel/DBLANGEN.lib index 7c3a30d..8a53da1 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGEN.lib and b/libreria/output/lib200-832/rel/DBLANGEN.lib differ diff --git a/libreria/output/lib200-832/rel/DBLANGES.DLL b/libreria/output/lib200-832/rel/DBLANGES.DLL index 8e41bf7..35a81fd 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGES.DLL and b/libreria/output/lib200-832/rel/DBLANGES.DLL differ diff --git a/libreria/output/lib200-832/rel/DBLANGES.lib b/libreria/output/lib200-832/rel/DBLANGES.lib index e122e19..befad39 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGES.lib and b/libreria/output/lib200-832/rel/DBLANGES.lib differ diff --git a/libreria/output/lib200-832/rel/DBLANGIT.DLL b/libreria/output/lib200-832/rel/DBLANGIT.DLL index a24dc72..833e688 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGIT.DLL and b/libreria/output/lib200-832/rel/DBLANGIT.DLL differ diff --git a/libreria/output/lib200-832/rel/DBLANGIT.lib b/libreria/output/lib200-832/rel/DBLANGIT.lib index 351ba0a..6b29d80 100644 Binary files a/libreria/output/lib200-832/rel/DBLANGIT.lib and b/libreria/output/lib200-832/rel/DBLANGIT.lib differ diff --git a/libreria/output/lib200-832/rel/VDBSEE1O.DLL b/libreria/output/lib200-832/rel/VDBSEE1O.DLL index 5741c3a..95ecd42 100644 Binary files a/libreria/output/lib200-832/rel/VDBSEE1O.DLL and b/libreria/output/lib200-832/rel/VDBSEE1O.DLL differ diff --git a/libreria/output/lib200-832/rel/VDBSEE1O.lib b/libreria/output/lib200-832/rel/VDBSEE1O.lib index 389f267..6c22ceb 100644 Binary files a/libreria/output/lib200-832/rel/VDBSEE1O.lib and b/libreria/output/lib200-832/rel/VDBSEE1O.lib differ diff --git a/libreria/output/lib200-832/rel/VDBSEE1S.DLL b/libreria/output/lib200-832/rel/VDBSEE1S.DLL index a356a00..79ad224 100644 Binary files a/libreria/output/lib200-832/rel/VDBSEE1S.DLL and b/libreria/output/lib200-832/rel/VDBSEE1S.DLL differ diff --git a/libreria/output/lib200-832/rel/VDBSEE1S.lib b/libreria/output/lib200-832/rel/VDBSEE1S.lib index 61c02ec..8c46a9f 100644 Binary files a/libreria/output/lib200-832/rel/VDBSEE1S.lib and b/libreria/output/lib200-832/rel/VDBSEE1S.lib differ diff --git a/libreria/output/lib200-832/rel/VDBSEE1X.lib b/libreria/output/lib200-832/rel/VDBSEE1X.lib index 492b444..762c1bc 100644 Binary files a/libreria/output/lib200-832/rel/VDBSEE1X.lib and b/libreria/output/lib200-832/rel/VDBSEE1X.lib differ diff --git a/libreria/output/lib200-832/rel/omf/VDBSEE1O.lib b/libreria/output/lib200-832/rel/omf/VDBSEE1O.lib index 777cbab..d4efb7c 100644 Binary files a/libreria/output/lib200-832/rel/omf/VDBSEE1O.lib and b/libreria/output/lib200-832/rel/omf/VDBSEE1O.lib differ diff --git a/libreria/output/lib200-832/rel/omf/VDBSEE1S.lib b/libreria/output/lib200-832/rel/omf/VDBSEE1S.lib index fae699b..8c6dbc9 100644 Binary files a/libreria/output/lib200-832/rel/omf/VDBSEE1S.lib and b/libreria/output/lib200-832/rel/omf/VDBSEE1S.lib differ diff --git a/libreria/output/lib200-832/rel/uuid.lib b/libreria/output/lib200-832/rel/uuid.lib index db00138..531466a 100644 Binary files a/libreria/output/lib200-832/rel/uuid.lib and b/libreria/output/lib200-832/rel/uuid.lib differ diff --git a/libreria/src/base/DDFILE.PRG b/libreria/src/base/DDFILE.PRG index c3734e3..5b8c504 100644 --- a/libreria/src/base/DDFILE.PRG +++ b/libreria/src/base/DDFILE.PRG @@ -8,6 +8,10 @@ #include "dfstd.ch" #include "dfset.ch" +//FWH: 2021-10-29 +// se valorizzata contiene il nome della finestra da aprire quando si chiama la funzione ddwin +MEMVAR INFOTEL_DEFAULT_WIN + * ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± FUNCTION ddFilePos( cFile, lErrMsg ) * ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± @@ -224,6 +228,18 @@ RETURN cS1 * ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± FUNCTION ddIndexWin() // Finestra sull'indice * ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± + +//FWH: 2021-10-29 +// la finestra alternativa viene visualizzata solo se +// INFOTEL_DEFAULT_WIN non e' vuota +// i primi 6 caratteri del nome della finestra alternativa sono uguali a quelli +// impostati attraverso l'indice (es. ANAWIN e ANAWIN1) +IF .not. empty(INFOTEL_DEFAULT_WIN) + IF LEFT(ALLTRIM(INFOTEL_DEFAULT_WIN),6) = LEFT(ALLTRIM(dbdd->Field_Chk),6) + RETURN ALLTRIM(INFOTEL_DEFAULT_WIN) + ENDIF +ENDIF + RETURN ALLTRIM(dbdd->Field_Chk) * ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± diff --git a/libreria/src/base/DFCOL2PR.PRG b/libreria/src/base/DFCOL2PR.PRG index e005d31..3114718 100644 --- a/libreria/src/base/DFCOL2PR.PRG +++ b/libreria/src/base/DFCOL2PR.PRG @@ -8,9 +8,9 @@ Programmer : Baccan Matteo #include "dfMsg.ch" #include "common.ch" -* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±? FUNCTION dfCol2Prn( oTbr, cTitle ) -* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±? LOCAL k,oC,aTag:={},aP:={} LOCAL cH @@ -21,6 +21,13 @@ FOR k:=1 to oTbr:COLCOUNT //cH:=oC:HEADING cH:=tbGetColHeading(oC) + // FWH: 2020-06-18 ------------------------------------------------- + // cH potrebbe essere un oggetto (per esempio 'S2CellGroup') + if valtype(cH) # "C" + cH = var2char(cH) + endif + // ----------------------------------------------------------------- + //Maudp 30/05/2011 In caso di funzione eseguo la compile e poi la eval IF !EMPTY(cH) .AND. "_FX_" $ cH cH := ALLTRIM(STRTRAN(cH,"!","")) @@ -29,7 +36,7 @@ FOR k:=1 to oTbr:COLCOUNT // AADD(aP,oC:HEADING) ///////////////////////////////////////// //Mantis 2161 - //Se l'intestazione delle colonne Š vuoto allora si pu• avere un runtime error. + //Se l'intestazione delle colonne ?vuoto allora si pu?avere un runtime error. ///////////////////////////////////////// IF EMPTY(cH) cH := "Colonna_"+STRZERO(k,3,0) diff --git a/libreria/src/base/DFLIBDAT.PRG b/libreria/src/base/DFLIBDAT.PRG index 7a1a638..3a15f55 100644 --- a/libreria/src/base/DFLIBDAT.PRG +++ b/libreria/src/base/DFLIBDAT.PRG @@ -1 +1 @@ -FUNCTION dfLibDate(); RETURN ("18/10/2019") \ No newline at end of file +FUNCTION dfLibDate(); RETURN ("29/10/2021") \ No newline at end of file diff --git a/libreria/src/base/INITVAR.PRG b/libreria/src/base/INITVAR.PRG index 6119d93..249ae1b 100644 --- a/libreria/src/base/INITVAR.PRG +++ b/libreria/src/base/INITVAR.PRG @@ -4,12 +4,17 @@ //Programmatore : Baccan Matteo //***************************************************************************** -* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±? PROCEDURE dfInitVar() // Dichiara PUBLIC -* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +* ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±? MEMVAR EnvId, SubId MEMVAR A, Sa, Act MEMVAR dfHotFun +//FWH: 2021-03-17 +MEMVAR INFOTEL_LAST_MENU_PROMPT + +//FWH: 2021-10-29 +MEMVAR INFOTEL_DEFAULT_WIN // Help PUBLIC EnvId := "" @@ -22,4 +27,10 @@ PUBLIC Act := " " // azione contenente tre caratteri mnemonici PUBLIC dfHotFun := "dfCalc" // Funzione associata al tasto caldo +//FWH: 2021-03-17 +PUBLIC INFOTEL_LAST_MENU_PROMPT := "" // memorizza il nome dell'ultima voce di menu cliccata + +//FWH: 2021-10-29 +PUBLIC INFOTEL_DEFAULT_WIN := "" // se valorizzata contiene il nome della finestra da aprire quando si chiama la funzione ddwin + RETURN diff --git a/libreria/src/base/ddqry.prg b/libreria/src/base/ddqry.prg index 95e72ea..18c1ee8 100644 --- a/libreria/src/base/ddqry.prg +++ b/libreria/src/base/ddqry.prg @@ -136,10 +136,20 @@ IF !EMPTY(aStruct) cPic := REPLICATE( "X", 50 ) ENDCASE - dfGetW( MAXROW()/2, 1, ALLTRIM(aFieldDes[ATAIL(aFilter)[QRY_FIE]]) +" " +; + + // FWH: 2021-09-02 ------------------------------------------------- + // con alcune finestre (tipo quelle con il resize automatico) + // maxrow() restituisce un numero molto (ma molto) grande. Questo + // causa un malfunzionamento in dfGetW che, a cascata, impedisce + // il corretto funzionamento delle finestre di stampa. In questi + // casi bisognava terminare il programma forzatamente. + // Ho sperimentato che 12 e' un valore accettabile quindi prendo + // il minore tra 12 e MAXROW()/2 + // ----------------------------------------------------------------- + dfGetW( min(12, MAXROW()/2), 1, ALLTRIM(aFieldDes[ATAIL(aFilter)[QRY_FIE]]) +" " +; ATAIL(aFilter)[QRY_COND],; {|x|IF(x==NIL,uVar,uVar:=x)}, cPic ) - + DO CASE CASE M->Act=="esc" .OR.; // Ho premuto ESC (EMPTY(uVar) .AND. !VALTYPE(uVar)$"N") // o e' vuoto diff --git a/libreria/src/s2/S2FORM.prg b/libreria/src/s2/S2FORM.prg index 6f4dcdf..7111c44 100644 --- a/libreria/src/s2/S2FORM.prg +++ b/libreria/src/s2/S2FORM.prg @@ -95,7 +95,30 @@ MEMVAR ACT, A, SA - +// ##################################################################### +// # FWH 2021-10-08 +// ##################################################################### +// +// esiste un problema in xbase con l'istruzione SUPER +// che si manifesta quando una classe usa l'ereditarieta' multipla (come S2Form). +// In particolare le applicazioni vanno in crash quando viene chiamata +// S2Form:Destroy() +// esistono tre soluzioni temporanee al momento: +// +// 1) utilizzare xbase 2.0.1354 (problemi con univar dopo il passaggio da win7 -> win10) +// +// 2) modificare la catena di derivazione di S2Form in questo modo: CLASS S2Form FROM XbpDialogBmpMenu, S2Window, S2FormCompatibility +// +// 3) modificare xbparts.prg (2.0.1503) in questo modo: +// METHOD XbpDialog:Destroy() +// IF ::GetFrameState() == XBPDLG_FRAMESTAT_KIOSK +// KioskSystemKeyHandler():deinstall() +// ENDIF +// RETURN ::XbpBaseDialog:Destroy() +// +// Non avendo ricevuto risposta da Baccan sulle conseguenze della soluzione 2 +// procedo con la soluzione 3 che sembra la meno invasiva in attesa di un fix ufficiale +// da parte di Alaska (ha confermato via email che sono al lavoro per correggere SUPER) CLASS S2Form FROM S2Window, XbpDialogBmpMenu, S2FormCompatibility //, ServiceDialog //, AutoResize //, DbFilter PROTECTED: @@ -1780,6 +1803,14 @@ METHOD S2Form:ToolBarCreate(nSize, nMessageHeight) LOCAL oImgStd, oImgDisabled, oImgFocus LOCAL cTbrID LOCAL bExe + + // FWH 2021-03-19 + // Aggiungo una var local per contare quanti bottoni ho aggiunto + // tramite template. I bottoni tramite template hanno ID che inizializza + // col carattere '9' + LOCAL i + LOCAL infotel_buttons := array(0) + LOCAL nSeparatori := 0 // Parent della toolbar oWin := self @@ -1834,6 +1865,45 @@ METHOD S2Form:ToolBarCreate(nSize, nMessageHeight) // non era lo stesso array passato al :bToolbarHandler (questo procurava il problema 1.) // // come soluzione inizializzo sempre :aToolbar con l'array ritornato da :_ToolbarDefault() + + + // FWH 2021-03-19 + // devo contare quanti bottoni sono stati aggiunti + // tramite template (hanno id che inizia con '9') + + IF .not. ::aToolBar == NIL + + FOR i := 1 TO len(::aToolBar) + + IF len(::aToolBar[i]) == 1 + nSeparatori += 1 + LOOP + ENDIF + + IF len(::aToolBar[i]) >= 5 .and. left(::aToolBar[i][5], 1) == "9" + aadd(infotel_buttons, ::aToolBar[i]) + ENDIF + + NEXT + + ENDIF + + // FWH 2021-03-19 + // se la toolbar contiene sono bottoni inseriti tramite + // template allora ne faccio il merge con la toolbar di default + IF .not. ::aToolBar == NIL + + IF len(::aToolBar) - len(infotel_buttons) - nSeparatori == 0 + ::aToolBar := ::_ToolBarDefault() + + FOR i := 1 TO len(infotel_buttons) + aadd(::aToolBar, infotel_buttons[i]) + NEXT + + ENDIF + + ENDIF + IF ::aToolBar==NIL ::aToolBar := ::_ToolBarDefault() ENDIF diff --git a/libreria/src/s2/S2MENU.prg b/libreria/src/s2/S2MENU.prg index 279d5fa..95c4244 100644 --- a/libreria/src/s2/S2MENU.prg +++ b/libreria/src/s2/S2MENU.prg @@ -7,26 +7,32 @@ #include "dfWin.ch" #include "DFMENU.CH" +//FWH: 2021-03-17 +// aggiunto metodo S2Menu:handleEvent per memorizzare +// l'ultima voce di menu cliccata + +MEMVAR INFOTEL_LAST_MENU_PROMPT + // S2Menu: Gestione Menu // --------------------- CLASS S2Menu FROM XbpMenuBmp EXPORTED: VAR id, methods, menuArray //, itemHighLighted - METHOD popUp, create //, handleEvent + METHOD popUp, create, handleEvent ENDCLASS -// -// // Gestisce anche l'evento di evidenziazione voce di menu -// METHOD S2Menu:handleEvent(nEvent, mp1, mp2) -// DO CASE -// CASE nEvent == xbeMenu_HighLight -// IF ! EMPTY(::itemHighLighted) -// EVAL(::itemHighLighted, mp1, mp2, self) -// ENDIF -// OTHERWISE -// ::XbpMenu:handleEvent(nEvent, mp1, mp2) -// ENDCASE -// RETURN self +METHOD S2Menu:handleEvent(nEvent, mp1, mp2) + + if nEvent == xbeP_ItemSelected + // dbmsgw(::XbpMenuBmp:getTitle() + " S2Menu:handleEvent(xbeP_ItemSelected)") + // dbmsgw(mp1) + // dbmsgw(mp2) + // dbmsgw(::XbpMenuBmp:getItem(mp1)[1]) + INFOTEL_LAST_MENU_PROMPT := ::XbpMenuBmp:getItem(mp1)[1] + endif + + ::XbpMenu:handleEvent(nEvent, mp1, mp2) +RETURN self METHOD S2Menu:Create(oParent, aPP, lVisible, aMethods, aMenuArray) diff --git a/libreria/src/s2/S2PRNMNU.prg b/libreria/src/s2/S2PRNMNU.prg index 8ea20bc..f3b8ece 100644 --- a/libreria/src/s2/S2PRNMNU.prg +++ b/libreria/src/s2/S2PRNMNU.prg @@ -104,8 +104,13 @@ METHOD S2PrintMenu:init( oParent, oOwner, aPos, aSize, aPP, lVisible ) ::close := {|| ::nAction := 0 } oXbp := XbpPushButton():new( ::drawingArea, , {204,12}, {96,24}) - oXbp:caption := dfStdMsg1(MSG1_S2PRNMNU02) - oXbp:activate := {|u1,u2,o| IIF(o:isVisible(), dfFltRep( ::aBuffer ), NIL) } + oXbp:caption := dfStdMsg1(MSG1_S2PRNMNU02) + + // FWH: 2021-09-02 ------------------------------------------------- + // mostro il filtro attuale prima di iniziare la procedura per + // la creazione di un nuovo filtro + // ----------------------------------------------------------------- + oXbp:activate := {|u1,u2,o| IIF(o:isVisible(), {dbmsgerr(::aBuffer[REP_QRY_EXP], "filtro attuale", XBPSTATIC_SYSICON_ICONINFORMATION), dfFltRep( ::aBuffer )}, NIL) } oXbp:tabStop := .T. ::addShortCut(oXbp:caption, oXbp) ::addShortCut("A_f", oXbp)