Modifie les caractérisques géométriques des objets d'un formulaire proportionnelement, pour l'afficher plein écran. Dans la méthode Activate du formulaire. A relancer à chaque modification ou ajout d'objet.
Remarque : certains objets ont des caractéristiques qui sont définies par défaut (on le remarque rapidement) : Il faut revenir dans les propriétés de l'objet du source pour le saisir "en dur", et hop !
Code source :
** Modifie les caractéristiques d'un formulaire, dynamiquement Hauteur, Largeur, Police, Colonne... ** Modifie le source, et à chaque démarrage le formulaire s'adapte à taille de l'écran, ** créé les modifications dans Activate du Form * Exemple : *dyna_ecranxy ("form1") PROCEDURE dyna_ecranxy (form_src) IFTYPE('path_form')="U"
path_form ="." ENDIF SELECT 0 CREATECURSORRESIZE (obj c(254)) SELECT 0 USE (ADDBS(path_form) + FORCEEXT(form_src ,"scx")) ALIAS form_src SELECT * FROM form_src INTOCURSOR form_tmp SELECT form_src USE SELECT form_tmp
objform = ''
LOCATE FOR'form' $ LOWER(form_tmp.BASECLASS) IFFOUND()
objform = ALLTRIM(objname)
=dans_tb(form_tmp.properties)
LOCATE FOR'fontsize' $ LOWER(objet)
std_font = IIF(FOUND(), donnee, "9")
LOCATE FOR'height' $ LOWER(objet)
h_frm = IIF(FOUND(), donnee, "1024")
LOCATE FOR'width' $ LOWER(objet)
w_frm = IIF(FOUND(), donnee, "1280") ENDIF SELECT form_tmp SCANFOR !EMPTY(properties) ANDNOT ( ; 'dataenvironment' $ LOWER(form_tmp.BASECLASS) OR ; 'cursor' $ LOWER(form_tmp.BASECLASS) ;
)
=dans_tb(form_tmp.properties)
ch0="" SELECT prop0 SCANFOR !EMPTY(objet) DOCASE CASE ; ALLTRIM(objet) = "FontSize"OR ; ".fontsize" $ LOWER(objet) IF donnee # "0" INSERTINTORESIZEVALUES( ; IIF(!EMPTY(form_tmp.PARENT), STRTRAN(ALLTRIM(form_tmp.PARENT), objform, '') + "." + ALLTRIM(form_tmp.objname), '') + "." + ALLTRIM(prop0.objet) + " = ROUND(" + ; ALLTRIM(prop0.donnee) + " * val_F, 0) " + CHR(38)+ CHR(38)+ " " + CAST(form_tmp.BASECLASSASCHARACTER (200))) ENDIF CASE ; ALLTRIM(objet) = "Width"OR ; ALLTRIM(objet) = "Left"OR ; ".width" $ LOWER(objet) OR ; ".left" $ LOWER(objet) IF donnee # "0" INSERTINTORESIZEVALUES( ; IIF(!EMPTY(form_tmp.PARENT), STRTRAN(ALLTRIM(form_tmp.PARENT), objform, '') + "." + ALLTRIM(form_tmp.objname), '') + "." + ALLTRIM(prop0.objet) + " = ROUND(" + ; ALLTRIM(prop0.donnee) + " * val_X, 0)" ) ENDIF CASE ; ALLTRIM(objet) = "Height"OR ; ALLTRIM(objet) = "Top"OR ; ALLTRIM(objet) = "HeaderHeight"OR ; ALLTRIM(objet) = "RowHeight"OR ; ".fontsize" $ LOWER(objet) OR ; ".top" $ LOWER(objet) IF donnee # "0" INSERTINTORESIZEVALUES( ; IIF(!EMPTY(form_tmp.PARENT), STRTRAN(ALLTRIM(form_tmp.PARENT), objform, '') + "." + ALLTRIM(form_tmp.objname), '') + "." + ALLTRIM(prop0.objet) + " = ROUND(" + ; ALLTRIM(prop0.donnee) + " * val_Y, 0)" ) ENDIF ENDCASE SELECT prop0 ENDSCAN SELECT form_tmp ENDSCAN USE SELECT prop0 USE ERASE ('retaille.tmp') SELECTRESIZE COPYTO ('retaille.tmp') FORLIKE(".*", obj) TYPEDELIMITEDWITH""WITHCHARACTER"," SETTEXTMERGEONNOSHOW TEXTTO ret0 && les lignes ci dessous ont été générées automatiquement par la procédure "DYNA_ECRANXY"
** Extrait toutes les propriétés de l'objet dans un curseur ** et ajoute des propriétés si elles sont définies par défaut ** set library to foxtools.fll && pour les fonctions words() et wordnum() PROCEDURE dans_tb
PARAMETER chp CREATECURSOR prop0 (objet c(250), donnee c(250))
chaine=""
ch_obj=""
val_chp = (chp) FOR i = 1 TOLEN(val_chp)
x = SUBSTR(val_chp, i, 1) DOCASE CASE x = "="ANDEMPTY(ch_obj)
ch_obj = ALLTRIM(chaine)
chaine = "" CASE x = CHR(13) AND !EMPTY(ch_obj) INSERTINTO prop0 (objet, donnee) VALUES (ch_obj, ALLTRIM(chaine)) IFUSED("prop1") INSERTINTO prop1 (ID, classe, obj, pere ,objet, donnee) VALUES ;
(form_tmp.uniqueid, form_tmp.CLASS, form_tmp.objname, form_tmp.PARENT, ch_obj, ALLTRIM(chaine)) ENDIF
ch_obj = ""
chaine = "" CASE x != CHR(13) OR x != CHR(10)
chaine=chaine + x ENDCASE ENDFOR ** Pour les polices de taille par défaut créé la propriété FontSize par defaut du formulaire SELECTCOUNT(*) FROM prop0 WHERE"FONTSIZE" $ UPPER(ALLTRIM(objet)) INTOARRAY xx IF xx = 0 AND ( ; LOWER(ALLTRIM(form_tmp.BASECLASS)) $ "checkbox,combobox,commandbutton,editbox,grid,header,label,spinner,textbox" ;
) INSERTINTO prop0 (objet, donnee) VALUES ("FontSize", std_font) ENDIF IF ; 'optiongroup' $ LOWER(form_tmp.BASECLASS) SELECTDISTINCTPADR(wordnum(ALLTRIM(objet), 1, "."), 60) AS ob FROM prop0 WHERE'.' $ wordnum(objet, 1, "=") INTOCURSOR prop1 SCANFOR !EMPTY(ob)
ob0 = LOWER(ALLTRIM(prop1.ob) + ".fontsize") SELECT prop0 GOTOP
LOCATE FOR ob0 $ LOWER(prop0.objet) IFNOTFOUND() INSERTINTO prop0 (objet, donnee) VALUES (ob0, std_font) ENDIF SELECT prop1 ENDSCAN USE ENDIF ENDPROC
* Manipule du texte entre 2 balises /!\ Casse et saut de lignes * entre_balises (txt_src, bal1, bal2[, txt_ins]) * entre_balises ('abc<def>gh', '<', '>') && Supprime les balises et le contenu * entre_balises ('abc<def>gh', '<', '>', 'zorro') && Insère à la fin si pas de balise 1 (avec balises) * && Remplace si 2 balises successives (y compris balises) * && Erreur si pas de balise 2 en suivant * entre_balises ('abc<*def*>gh', '<', '>', 1) && renvoi le texte entre balises FUNCTION entre_balises (txt_src, bal1, bal2, txt_ins)
typ_trait = IIF(PCOUNT()< 4, "S", "")
typ_trait = ICASE(VARTYPE(txt_ins) = "C", "I", VARTYPE(txt_ins) = "N", "L", typ_trait)
dans_tb ????