/****************************************************************************************************/ /* Objet Text ecrit par J.DUMAY */ /****************************************************************************************************/ /* TEXT_New */ /* TEXT_Del */ /* TEXT_GetText */ /* TEXT_ChangeDisplayFlags */ /* TEXT_ChangeCoordinates */ /* */ /****************************************************************************************************/ /* fonction interne */ fun CreateBitmapText(Channel,xsize,ysize,text,textcolor,textflags,shadowcolor,shadowflag,font)= { let (if textcolor==(make_rgb 0 0 255) then make_rgb 0 255 0 else make_rgb 0 0 255) -> transparency in let _FILLbitmap (_CRbitmap Channel xsize ysize) transparency -> bmp in { if shadowflag>0 then _DRAWrectangleText bmp font shadowflag shadowflag xsize ysize shadowcolor textflags text else nil; _DRAWrectangleText bmp font 0 0 xsize ysize textcolor textflags text; [bmp transparency] }; };; /* les methodes */ fun IsMouseOnText(MouseCol,MouseLgn,txt)=0;; fun PaintText(txt)= [txt.TEXTbmp 0 0 txt.TEXTObj2D.O2Dw txt.TEXTObj2D.O2Dh txt.TEXTtransparency];; fun PaintPartOfText(area,txt)= let SizeRectangle area -> [aw ah] in [ txt.TEXTbmp area.RctHG.iptX area.RctHG.iptY aw ah txt.TEXTtransparency ];; fun IsUserClickAllowedInText()=1;; fun IsUserUnClickAllowedInText()=1;; fun DsText(txt)= { _DSbitmap txt.TEXTbmp; _DSfont txt.TEXTfont; set txt.TEXTtext=nil; set txt.TEXTbmp=nil; set txt.TEXTfont=nil; set txt.TEXTtransparency=nil; 1 };; /* Constructeur de l'objet text multilignes Channel : canal de construction Container : container auquel appartient le rollover ObjPere : l'objet pere Coordinates : coordonnees de l'objet par rapport au pere xsize : hauteur du rectangle englobant le texte ysize : largeur du rectangle englobant le texte ObjetFlags : flags de construction de l'objet (O2D_ENABLE|O2D_HIDE) FontName : nom de la font FontSize : taille de la font FontFlags : flags de la font (Cf _CRfont) Text : texte TextColor : couleur du texte TextFlags : flags de positionnement du text (Cf _DrawText) ShadowFlag : Entier indiquant le decalage de l'ombre si >0.Si egal a 0 alors pas d'ombre ShadowColor : couleur de l'ombre Name : nom de l'objet def: TextType fun [Chn ContainerType Obj2D [I I] I I I S I I S I I I I S] */ fun TEXT_New(Channel, Container, ObjPere, Coordinates, xsize, ysize, ObjetFlags, FontName, FontSize, FontFlags, Text, TextColor, TextFlags, ShadowFlag, ShadowColor, Name )= if (Channel==nil) || (Container==nil) || (Coordinates==nil) || (xsize==nil) || (ysize==nil) || (FontName==nil) || (FontSize==nil) || (FontFlags==nil) || (Name==nil) then nil else let O2D_NewObject Container ObjPere Name xsize ysize Coordinates ObjetFlags -> Obj in if Obj==nil then nil else let Coordinates -> [posx posy] in let _CRfont Channel FontSize 0 FontFlags FontName -> font in let CreateBitmapText Channel xsize ysize Text TextColor TextFlags ShadowColor ShadowFlag font -> [bmp t] in let mkTextType [Obj Text bmp xsize ysize TextColor TextFlags ShadowColor ShadowFlag font t] -> txt in { /* les methodes */ O2D_CBIsMouseOnDisplayObject Obj txt @IsMouseOnText; O2D_CBPaint Obj txt @PaintText; O2D_CBPaintPart Obj txt @PaintPartOfText; O2D_CBUserClickAllowed Obj txt @IsUserClickAllowedInText; O2D_CBUserUnClickAllowed Obj txt @IsUserUnClickAllowedInText; O2D_CBDsObject Obj txt @DsText; txt };; /* destructeur de l'objet texte */ fun TEXT_Del(txt)=O2D_DelObject txt.TEXTObj2D;; /* Cette fonction renvoie la valeur du texte de l'objet texte */ fun TEXT_GetText(txt)=txt.TEXTtext;; /* Cette fonction change la valeur du texte de l'objet texte */ fun TEXT_SetText(txt,newtext)= { _DSbitmap txt.TEXTbmp; set txt.TEXTtext = newtext; let CreateBitmapText _channel txt.TEXTxsize txt.TEXTysize newtext txt.TEXTtextcolor txt.TEXTtextflags txt.TEXTshadowcolor txt.TEXTshadowflag txt.TEXTfont -> [bmp t] in { set txt.TEXTbmp=bmp; set txt.TEXTtransparency=t; txt } };; /* Cette fonction renvoie l'Obj2D englobant */ fun TEXT_GetObject(txt)=txt.TEXTObj2D;; /* change le flag d'affichage de l'objet texte txt : objet texte dont il faut changer le flag NewFlag : nouveau flag (O2D_ENABLE O2D_HIDE) RedrawFlag : 1 si l'objet doit etre redessine dans le buffer d'affichage 0 sinon RepaintFlag : 1 si le container doit etre redessine 0 sinon def: TextType fun [TextType I I I] */ fun TEXT_ChangeDisplayFlags(txt,NewFlag,RedrawFlag,RepaintFlag)= O2D_ChangeObjDisplayFlag txt.TEXTObj2D NewFlag RedrawFlag RepaintFlag; txt;; /* change les coordonnees de l'objet texte par rapport a son objet pere txt : objet texte dont il faut changer les coordonnees NewCoordinates : nouvelles coordonnees [I I] RedrawFlag : 1 si l'objet doit etre redessine dans le buffer d'affichage 0 sinon RepaintFlag : 1 si le container doit etre redessine 0 sinon def: MultiEditLineType fun [MultiEditLineType [I I] I I] */ fun TEXT_ChangeCoordinates(txt,NewCoordinates,RedrawFlag,RepaintFlag)= O2D_ChangeObjCoordinates txt.TEXTObj2D NewCoordinates RedrawFlag RepaintFlag; txt;;