********************************************************************************* * Program : MAIN.PRG * Launch APPDEMO.EXE * Aim : Programming a demo application composed of several PRGs. * Make......: Juste type MAKE * Date : 26/07/06 * Author(s) : JND - SIS-Logiciels * Copyright : (c) 2006 - Jn Dechereux. 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 "wNtk.ch" #include "wNtkKeys.ch" **#include "ntknetw.ch" **#include "APPFILES.CH" #Include "AppSets.Ch" #define TAB CHR(9) #define CR CHR(13) #define CRLF CHR(13)+CHR(10) #define CR CHR(13) #define HORZRES 8 /* Horizontal width in pixels */ #define VERTRES 10 /* Vertical height in pixels */ FUNCTION MAIN() LOCAL hGetBkClrBrush LOCAL hInst := NTK_GetInstance() //LOCAL hIcon := NTK_LoadIcon( Nil , IDI_HAND ) // IDI_APPLICATION) //LOCAL hIcon := NTK_LoadIcon( hInst , "rICO01" ) // IDI_APPLICATION) LOCAL hCurs := NTK_LoadCursor( Nil , IDC_ARROW) LOCAL hBrush := NTK_GetStockObject(WHITE_BRUSH) // LTGRAY_BRUSH, WHITE_BRUSH... LOCAL cWinTitle := "APP-DEMO - Utilitaire de maintenance inter-modules." LOCAL cxSize:= 450 LOCAL cySize:= 340 LOCAL aArray PRIVATE aBtnList := {} // Must be here! Never forget it... PRIVATE aGetList := {} // Must be here! Never forget it... PRIVATE hIcon := NTK_LoadIcon( hInst , "rICO01" ) // IDI_APPLICATION) PRIVATE hMainBmpUp := NTK_LoadBitmap( NTK_GetInstance(), "LOCKED" ) PRIVATE hMainBmpDn := NTK_LoadBitmap( NTK_GetInstance(), "UNLOCKED" ) PRIVATE hHyperLinkFont PRIVATE hWndMain PRIVATE hDosFont, hObjFont3, hObjFont4 PRIVATE P__SYS := NTK_GetCurrentDirectory()+"\" // App's system directory location. PRIVATE P__FILES := P__SYS+"FILES\" PRIVATE A__LOCKED := .T. // Main app is locked (.T.) util user enters the good password... PRIVATE A__CODE := "" // General application PassWord setting (10C max.). Default is none. PRIVATE A__SIMUL := .T. // Mode de Simulation pour les modules qui le requiŠrent. // ----- Ensure that the common control dynamic-link library (DLL) is loaded. // ----- Don't forget to use this command if U plan to use controls such as DatePicker, tooltips... NTK_InitCommonControlsEx( ICC_DATE_CLASSES + ICC_BAR_CLASSES + ICC_STANDARD_CLASSES + ICC_WIN95_CLASSES ); *$ Attention Sylvain: hWndMain vaut Nil à cet endroit ! *$ Rien ne plante - uniquement parceque tu ne t'en sert pas dans CenterWindow. aArray:=CenterWindow(hWndMain,cxSize,cySize) // -------------------------------------------- MAIN WINDOW CREATION. NEED TO BE HERE! CREATE WINDOW hWndMain ; STYLE F_MIN+WS_SYSMENU; EXSTYLE WS_EX_TOPMOST ; // 'Always on Top' style if you want to use all Clipper like commands TITLE cWinTitle ; // Minimum declaration AT aArray[1],aArray[2] SIZE cxSize,cySize ; CURSOR hCurs ; ICON hIcon ; BRUSH hBrush ; ON PAINT MainDoRePaint() ; ON EXIT MainDoExit() // STYLE F_NOCANCEL ; // ------------------------- ALL THE FOLLOWING STUFF NEED TO BE AFTER CREATE WINDOW... SET DATE FRENCH SET CENTURY ON // ------------------------------------------------------------ BRUSH OBJECT CREATIONS CREATE SOLID BRUSH NTK_RGB( 255,128,000) TO hGetBkClrBrush SET DEFAULT BACKGROUND GETS COLOR BRUSH TO hGetBkClrBrush // Define default Gets bkg color brush // ------------------------------------------------------------ FONT OBJECT CREATIONS NTK_AddFontResource( "NTK08X16.FON" ) // NTK's OEM Fixed Font. Thx to Marco Selli & JNE for their great contribution... CREATE FONT hDosFont FACENAME "NTK08X16" SIZE 16 WIDTH 8 // Dos-like font (oem-437) CREATE FONT hObjFONT3 FACENAME "GEORGIA" SIZE 48 WIDTH 18 WEIGHT 700 CREATE FONT hObjFONT4 FACENAME "GEORGIA" SIZE 18 WIDTH 08 WEIGHT 700 CREATE FONT hHyperLinkFont FACENAME "MS SAN SERIF" SIZE -12 WIDTH 6 WEIGHT 700 UNDERLINE // ------------------------------------------------------------ SCREEN SETTINGS SET PIXEL MODE OFF // Default is always ON. BUT NOW, WE SWITCH TO ROW/COL MODE! SET COL RATIO TO 8 SET ROW RATIO TO 20 **SET DEFAULT FONT TO NTK_GetStockObject(ANSI_FIXED_FONT) // Define current Font for SAY/GET SET DEFAULT SAY FONT TO hDosFont // Ntk supplied Fixed Font // ------------------------------------------------------------ BUTTON DECLARATIONS @ 006,001 HYPERLINK "&Quitter la maintenance" SIZE 1.5,023 ; ID ID_BTN1 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Q ; STATE NTK_BT_ENABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_EXITUP" ; BITMAP DN "16_EXITDN" ; BITMAP GRAYED "16_EXITOFF" ; BITMAP OVER "16_EXITOVR" ; ACTION NTK_SendCloseEvent(hWndMain) ; // Tell NTK RAD system to call the ON EXIT proc. MESSAGE "Fermer cette application.." @ 7.5,001 HYPERLINK "&Identifiez-vous..." SIZE 1.5,023 ; ID ID_BTN2 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_I ; STATE NTK_BT_ENABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_PWUP" ; BITMAP DN "16_PWDN" ; BITMAP GRAYED "16_PWOFF" ; BITMAP OVER "16_PWOVR" ; ACTION DoSetPWD11(hWndMain) ; MESSAGE "Donner votre CODE d'accès afin que le système"+CR+; "vous identifie et vous autorise l'utilisation..." @ 009,001 HYPERLINK "Connexion avec le &Serveur" SIZE 1.5,023 ; ID ID_BTN3 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_S ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_SRVUP" ; BITMAP DN "16_SRVDN" ; BITMAP GRAYED "16_SRVOFF" ; BITMAP OVER "16_SRVOVR" ; ACTION DoSetCFG11(hWndMain) ; MESSAGE "Définir le chemin réseau de connexion"+CR+; "avec le serveur de fichiers de APP-DEMO." @ 10.5,001 HYPERLINK "Configurer ce &Module" SIZE 1.5,023 ; ID ID_BTN4 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_M ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_CFGUP" ; BITMAP DN "16_CFGDN" ; BITMAP GRAYED "16_CFGOFF" ; BITMAP OVER "16_CFGOVR" ; ACTION NTK_MsgBox(hWndMain, "Module non encore disponible", "NON DISPO!", MB_OK+MB_ICONEXCLAMATION ) ; MESSAGE "Configuration des règlages de l'application de"+CR+; "maintenance de APP-DEMO." @ 012,001 HYPERLINK "&Vérifier la famille d'un S-Pdt" SIZE 1.5,024 ; ID ID_BTN5 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_V ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" ; ACTION DoSFP11(hWndMain) ; MESSAGE "Vérifier et corriger si besoin est, le"+CR+; "Nom et la Famille d'un sous produit à travers"+CR+; "toute la B.D.D de APP-DEMO." // ----------------------- Second column of HYPERLINK Buttons... -------------------------------------------- @ 006,030 HYPERLINK "Option non disponible..." SIZE 1.5,024 ; ID ID_BTN6 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Z ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" @ 7.5,030 HYPERLINK "Option non disponible..." SIZE 1.5,024 ; ID ID_BTN7 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Z ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" @ 009,030 HYPERLINK "Option non disponible..." SIZE 1.5,024 ; ID ID_BTN8 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Z ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" @ 10.5,030 HYPERLINK "Option non disponible..." SIZE 1.5,024 ; ID ID_BTN9 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Z ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" @ 012,030 HYPERLINK "Option non disponible..." SIZE 1.5,024 ; ID ID_BTN10 ; OF hWndMain ; SUPER ACCEL KEY K_ALT_Z ; STATE NTK_BT_DISABLE ; FONT hHyperLinkFont ; TEXTCOLOR NTK_RGB(000,000,255) ; BACKGROUND BRUSH NTK_GetStockObject(WHITE_BRUSH) ; // Take care of using the SAME BKG as the parent window, otherwise no hyperlink aspect! BITMAP UP "16_GEARUP" ; BITMAP DN "16_GEARDN" ; BITMAP GRAYED "16_GEAROFF" ; BITMAP OVER "16_GEAROVR" // ------------------------------------------------------------ SHOW MAIN WINDOW ACTIVATE WINDOW hWndMain MODE NORMAL // You can also try MAXIMISE or ICONIZE clause... IF FILE( "CONFIG.RAM" ) RESTORE FROM (P__SYS+"CONFIG.RAM") ADDITIVE ELSE NTK_MsgBox( hWndMain,; "Le fichier CONFIG.RAM n'a pas ‚t‚ d‚tect‚ dans le r‚pertoire du programme MAINTENANCE"+CR+; "En cons‚quence les paramŠtres par d‚faut seront appliqu‚s. Veuillez v‚rifier !!",; "Alerte!",; MB_OK+MB_ICONEXCLAMATION ) **SAVE ALL LIKE P__* TO (P__SYS+"CONFIG.RAM") ENDIF // ---------------------------------------------------- START PROCESSING MAIN WINDOW EVENTS AUTO CHECK EVENTS OF WINDOW hWndMain USING BUTTON LIST aBtnList **NTK_AutoCheckEvent(aBtnList, hWnd, hAccel, UsrEvtProc ) -> Nil ***NTK_AutoCheckEvent(aBtnList, hWndMain) // just processing for events // Release Resources before main application closing... NTK_DeleteObject( hMainBmpUp ) NTK_DeleteObject( hMainBmpDn ) DELETE FONT hHyperLinkFont DELETE FONT hDosFont DELETE FONT hObjFONT3 DELETE FONT hObjFONT4 DELETE BRUSH hGetBkClrBrush CLOSE DATABASES CLOSE WINDOW hWndMain RETURN ****** ****** ****** FUNCTION CenterWindow(hWndMain,cxSize,cySize) ** Courtesy of Sylvain Pasquet. **__Center a window into the current screen, receive height and width of child, return the approximate center position__** ** LOCAL CXSCREEN := NTK_GetDeviceCaps( NTK_GetDC(), HORZRES ) LOCAL CYSCREEN := NTK_GetDeviceCaps( NTK_GetDC(), VERTRES ) LOCAL cx,cy **Respect du ratio ecran 4/3, le calcul a l'air juste... **cx := (NTK_CXSCREEN-cxSize)/2 **Le calcul du positionnement (y) à l'air moyen, mais acceptable. cx := (CXSCREEN-cxSize)/2 cy := (CYSCREEN-cySize)/2 RETURN({cx,cy}) *** *** *** FUNCTION MainDOREPAINT(hWnd, message, nwParam, nlParam, hDC) NTK_DrawIcon( hDC, 1, 1, hIcon) **NTK_DrawBmp( hDC, hMyBmpMain2, -32, 70, SRCCOPY ) **@ 100,10 SAY "hWndemo="+STR(hWndMain)+" / hWnd="+STR(hWnd)+" => hDC="+STR(hDC); ** INTO CONTEXT hDC ; ** TEXTCOLOR NTK_RGB(255,255,255); ** BACKCOLOR NTK_RGB(255,000,000) @ 000,014 SAY "Maintenance"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(0,0,0) ; BACKCOLOR NTK_RGB(255,255,255); FONT hObjFONT3 @ 2.5,28 SAY "APP-DEMO v.4.12"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(0,0,0) ; BACKCOLOR TRANSPARENT; FONT NTK_GetStockObject( SYSTEM_FONT ) @ 005,17 SAY "Choisissez une option:"; INTO CONTEXT hDC ; TEXTCOLOR NTK_RGB(0,0,0) ; BACKCOLOR TRANSPARENT; FONT hObjFONT4 IF A__LOCKED NTK_DrawBmp( hDC, hMainBmpUp, 380, 10, SRCCOPY ) // remember coordinates template: x,y in pixel. This is not xBase like! ELSE NTK_DrawBmp( hDC, hMainBmpDn, 380, 10, SRCCOPY ) // remember coordinates template: x,y in pixel. This is not xBase like! ENDIF **SET COLOR TO W+/R+ **@ 014,02 SAY "Bonjour toto ceci est un test!" INTO CONTEXT hDC RETURN 0 ****** ****** ****** FUNCTION MainDoExit(hWnd,Msg,wParam,lParam) IF NTK_MessageBox( hWnd,; "Souhaitez-vous réellement Quitter ?",; "Question: ",; MB_OKCANCEL+MB_ICONQUESTION ) == IDOK //NTK_PostQuitMessage(0) // tell OS to terminate the application. Do not forget! //RETURN(.T.) // Quit RETURN( NTK_SendQuitEvent() ) // Same as both previous lines: Terminate current app. ENDIF RETURN(.F.) // Do not quit, keep on current task ****** ****** ****** FUNCTION WndBtnEnable( hWnd, lState, lLocked ) LOCAL nIDBtn Default lLocked To .F. IF lState // ---------------------------------- Tous Enable selon conditions de nature du btn NTK_EnableBtnID( ID_BTN1, .T. ) // option: 'Quitter la maintenance...' NTK_EnableBtnID( ID_BTN2, IIF(lLocked, .T., .F.) ) // option: 'Identifiez-vous...' FOR nIDBtn := ID_BTN3 TO ID_BTN5 // ID_BTN10 NTK_EnableBtnID( nIDBtn, IIF( lLocked, .F., lState) ) NEXT ELSE // ---------------------------------- Tous Disable pour signifier visuellement l'inaccessibilité FOR nIDBtn := ID_BTN1 TO ID_BTN5 // ID_BTN10 NTK_EnableBtnID( nIDBtn, lState ) NEXT ENDIF RETURN ****** ****** ******