/***************************************************************/ /* */ /* helpViewerW.pkg */ /* */ /* module HelpViewer */ /* interface graphique cliente */ /* */ /* Loïc Berthelot juillet 2000 */ /* Chanduroi modification 03/2004 */ /***************************************************************/ /* general parameters */ struct GParams = [ width_GP : I, txtWidth_GP : I, /* width_GP - questionButtonWidth */ iconeCheck_GP : S, iconeFln_GP : S, iconeAlpha_GP : AlphaBitmap, text_GP : S ] mkGParams;; typeof gParams = GParams;; /* titles 's parameters */ struct TParams = [ minHeight_TP : I, /* sizeFont + 4 */ font_TP : S, objfont_TP : ObjFont, size_TP : I, color_TP : I, bkgCheck_TP : S, bkgColor_TP : I, bkgBitmap_TP : S, bkgBitmapAlpha_TP : AlphaBitmap ] mkTParams;; typeof tParams = TParams;; /* help fields parameters */ struct FParams = [ qminHeight_FP : I, /* qsizefont + 4 */ qfont_FP : S, qobjfont_FP : ObjFont, qsize_FP : I, qcolor_FP : I, aminHeight_FP : I, /* asizefont + 4 */ afont_FP : S, aobjfont_FP : ObjFont, asize_FP : I, acolor_FP : I, bkgCheck_FP : S, bkgColor_FP : I, bkgBitmap_FP : S, bkgBitmapAlpha_FP : AlphaBitmap, questionBitmap_FP : S, questionBitmapAlpha_FP : AlphaBitmap, answerBitmap_FP : S, answerBitmapAlpha_FP : AlphaBitmap, backBitmap_FP : S, backBitmapAlpha_FP : AlphaBitmap ] mkFParams;; typeof fParams = FParams;; /* types des champs de texte */ var HELPTYPE_QUESTION = 0;; var HELPTYPE_ANSWER = 1;; var HELPTYPE_RETURN = 2;; var HELPTYPE_TITLE = 3;; var HELPTYPE_SPACE = 4;; /* taille de départ de la fenêtre d'aide */ /* (avant construction des champs d'aide)*/ var HWstartingHeight = 50;; /* struct pour interface de question */ struct HIcon = [ cont_HI : ObjContainer, bkg_HI : [AlphaBitmap CompBitmap], btt_HI : CompRollOver ] mkHIcon;; typeof hIcon = HIcon;; /* struct pour affichage questions/réponses */ struct HWin = [ cont_HW : ObjContainer, /* nombre de fields */ nbFields_HW : I, /* taille calculée du container */ height_HW : I, cx_HW : I, cy_HW : I, cw_HW : I, ch_HW : I, /* liste des champs de réponses / questions */ /* [reference type text Objbouton Objtext frame ordonnée_ObjText hauteur_ObjText ] */ /* type = 1 si réponse, 0 si question, 2, pour retour au champ précédent, */ /* 3 pour un titre, 4 pour un espace */ fields_HW : [[S I S CompRollOver CompText [AlphaBitmap [CompBitmap r1]] I I] r1] ] mkHWin;; typeof hWin = HWin;; typeof hWLastType = I;; /*****************************************************************************/ /*****************************************************************************/ /** **/ /** BODY - GESTION DE LA FENETRE D'AIDE **/ /** **/ /*****************************************************************************/ /*****************************************************************************/ /**************************************************************/ /* */ /* _destroyField [[S I S GLIB2D_Button GLIB2D_Text I I]] I */ /* */ /* détruit un champ d'aide. */ /* */ /**************************************************************/ fun _destroyCbmp (obj, nil) = _DScompBitmap obj; 1;; fun _destroyField (field, z) = let field -> [_ type _ btt txt frame _ _] in ( _DScompRollOver btt; GRAPHICDRESSING_DScompText txt; let frame -> [alpha cbmpl] in ( apply_on_list cbmpl @_destroyCbmp nil; if (type == 3) then _DSalphaBitmap alpha else nil; ); ); 1;; /**************************************************************/ /* */ /* _hWdestroy [ObjWin u0] I */ /* */ /* détruit la fenêtre d'aide */ /* */ /**************************************************************/ fun _hWdestroy (obj, param, x, y, btn, mask)= /* on détruit les champs présents */ apply_on_list hWin.fields_HW @_destroyField nil; /* et le container */ _DScontainer hWin.cont_HW; set hWin = nil; 1;; /**********************************************************/ /* */ /* _hlpvWAsk [CompRollOver S I I I I] I */ /* */ /* envoie une référence de question au serveur HelpServer */ /* */ /**********************************************************/ fun _hlpvWAsk (obj, ref, x, y, btn, msk) = _DMSeventTag this "ask" ref nil nil; 1;; /**********************************************************************************/ /* */ /* _makeTitleField [[S I S [GLIB2D_Frame r1] GLIB2D_Button GLIB2D_Text I I I]] I */ /* */ /* créé un champ de titre avec les caractéristiques passées */ /* en paramètre. */ /* */ /**********************************************************************************/ fun _makeTitleField (field) = let field -> [ref type text _ _ _ posY height] in ( ggd_SETfont "title"; /* copy and resize title's background */ let if (!strcmp tParams.bkgCheck_TP "bitmap") then let _GETalphaBitmapSize tParams.bkgBitmapAlpha_TP -> [aw ah] in let _CRbitmap _channel gParams.width_GP height -> newBmp in let _SCPalphaBitmap newBmp 0 0 (gParams.width_GP - 1) (height - 1) tParams.bkgBitmapAlpha_TP 0 0 (aw-1) (ah-1) -> newBmp in let _CRalphaBitmap _channel newBmp nil nil nil -> newAlpha in [newBmp newAlpha] else [nil nil] -> [newBmp newAlpha] in ( _DSbitmap newBmp; let ggd_CRframeAlpha hWin.cx_HW hWin.cy_HW gParams.width_GP height nil tParams.bkgColor_TP newAlpha -> [alpha cbmp] in let [alpha (cbmp)::nil] -> frameTmp in /*let gCR_Frame 0 0 hlpvWTitleWidth height nil nil -> frameTmp in*/ let ggd_CRlabel hWin.cx_HW hWin.cy_HW gParams.txtWidth_GP height nil text -> labelTmp /*let gCR_Label 1 1 hlpvWTitleWidth height text -> labelTmp*/ in ( set hWLastType = type; mutate field <- [_ _ _ nil labelTmp frameTmp _ _]; ); ); ); 1;; fun _makeFrames (cx, cy, w, h, color, alpha, nblines) = let 0 -> i in let 0 -> curH in let nil -> cbmpl in ( while (i < nblines) do ( let ggd_CRframeAlpha cx cy+curH w fParams.qminHeight_FP nil color fParams.bkgBitmapAlpha_FP -> [alpha cbmp] in ( set curH = curH+fParams.qminHeight_FP; set cbmpl = cbmp::cbmpl; ); set i = i+1; ); [alpha cbmpl]; );; /**********************************************************************************/ /* */ /* _makeSpaceField [[S I S [GLIB2D_Frame r1] GLIB2D_Button GLIB2D_Text I I I]] I */ /* */ /* créé un espace entre les champs avec les caractéristiques passées */ /* en paramètre. */ /* */ /**********************************************************************************/ fun _makeSpaceField (field) = let field -> [ref type text _ _ _ posYIni height] in ( let height / fParams.qminHeight_FP -> nblines in let _makeFrames hWin.cx_HW posYIni gParams.width_GP height fParams.bkgColor_FP fParams.bkgBitmapAlpha_FP nblines -> frame in /* on créé le label */ let ggd_CRlabel 25 posYIni gParams.txtWidth_GP height nil "" -> labelTmp in ( set hWLastType = type; mutate field <- [_ _ _ nil labelTmp frame _ _]; ); ); 1;; /**********************************************************************************/ /* */ /* _makeHelpField [[S I S [GLIB2D_Frame r1] GLIB2D_Button GLIB2D_Text I I I]] I */ /* */ /* créé un champ d'aide avec les caractéristiques passées */ /* en paramètre. */ /* */ /**********************************************************************************/ fun _makeHelpField (field) = let field -> [ref type text _ _ _ posYIni height] in let height / fParams.qminHeight_FP -> nblines in let _makeFrames hWin.cx_HW posYIni gParams.width_GP height fParams.bkgColor_FP fParams.bkgBitmapAlpha_FP nblines -> frame in let /* réponse */ if (type == 1) then ( ggd_SETfont "answer"; ggd_CRrollOverCustomAlpha [5 (posYIni+2)] nil fParams.answerBitmapAlpha_FP; ) /* question */ else if (type == 0) then ( ggd_SETfont "question"; let ggd_CRrollOverCustomAlpha [5 (posYIni+2)] nil fParams.questionBitmapAlpha_FP -> roll in ( ggd_CRtoolTip (_CONVERTcompRollOverToObjNode roll) (_loc this "HLPV_TLTP_ACCESS_FIELD" nil) nil; roll; ); ) /* retour au champ précédent */ else if (type == 2) then ( ggd_SETfont "question"; let ggd_CRrollOverCustomAlpha [5 (posYIni+2)] nil fParams.backBitmapAlpha_FP -> roll in ( ggd_CRtoolTip (_CONVERTcompRollOverToObjNode roll) (_loc this "HLPV_TLTP_PREVIOUS_FIELD" nil) nil; roll; ); ) else nil -> bttTmp in /* on créé le label */ let ggd_CRlabel 25 posYIni gParams.txtWidth_GP height nil text -> labelTmp in ( /* réflexe du bouton */ if ((type == 0) || (type == 2)) then ( _CBcompRollOverClick bttTmp @_hlpvWAsk ref; 1; ) else nil; set hWLastType = type; mutate field <- [_ _ _ bttTmp labelTmp frame _ _]; ); 1;; /**************************************************************/ /* */ /* _printField [[S I S GLIB2D_Button GLIB2D_Text I I I] u0] I */ /* */ /* place le champ d'aide passé en paramètre dans le container */ /* */ /**************************************************************/ fun _printField (field, z) = let field -> [ref type text _ _ _ posY height] in ( /* barre d'espace */ if (type == 4) then _makeSpaceField field /* titre */ else if (type == 3) then _makeTitleField field /* champ d'aide */ else _makeHelpField field; 1; );; fun _getNbReturnChar (text) = if (text == nil) then 0 else let strfind "\n" text 0 -> pos in if (pos == nil) then 0 else 1 + _getNbReturnChar (substr text (pos+1) ((strlen text) - (pos+1)));; fun _getSubTextHeight (type, text, objfont, minHeight) = let _GETstringSize objfont text -> [w h] in let if (h < minHeight) then ( minHeight; ) else ( h; ) -> h in if (w <= gParams.txtWidth_GP) then ( h; ) else ( let (itof w) /. (itof gParams.txtWidth_GP) -> nblinesF in let if (nblinesF >. (itof (ftoi nblinesF))) then (w / gParams.txtWidth_GP)+1 else w / gParams.txtWidth_GP -> nblines in ( h * nblines ; ); );; fun _getTextHeight (type, text, objfont, minHeight) = let strfind "\n" text 0 -> pos in if (pos == nil) then _getSubTextHeight type text objfont minHeight else (_getSubTextHeight type (substr text 0 pos) objfont minHeight) + (_getTextHeight type (substr text (pos+1) ((strlen text) - (pos+1))) objfont minHeight);; fun _getHelpFieldHeight (type, text) = if ((type == HELPTYPE_SPACE) || (type == HELPTYPE_RETURN)) then fParams.qminHeight_FP else if (type == HELPTYPE_QUESTION) then _getTextHeight type text fParams.qobjfont_FP fParams.qminHeight_FP else if (type == HELPTYPE_ANSWER) then _getTextHeight type text fParams.aobjfont_FP fParams.aminHeight_FP else if (type == HELPTYPE_TITLE) then ((_getTextHeight type text tParams.objfont_TP tParams.minHeight_TP) + tParams.minHeight_TP) else ( _DLGMessageBox _channel nil "ERROR" "bad help field type!" 0; 0; );; fun _getTypeStrFromType (type) = if (type == HELPTYPE_SPACE) then "SPACE" else if (type == HELPTYPE_RETURN) then "RETURN" else if (type == HELPTYPE_QUESTION) then "QUESTION" else if (type == HELPTYPE_ANSWER) then "ANSWER" else if (type == HELPTYPE_TITLE) then "TITLE" else "NIL";; /**************************************************************/ /* */ /* _createField [[S r1] u0] I */ /* */ /* créé un champ d'aide en fonction de l'ordonnée et de la */ /* taille du champ précedent. */ /* */ /**************************************************************/ fun _createField (q, z) = let hd q -> ref in let atoi (hd (tl q)) -> type in let hd (tl (tl q)) -> text in ( let _getHelpFieldHeight type text -> textHeight in ( /* on créé le champ et on l'ajoute à la liste des champs */ set hWin.fields_HW = listcat hWin.fields_HW ([ref type text nil nil nil hWin.height_HW textHeight]::nil); /* incrément. nbr de champs */ set hWin.nbFields_HW = hWin.nbFields_HW + 1; /* incrément. taille container */ set hWin.height_HW = hWin.height_HW + textHeight; ); 1; );; /**************************************************/ /* */ /* _createFields [ [[S r1] r1] ] I */ /* */ /* créé les champs d'aide transmis par HelpServer */ /* */ /**************************************************/ fun _createFields (qlist) = if (qlist == nil) then nil else ( /* on détruit les champs présents */ apply_on_list hWin.fields_HW @_destroyField nil; set hWin.fields_HW = nil; set hWin.nbFields_HW = 0; set hWin.height_HW = hWin.cy_HW; /* on demande la création des nouveaux champs */ apply_on_list qlist @_createField nil; /* let GRAPHICDRESSING_ExSizeFromClientSize hlpvWWinWidth hlpvWWin.height_HlpvWWin GDWIN_BORDERS|GDWIN_TITLE_BAR|GDWIN_CLOSE_BUTTON -> [w h] in {*/ /* on resize la fenetre et on créé le container */ set hWin.ch_HW = hWin.height_HW - hWin.cy_HW; let GRAPHICDRESSING_ExSizeFromClientSize hWin.cw_HW hWin.ch_HW GDWIN_BORDERS|GDWIN_TITLE_BAR|GDWIN_CLOSE_BUTTON -> [tw th] in let _GETscreenSize -> [sw sh] in _SIZEcontainer hWin.cont_HW (sw-tw) 0 tw th; /* gSET_Cont hlpvWWin.cont_HlpvWWin hlpvWWin.cx_HlpvWWin hlpvWWin.cy_HlpvWWin hlpvWWinWidth hlpvWWin.height_HlpvWWin; };*/ /* on affiche les champs d'aide créés */ apply_on_list hWin.fields_HW @_printField nil; _PAINTcontainer hWin.cont_HW; _SHOWcontainer hWin.cont_HW CONTAINER_UNHIDDEN; 1; );; /*************************************************/ /* */ /* _processFields [ [[S r1] r1] ] I */ /* */ /* callback qui traite la réception d'une aide */ /* */ /*************************************************/ fun _processFields (qlist) = if (hWin != nil) then nil else ( set hWin = mkHWin [nil 0 0 0 0 0 0 nil]; /* let GRAPHICDRESSING_ExSizeFromClientSize hlpvWWinWidth hlpvWWin.height_HlpvWWin GDWIN_BORDERS|GDWIN_TITLE_BAR|GDWIN_CLOSE_BUTTON -> [w h] in */ let GRAPHICDRESSING_ExSizeFromClientSize gParams.width_GP HWstartingHeight GDWIN_BORDERS|GDWIN_TITLE_BAR|GDWIN_CLOSE_BUTTON -> [tw th] in let _GETscreenSize -> [sw sh] in let ggd_CRcont [(sw-tw) 0 tw th] [tw th tw th] nil (_loc this "HLPV_HELP" nil) -> [cont _ _ _ bclose [cx cy cw ch]] in { set hWin.cont_HW = cont; set hWin.cx_HW = cx; set hWin.cy_HW = cy; set hWin.cw_HW = cw; set hWin.ch_HW = ch; _CBcompRollOverClick bclose @_hWdestroy nil; }; ); _createFields qlist; 1;; /*****************************************************************************/ /*****************************************************************************/ /** **/ /** BODY - GESTION DE l'ICONE D'AIDE **/ /** **/ /*****************************************************************************/ /*****************************************************************************/ fun HW_destroyGParams () = _DSalphaBitmap gParams.iconeAlpha_GP; 1;; fun HW_destroyTParams () = _DSfont tParams.objfont_TP; _DSalphaBitmap tParams.bkgBitmapAlpha_TP; 1;; fun HW_destroyFParams () = _DSfont fParams.qobjfont_FP; _DSfont fParams.aobjfont_FP; _DSalphaBitmap fParams.bkgBitmapAlpha_FP; _DSalphaBitmap fParams.questionBitmapAlpha_FP; _DSalphaBitmap fParams.answerBitmapAlpha_FP; _DSalphaBitmap fParams.backBitmapAlpha_FP; 1;; /*************************************************/ /* */ /* _hlpvWIconDestroy */ /* */ /* détruit l'icone d'aide */ /* */ /*************************************************/ fun _hlpvWIconDestroy (objWin, z) = _hWdestroy nil nil nil nil nil nil; HW_destroyGParams; HW_destroyTParams; HW_destroyFParams; GRAPHICDRESSING_DScompRollOver hIcon.btt_HI; _DScontainer hIcon.cont_HI; 1;; /*************************************************/ /* */ /* _processIconBtt */ /* */ /* callback qui traite le click de l'icon d'aide */ /* */ /*************************************************/ fun _processIconBtt (obj, z, x, y, btn, msk) = /* on envoit l'évènement à HelpServer */ _DMSeventTag this "ask" "0_0" nil nil; 1;; /**************************************************/ /* */ /* HW_loadGParams */ /* */ /* charge les paramètres généraux */ /**************************************************/ fun HW_loadGParams (l) = let atoi (getInfo l "widthParam_GHed") -> w_g in let getInfo l "iconeCheckParam_GHed" -> ic_g in let getInfo l "iconeFlnParam_GHed" -> if_g in let getInfo l "textParam_GHed" -> t_g in ( set gParams = mkGParams [w_g nil/*txtWidth_GP*/ ic_g if_g nil t_g]; set gParams.iconeAlpha_GP = _LDalphaBitmap _channel (_checkpack if_g); /* txtWidth_GP is computed in HW_loadFParams */ ); 1;; fun HW_loadTParams (l) = let getInfo l "fontParam_THed" -> f_t in let atoi (getInfo l "sizeParam_THed") -> s_t in let htoi (getInfo l "colorParam_THed") -> c_t in let atoi (getInfo l "minHeightParam_THed")-> mh_t in let getInfo l "bkgCheckParam_THed" -> bcheck_t in let htoi (getInfo l "bkgColorParam_THed") -> bc_t in let getInfo l "bkgBitmapParam_THed" -> bb_t in ( set tParams = mkTParams [mh_t f_t nil s_t c_t bcheck_t bc_t bb_t nil]; set tParams.objfont_TP = ggd_CRfont "title" s_t f_t 0 c_t; ggd_PUSHfont; if (!strcmp bcheck_t "bitmap") then set tParams.bkgBitmapAlpha_TP = _LDalphaBitmap _channel (_checkpack bb_t) else nil; ); 1;; fun HW_loadFParams (l) = let getInfo l "qfontParam_FHed" -> qf_f in let atoi (getInfo l "qsizeParam_FHed") -> qs_f in let htoi (getInfo l "qcolorParam_FHed") -> qc_f in let atoi (getInfo l "qMinHeightParam_FHed")-> qmh_f in let getInfo l "afontParam_FHed" -> af_f in let atoi (getInfo l "asizeParam_FHed") -> as_f in let htoi (getInfo l "acolorParam_FHed") -> ac_f in let atoi (getInfo l "aMinHeightParam_FHed")-> amh_f in let getInfo l "bkgCheckParam_FHed" -> bcheck_f in let htoi (getInfo l "bkgColorParam_FHed") -> bc_f in let getInfo l "bkgBitmapParam_FHed" -> bb_f in let getInfo l "questionBitmapParam_FHed" -> qbtt_f in let getInfo l "answerBitmapParam_FHed" -> abtt_f in let getInfo l "backBitmapParam_FHed" -> bbtt_f in ( set fParams = mkFParams [qmh_f qf_f nil qs_f qc_f qmh_f af_f nil as_f ac_f bcheck_f bc_f bb_f nil qbtt_f nil abtt_f nil bbtt_f nil]; if (!strcmp bcheck_f "bitmap") then set fParams.bkgBitmapAlpha_FP = _LDalphaBitmap _channel (_checkpack bb_f) else nil; set fParams.questionBitmapAlpha_FP = _LDalphaBitmap _channel (_checkpack qbtt_f); let _GETalphaBitmaps fParams.questionBitmapAlpha_FP -> [questionBitmap _]in let _GETpixel16 questionBitmap 0 0 -> questionColor in _SETalphaBitmapTransparency fParams.questionBitmapAlpha_FP questionColor; set fParams.answerBitmapAlpha_FP = _LDalphaBitmap _channel (_checkpack abtt_f); let _GETalphaBitmaps fParams.answerBitmapAlpha_FP -> [answerBitmap _] in let _GETpixel16 answerBitmap 0 0 -> answerColor in _SETalphaBitmapTransparency fParams.answerBitmapAlpha_FP answerColor; set fParams.backBitmapAlpha_FP = _LDalphaBitmap _channel (_checkpack bbtt_f); let _GETalphaBitmaps fParams.backBitmapAlpha_FP -> [backBitmap _] in let _GETpixel16 backBitmap 0 0 -> backColor in _SETalphaBitmapTransparency fParams.backBitmapAlpha_FP backColor; set fParams.qobjfont_FP = ggd_CRfont "question" qs_f qf_f 0 qc_f; ggd_PUSHfont; set fParams.aobjfont_FP = ggd_CRfont "answer" as_f af_f 0 ac_f; ggd_PUSHfont; /*let _GETalphaBitmapSize fParams.questionBitmapAlpha_FP -> [w _] in*/ set gParams.txtWidth_GP = gParams.width_GP - 25; /* 25 <=> space between container border and text */ ); 1;; /**************************************************/ /* */ /* HW_loadParams */ /* */ /**************************************************/ fun HW_loadParams (params) = HW_loadGParams params; HW_loadTParams params; HW_loadFParams params; 1;; fun _hIdestroy (objroll, z, x, y, btn, msk) = GRAPHICDRESSING_DScompRollOver hIcon.btt_HI; let hIcon.bkg_HI -> [alpha cbmp] in ( _DSalphaBitmap alpha; _DScompBitmap cbmp; ); _DScontainer hIcon.cont_HI; 1;; /*************************************************/ /* */ /* HW_startIcon */ /* */ /* démarre l'interface graphique cliente */ /* */ /*************************************************/ fun HW_startIcon (params, chn, father, x, y, w, h) = HW_loadParams params; ggd_init _channel; /* container */ let if (father == nil) then ggd_CRcont [x y w h] [w h w h] GDWIN_TITLE_BAR|GDWIN_CLOSE_BUTTON "help" else let _CRcontainerFromObjWin chn father x y w h CO_NOBORDER|CO_NOCAPTION|CO_CHILDINSIDE nil "help" -> cont in ( ggd_setCont cont; [ cont nil nil nil nil [0 0 w h]]; ) -> [cont _ _ _ closeb [cx cy cw ch]] in { let ggd_CRframe cx cy cw ch nil nil (strcat _DMSgetpath this.classDMI "maps/buttonbg.png") -> [alpha cbmp] in let if (!strcmp gParams.iconeCheck_GP "mini") then ggd_CRrollOverMini [cx+((cw-17)/2) cy+((ch-17)/2)] nil gParams.iconeAlpha_GP else if (!strcmp gParams.iconeCheck_GP "middle") then ggd_CRrollOverMiddle [cx+((cw-24)/2) cy+((ch-24)/2)] nil gParams.iconeAlpha_GP else if (!strcmp gParams.iconeCheck_GP "maxi") then ggd_CRrollOverMaxi [cx+((cw-36)/2) cy+((ch-36)/2)] nil gParams.iconeAlpha_GP else if (!strcmp gParams.iconeCheck_GP "text") then ggd_CRrollOverText [cx cy] cw ch nil gParams.text_GP else ( _DLGMessageBox _channel nil "HW_startIcon Error" "gParams.iconeCheck_GP is not set!" 0; nil; ) -> roll in let ggd_CRtoolTip (_CONVERTcompRollOverToObjNode roll) (_loc this "HLPV_TLTP_CALL_HELP" nil) nil -> tmp in ( set hIcon = mkHIcon [cont [alpha cbmp] roll]; /* réflexe de destruction de l'icone */ if (father == nil) then ( _CBcompRollOverClick closeb @_hIdestroy nil; 1; ) else nil; /* réflexe de l'icone pour apeller l'aide */ _CBcompRollOverClick roll @_processIconBtt nil; _PAINTcontainer hIcon.cont_HI; _SHOWcontainer hIcon.cont_HI CONTAINER_UNHIDDEN; ); }; hIcon;;