********************************************************************************* * Program : APPSFP11.PRG module of APPDEMO * Aim : Maintenance des Familles S-Pdts * Date : 27/07/06 * Author(s) : Jnd - SIS Logiciel * Copyright : (c) 2006 - SiS-logiciels. Tous droits réservés/All Rights Reserved. ******************************************************************************** //Manifest Windows XP #define ISOLATION_AWARE_ENABLED 1 **Ntk Include #include "windows.ch" #include "ntkcctrl.ch" #include "ntkgdi.ch" #include "ntkmsg.ch" #include "ntkacc.ch" #include "ntkdlg.ch" #include "ntkmenus.ch" #include "ntkbtn.ch" #include "ntkedget.ch" #include "ntkcmd.ch" #include "ntkshell.ch" #include "wNtk.ch" #include "wNtkKeys.ch" #include "ntknetw.ch" #define CR CHR(13) #define CRLF CHR(13)+CHR(10) #define TAB CHR(09) #define CSEP CHR(179) // Column separator #INCLUDE "FILEIO.ch" // xHarbour #include "APPFILES.CH" #Include "AppSets.ch" FUNCTION DoSFP11(hWndP) LOCAL nGetFirst LOCAL cWinTitle := "APP-DEMO - Vérifier la Famille d'un S-PDT..." LOCAL hWndFSP, lRet LOCAL aOldBtnList := ACLONE(aBtnList) PRIVATE cCodSP := SPACE(08) PRIVATE cNomSP := SPACE(30) PRIVATE cCodFamSP := SPACE(04) PRIVATE cNomFamSP := SPACE(20) PRIVATE cNewNomSP := SPACE(30) PRIVATE cNewCodFamSP := SPACE(04) PRIVATE cNewNomFamSP := SPACE(20) PRIVATE hSFPBmp := NTK_LoadBitmap( NTK_GetInstance(), "SPDT" ) Default hWndP To NTK_SelectWindow() // ------- Disable all buttons of hWndP WndBtnEnable( hWndP, .F. ) //PRIVATE aBtnList := {} PRIVATE aGetList := {} // Disable hWndP NTK_EnableWindow( hWndP, .F. ) // Opening Main Databases SELECT 7 // Familles IF !NtkNetOpenDbf( P__FILES+DBFFAMIL, NTK_NETUSE_SHARED, 5 ) USE RETURN ENDIF SET INDEX TO ( P__FILES+NTXFAMCO ), ( P__FILES+NTXFAMFA ) SET ORDER TO 1 GOTO TOP SELECT 8 // Entêtes de Sous-Pdts IF !NtkNetOpenDbf( P__FILES+DBFSPDT, NTK_NETUSE_SHARED, 5 ) CLOSE DATABASES RETURN ENDIF SET INDEX TO (P__FILES+NTXCODSP),(P__FILES+NTXNOMSP),; (P__FILES+NTXFAMSP),(P__FILES+NTXFCOSP) && Les sous produits GOTO TOP SET ORDER TO 1 // CODSP CREATE WINDOW hWndFSP ; TITLE cWinTitle ; // Minimum declaration AT 0,0 SIZE 420,430 ; STYLE WS_SYSMENU ; INTO PARENT hWndP ; ON PAINT SetSFPPaint() ; ON EXIT SetSFPExit() @ 016,004 PUSHBUTTON "Abandon (Esc)" SIZE 02,017 ; ID ID_BTN_CANCEL ; STATE NTK_BT_ENABLE ; SUPER ACCEL KEY K_ESC ; FONT NTK_GetStockObject(SYSTEM_FONT) ; ACTION NTK_ReadEscape() ; OF hWndFSP @ 016,031 PUSHBUTTON "Procéder >> (F10)" SIZE 02,017 ; ID ID_BTN_VALID ; STATE NTK_BT_ENABLE ; SUPER ACCEL KEY NTK_GET_GVK ; FONT NTK_GetStockObject(SYSTEM_FONT) ; ACTION NTK_ReadValidate(hWndFSP) ; OF hWndFSP // Valeurs actuelle du Sous-Produit @ 2.5,004 GET cCodSP ID ID_GETEDIT1 ; SIZE 1,10 ; PICTURE "@!" ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN ; PICK PickCoSp_FSP11(hWndFSP) ; VALID TstCoSp_FSP11(hWndFSP) ; MESSAGE "Entrez le CODE du Sous-Pdt à vérifier/corriger. [F4]=Liste des S-Pdt." @ 5.5,016 GET cNomSP ID ID_GETEDIT2 ; PICTURE "@!" ; SIZE 1, 31 ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN + GS_DISABLE ; MESSAGE "Nom actuel du Sous-Pdt." @ 7.5,016 GET cCodFamSP ID ID_GETEDIT3 ; PICTURE "@!" ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN + GS_DISABLE ; MESSAGE "Code de la Famille actuellement attibué au Sous-Pdt" @ 7.5,022 GET cNomFamSP ID ID_GETEDIT4 ; PICTURE "@!" ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN + GS_DISABLE ; MESSAGE "Nom de la Famille actuellement attibué au Sous-Pdt" // Nouvelles valeurs à remplacer... @ 10.5,016 GET cNewNomSP ID ID_GETEDIT5 ; PICTURE "@!" ; SIZE 1, 31 ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN ; MESSAGE "Nouveau Nom pour le Sous-Pdt." @ 12.5,016 GET cNewCodFamSP ID ID_GETEDIT6 ; PICTURE "@!" ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN ; PICK PickFaSp_FSP11(hWndFSP) ; VALID TstFaSp_FSP11(hWndFSP) ; MESSAGE "Nouveau Code Famille à attibuer au Sous-Pdt. [F4]=Liste des Familles." @ 12.5,026 GET cNewNomFamSP ID ID_GETEDIT7 ; PICTURE "@!" ; FONT NTK_GetStockObject(ANSI_FIXED_FONT) ; TEXTCOLOR NTK_RGB(255,255,255) ; BACKCOLOR NTK_RGB(255,128,000) ; STYLE GS_3DSUNKEN + GS_DISABLE ; MESSAGE "Nouveau Nom de Famille à attibuer au Sous-Pdt" NTK_CenterWindow( hWndFSP, hWndP ) ACTIVATE WINDOW hWndFSP MODE NORMAL // You can also try NORMAL MAXIMISE or ICONIZE clause... // -- Allow or not Up/Dn/Enter Key to exit after last get lOldReadState := NTK_ReadExit( .F. ) // .F. means not allowed. So, we will loop to first get... SET GLOBAL VALIDATION KEY TO VK_F10 // -- allow user to exit Get session by pressing Esc, PgUp, PgDn or GVK... nGetFirst := 1 // Start Getting datas from zone#1 // ------------ Invoke Get Reader System and auto process window's events ** READ // This is the Minimum declaration allowed DO WHILE .T. READ INTO hWndFSP ; // Complete declaration START FROM nGetFirst ; // Handy and useful isn't it? BUTTON LIST aBtnList ; FOCUS COLOR NTK_RGB(255,170,113); // NTK_RGB(239,215,169) //NTK_RGB(255,100,000) MSG AT 019, 000,050 ; // HelpMsg coordinates in row/col or Pixel depending which mode you chose... MSG COLOR NTK_RGB(000,000,000) ; MSG FONT NTK_GetStockObject(ANSI_VAR_FONT) // this is a hFont IF NTK_LastKey()==K_ESC .OR. NTK_LastKey()==K_ALT_F4 .OR. NTK_LASTBTN()==-1 EXIT ENDIF IF EMPTY(cNewCodFamSP) NTK_MessageBox( hWndP, "Vous devez saisir un Code Famille!", "Alerte! CODE FAMILE:", MB_OK+MB_ICONEXCLAMATION ) nGetFirst := 6 // force move to Get #6 => cNewCodFamSP LOOP ENDIF IF NTK_MessageBox( hWndP,; "Confirmez-vous la maintenance du Sous-Produit ["+cCodSP+"] avec ces nouvelles valeurs ?",; "CONFIRMATION:",; MB_OKCANCEL+MB_ICONQUESTION ) == IDCANCEL LOOP ENDIF * * DoReplaceFSP11(hWndFSP) * * // -------------------------- RéIntialisation des variables cCodSP := SPACE(08) cNomSP := SPACE(30) cCodFamSP := SPACE(04) cNomFamSP := SPACE(20) cNewNomSP := SPACE(30) cNewCodFamSP := SPACE(04) cNewNomFamSP := SPACE(20) nGetFirst := 1 // Start Getting datas from zone#1 ENDDO lRet := IIF( NTK_LastKey()==K_ESC .OR. NTK_LastKey()==K_ALT_F4 .OR. NTK_LastBtn()==-1 , .F., .T. ) **Ntk_MsgBox( , "LastKey="+STR(NTK_LastKey()), "LastBtn="+STR(NTK_LastBtn()) ) // Fermeture Main Databases CLOSE DATABASES // ------------------------ Delete all Gdi obj, Editget(s), clear aGetList[] and buffers and then Destroy current window. NTK_DeleteObject( hSFPBmp ) CLEAR GETS OF hWndFSP // NTK_GetCtrl() is no longer activated while aGetList is empty... CLEAR TYPEAHEAD // Force to release KeyB+Mouse+Btns buffers: NTK_LastKey(), NTK_MouseState() & NTK_LastBtn() then return 0 CLOSE WINDOW hWndFSP aBtnList := ACLONE(aOldBtnList) // ------- ReEnable buttons of hWndP WndBtnEnable( hWndP, .T., A__LOCKED ) NTK_EnableWindow( hWndP, .T. ) NTK_SelectWindow( hWndP ) NTK_SetFocus( hWndP ) REFRESH SCREEN OF hWndP // Force parent window to clean-up & repaint. RETURN( lRet ) ****** ****** ****** FUNCTION SetSFPExit(hWnd,Msg,wParam,lParam) // IF NTK_MsgBox( hWnd,; // "Do you really want to exit ?",; // "Question?",; // M_OKCANCEL+MB_ICONQUESTION ) == IDOK // RETURN(.T.) // Allow user to Quit // ENDIF //RETURN(.F.) // Do not quit, keep on current task RETURN(.T.) // .T. = Allow user to Quit - .F. = Do not quit, keep on current task ****** ****** FUNCTION SetSFPPaint(hWnd, message, nwParam, nlParam, hDC) *SET COLOR TO N/W+ *CLEAR NTK_DrawBmp( hDC, hSFPBmp, 350, 20, SRCCOPY ) // remember coordinates template: x,y in pixel. This is not xBase like! SET COLOR TO N/T // Bright White ON Transparent @ 1.5,004 SAY "Quel S-Pdt doit-on vérifier ?" INTO CONTEXT hDC ; FONT NTK_GetStockObject( SYSTEM_FONT ) @ 04.0,002, 04.0+0.2,50.5 BOX NTK_BXS_3DSUNKEN INTO CONTEXT hDC COLOR "W+/DBK" // UP Vertical separator @ 15.0,002, 15.0+0.2,50.5 BOX NTK_BXS_3DSUNKEN INTO CONTEXT hDC COLOR "W+/DBK" // DOWN Vertical separator @ 05.0,004, 09.0,48.5 BOX NTK_BXS_LTROUNDED INTO CONTEXT hDC COLOR "N+/W+" // LT Rounded Box #1 @ 10.0,004, 14.0,48.5 BOX NTK_BXS_LTROUNDED INTO CONTEXT hDC COLOR "N+/W+" // LT Rounded Box #2 SET COLOR TO N+/W @ 04.6,005 SAY " Valeurs actuelles " INTO CONTEXT hDC ; // Title of Box #1 SIZE 0.8,11 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) SET RGB COLOR TEXT NTK_RGB(000,070,213) ; // Define your own blend on fly... // Box's Title colors BACKGND NTK_RGB(255,255,255) @ 09.6,005 SAY " Nouvelles Valeurs (à remplacer) " INTO CONTEXT hDC ; // Title of Box #2 SIZE 0.8,21 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) // -------------------------------------------------------------------- Content of Box #1 SET COLOR TO N+/T @ 05.7,005 SAY "Nom du S-Pdt :" INTO CONTEXT hDC ; SIZE 0.8,12 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) @ 07.7,005 SAY "Famille du S-Pdt :" INTO CONTEXT hDC ; SIZE 0.8,12 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) // -------------------------------------------------------------------- Content of Box #2 SET COLOR TO N/T @ 10.7,005 SAY "Nom du S-Pdt :" INTO CONTEXT hDC ; SIZE 0.8,12 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) @ 12.7,005 SAY "Famille du S-Pdt :" INTO CONTEXT hDC ; SIZE 0.8,12 STYLE DT_LEFT ; FONT NTK_GetStockObject( ANSI_VAR_FONT ) RETURN 0 // Don't forget it ! ****** ****** ****** PROCEDURE TstCoSp_FSP11(hWndP) IF EMPTY( cCodSP ) NTK_MessageBox( hWndP, "Cette zone ne peut pas être vide", "Alerte! CODE S-PDT:", MB_OK+MB_ICONEXCLAMATION ) **PickCoSp_FSP11(hWndP) RETURN .F. ENDIF SELECT 8 && Entêtes de Sous-Pdts SET ORDER TO 1 // CODSP IF EMPTY( cCodSP ) GO TOP ENDIF SEEK cCodSP IF FOUND() IF !NTK_Updated() // Si cCodSP OK, mais qu'il n'a pas changé, RETURN .T. // Pas besoin de recharger les vars... ENDIF cCodSp := 8->CODSP cNomSP := 8->NOMSP cCodFamSp := 8->CODFAMSP cNomFamSp := 8->NOMFAMSP cNewNomSP := 8->NOMSP cNewCodFamSp := SPACE(04) cNewNomFamSp := SPACE(30) REDEFINE GETS OF hWndP ELSE NTK_MessageBox( hWndP, "Le Sous-Pdt ["+cCodSp+"] n'a pas été trouvé...", "Alerte! CODE S-PDT:", MB_OK+MB_ICONEXCLAMATION ) //cCodSp := SPACE(08) cNomSP := SPACE(30) cCodFamSp := SPACE(04) cNomFamSp := SPACE(30) cNewNomSP := SPACE(30) cNewCodFamSp := SPACE(04) cNewNomFamSp := SPACE(30) REDEFINE GETS OF hWndP RETURN .F. ENDIF RETURN .T. ****** ****** ****** PROCEDURE PickCoSp_FSP11(hWndP) LOCAL nIdxPos LOCAL nRecCount := 1 LOCAL cNearItem := "" LOCAL nRet := 0 LOCAL aChoices := {} NTK_HourGlass(.T.) SELECT 8 && Entêtes de Sous-Pdts SET ORDER TO 1 // CODSP IF EMPTY( cCodSP ) GO TOP nIdxPos := 1 ELSE SET SOFTSEEK ON SEEK cCodSP SET SOFTSEEK OFF cNearItem := 8->CODSP ENDIF SELECT 8 && Entêtes de Sous-Pdts SET ORDER TO 1 // CODSP GO TOP DO WHILE !EOF() AADD( aChoices, 8->CODSP +CSEP+ 8->NOMSP +CSEP+ 8->CODFAMSP + 8->NOMFAMSP ) IF cNearItem=8->CODSP nIdxPos := nRecCount ENDIF nRecCount++ SELECT 8 && Entêtes de Sous-Pdts SKIP ENDDO NTK_HourGlass(.F.) **SET COLOR TO W+/T // Define Fg/Bg colors for NTK_aChoice() SET COLOR TO W/GR // Define Fg/Bg colors for NTK_aChoice() // Syntaxe: NTKaChoice(nTop, nLeft, nBottom, nRight, aLBchoices, cDlgTitle, cUserFunc, nIndex, aBtnText, nStyle, hWndParent ) nRet := NTKaChoice(00, 00, 22, 68, aChoices, "Liste des Sous-Produits", nil, nIdxPos, {"&Abandon (Ech)", "&Ok (Entrée)"}, nil, hWndP ) **NTK_MsgBox( hWndP, IIF( nRet>0, aChoices[nRet], "Nothing..."), "You choose:" ) IF nRet > 0 cCodSp := LEFT( aChoices[nRet], 8 ) cNomSp := SUBSTR( aChoices[nRet], AT(CSEP, aChoices[nRet])+1 , 30 ) cCodFamSp := SUBSTR( aChoices[nRet], RAT(CSEP, aChoices[nRet])+1 , 04 ) cNomFamSp := SUBSTR( aChoices[nRet], RAT(CSEP, aChoices[nRet])+1+04, 20 ) cNewNomSp := cNomSp cNewCodFamSp := SPACE(04) cNewNomFamSp := SPACE(20) ** REDEFINE GET ID ID_GETEDIT1 REDEFINE GETS OF hWndP ENDIF SELECT 8 && Entêtes de Sous-Pdts GO TOP RETURN .T. ****** ****** ****** PROCEDURE PickFaSp_FSP11(hWndP) LOCAL nRet := 0 LOCAL aChoices := {} SELECT 7 && Familles GO TOP DO WHILE !EOF() AADD( aChoices, 7->CODE +CSEP+ 7->FAMILLE ) SELECT 7 && Familles SKIP ENDDO **SET COLOR TO W+/T // Define Fg/Bg colors for NTK_aChoice() SET COLOR TO W/GR // Define Fg/Bg colors for NTK_aChoice() // Syntaxe: NTKaChoice(nTop, nLeft, nBottom, nRight, aLBchoices, cDlgTitle, cUserFunc, nIndex, aBtnText, nStyle, hWndParent ) nRet := NTKaChoice( 02, 03, 12.5, 33, aChoices, "Liste des Familles", nil, 1, {"&Abandon (Ech)", "&Ok (Entrée)"}, nil, hWndP ) **NTK_MsgBox( hWndP, IIF( nRet>0, aChoices[nRet], "Nothing..."), "You choose:" ) IF nRet > 0 cNewCodFamSp := LEFT( aChoices[nRet], 4 ) cNewNomFamSp := SUBSTR( aChoices[nRet], AT(CSEP, aChoices[nRet])+1, 20 ) ** REDEFINE GET ID ID_GETEDIT1 REDEFINE GETS OF hWndP ENDIF SELECT 7 && Familles GO TOP RETURN .T. ****** ****** ****** PROCEDURE TstFaSp_FSP11(hWndP) IF EMPTY( cNewCodFamSP ) NTK_MessageBox( hWndP, "Cette zone ne peut pas être vide", "Alerte! CODE FAMILE:", MB_OK+MB_ICONEXCLAMATION ) **PickFaSp_FSP11(hWndP) cNewNomFamSp := SPACE(30) REDEFINE GETS OF hWndP RETURN .F. ENDIF SELECT 7 && Familles SET ORDER TO 1 // CODE IF EMPTY( cNewCodFamSP ) GO TOP ENDIF SEEK cNewCodFamSP IF FOUND() IF !NTK_Updated() // Si cCodSP OK, mais qu'il n'a pas changé, RETURN .T. // Pas besoin de recharger les vars... ENDIF cNewCodFamSp := 7->CODE cNewNomFamSp := 7->FAMILLE REDEFINE GETS OF hWndP ELSE NTK_MessageBox( hWndP, "La Famille ["+cNewCodFamSp+"] n'a pas été trouvée...", "Alerte! CODE FAMILLE:", MB_OK+MB_ICONEXCLAMATION ) cNewCodFamSp := SPACE(04) cNewNomFamSp := SPACE(30) REDEFINE GETS OF hWndP RETURN .F. ENDIF RETURN .T. ****** ****** ****** PROCEDURE DoReplaceFSP11(hWndP) LOCAL hRpt // Handle sur le ficher rapport (.Txt) LOCAL cRapport := P__SYS + "SEAM_FAMSP_" + DTOS(DATE()) + "-" + STRTRAN(TIME(),":","") + ".Txt" ** Ntk_MsgBox( , "Pendant: LastKey="+STR(NTK_LastKey()), "Pendant: LastBtn="+STR(NTK_LastBtn()) ) //NTK_HourGlass(1) IF FILE(cRapport) ERASE (cRapport) ENDIF hRpt := FCREATE( cRapport, FC_NORMAL ) IF hRpt < 0 FCLOSE( hRpt ) NTK_MsgBox( hWndP,; "Erreur de creation du fichier rapport :"+CR+cRapport,; "Erreur!", MB_OK+MB_ICONHAND ) RETURN ENDIF FWRITE( hRpt , "Rapport : "+cRapport+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "APP-DEMO: MAINTENANCE - VERIFICATION ET MAINTENANCE DE LA FAMILLE D'UN SOUS-PDT."+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "POSTE : "+NETNAME()+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "CODE S-PDT A VERIFIER : "+CRLF ) FWRITE( hRpt , " - "+ cCodSP +CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "VALEURS ACTUELLES : "+CRLF ) FWRITE( hRpt , " - Nom Sous-PDT: "+ cNomSP +CRLF ) FWRITE( hRpt , " - Code Famille: "+ cCodFamSP +CRLF ) FWRITE( hRpt , " - Lib. Famille: "+ cNomFamSP +CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "A REMPLACER PAR : "+CRLF ) FWRITE( hRpt , " - Nom Sous-PDT: "+ cNewNomSP +CRLF ) FWRITE( hRpt , " - Code Famille: "+ cNewCodFamSP +CRLF ) FWRITE( hRpt , " - Lib. Famille: "+ cNewNomFamSP +CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "Démarrage des opérations de vérification et de maintenance à "+DTOC(DATE())+"-"+TIME()+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , REPLICATE("-",80)+CRLF ) // -------------------- ENTETES ET LIGNES DE SOUS-PDTS DoLongProcess_FDP11(hWndP, hRpt) FWRITE( hRpt , REPLICATE("-",80)+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , ""+CRLF ) FWRITE( hRpt , "Fin des opérations de vérification et de maintenance à "+DTOC(DATE())+"-"+TIME()+CRLF ) FWRITE( hRpt , ""+CRLF ) FCLOSE( hRpt ) //NTK_HourGlass(0) NTK_ShowWindow( hWndMain, SW_MINIMIZE ) // ----------------- Afficher (certainement avec NOTPAD) le rapport pour visualisation... RUN (cRapport) AND WAIT NTK_ShowWindow( hWndMain, SW_RESTORE ) RETURN .T. ****** ****** ****** PROCEDURE DoLongProcess_FDP11(hWndP, hRpt) LOCAL hTimer, Wmsg, aWbx Wmsg := {} AADD( Wmsg, { " PLEASE WAIT, " } ) AADD( Wmsg, { " " } ) AADD( Wmsg, { " This is a very long processus " } ) AADD( Wmsg, { " " } ) AADD( Wmsg, { " MAINTENANCE EN COURS... " } ) NTK_SelectWindow(hWndP) NTK_SetFocus(hWndP) SET DEFAULT FONT TO hDosFont aWbx := NtkWaitBox( 05, 08 , Wmsg ) //, C_WE,C_W) // NTK_SetTimerEx( hWnd, nTimerID, nMilliSecs, bUserDefAction ) // 0 Millisecs means a constant wake-up! hTimer := NTK_SetTimerEx( aWbx[1], 1, 0, {|| NtkWaitBoxRepaint(aWbx) } ) FWRITE( hRpt , CRLF ) FWRITE( hRpt , TAB+" ."+DTOC(DATE())+"-"+TIME()+" - DEBUT Maintenance: Entêtes Sous-Pdt."+CRLF ) FWRITE( hRpt , TAB+" [OK!]"+CRLF ) FWRITE( hRpt , TAB+" ."+DTOC(DATE())+"-"+TIME()+" - FIN Maintenance: Entêtes Sous-Pdt."+CRLF ) FWRITE( hRpt , CRLF ) FWRITE( hRpt , TAB+" ."+DTOC(DATE())+"-"+TIME()+" - DEBUT Maintenance: Lignes Sous-Pdt."+CRLF ) FWRITE( hRpt , TAB+" [OK!]"+CRLF ) FWRITE( hRpt , TAB+" ."+DTOC(DATE())+"-"+TIME()+" - FIN Maintenance: Lignes Sous-Pdt."+CRLF ) // -------------------- Simulation of a long treatement... FOR nI := 1 TO 1000 // In case of Time consuming processus to execute... Keep in mind you need to (must) tell Windows you're alive // So, no wait, but continue to process Windows background events during our own traitment ... NtkInkey() // Does same as Clipper Inkey() function, but better designed for Windows GUI and multi-events environement. *** -- The following lines are exactly Win32 equivalent to one call to Ntkinkey() in NTKRad.Win32 API ***NTK_GetMessage(NTK_aMsg) ***NTK_TranslateMessage(NTK_aMsg) ***NTK_DispatchMessage(NTK_aMsg) NEXT NtkWaitBox( aWbx, "OFF" ) NTK_KillTimer( aWbx[1], hTimer ) // Don't forget it ! RETURN(Nil) ****** ****** ******