Modifie les caractéristiques d'un formulaire proportionnellement
# 0000000809
ajouté le 02/01/2012 21:26:53 et modifié le 01/03/2012
consulté 6051 fois
Niveau
initié
Modifie les caractéristiques d'un formulaire avec un ratio en X et en Y Exemple : pour passer d'un formulaire développé pour écran 800 X 600 à un 1280 X 1024
Ouvre le source et modifie dans les champs "properties" des objets les caractéristiques dimensionnelles
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, proportionnellement Hauteur, Largeur, Police, Colonne... ** Créé un nouveau formulaire (form_cib) avec les nouvelles caractéristiques ** Exemple : pour passer d'un formulaire développé pour écran 800 X 600 à un 1280 X 1024 *taille_ecranxy ("form1", 1280/800, 1024/600, "form_tmp") PROCEDURE taille_ecranxy (form_src, proportionx, proportiony, form_cib) IFTYPE('path_form')="U"
path_form ="." ENDIF ERASE form_tmp.DBF ** les polices prennent la plus petites des 2 proportions
proportionf = MIN(proportionx, proportiony) SELECT 0 USE (ADDBS(path_form) + FORCEEXT(form_src, "scx")) ALIAS form_src
SELECT * FROM form_src INTODBF form_tmp SELECT form_src USE SELECT form_tmp
* récupère la taille par défaut des polices
LOCATE FOR'form' $ LOWER(form_tmp.BASECLASS)
=dans_tb(form_tmp.properties)
LOCATE FOR'fontsize' $ LOWER(objet)
std_font = IIF(FOUND(), donnee, "9") SELECT form_tmp SCANFOR !EMPTY(properties) ANDNOT ( ; 'dataenvironment' $ LOWER(form_tmp.BASECLASS) OR ; 'cursor' $ LOWER(form_tmp.BASECLASS) ;
)
** 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
Commentaires
le 01/03/2012, Philippe m a écrit : =dans_tb(form_tmp.properties) Est-ce plutôt la procèdure dans_tbPour passer ?
Par ailleurs "wordnum" n'est pas trouvé dans la ligne
"SELECT DISTINCT PADR(wordnum(ALLTRIM(objet), 1, "."), 60) AS ob FROM prop0 WHERE '.' $ wordnum(objet, 1, "=") INTO CURSOR prop1"
Cordialement
le 01/03/2012, fecarabos a écrit : Merci, un parasite c'était glissé !! Corrigé.
WORDNUM est une fonction de la bibliothèque "FOXTOOLS.FLL", installée avec VFP. Il faut indiquer dans le programme : SET LIBRARY TO FOXTOOLS.FLL je la préfère à GETWORDNUM (native à VFP). tu peux aussi trouver une fonction qui la rend équivalente ici : http://fox.wikis.com/wc.dll?Wiki~GetWordNum il suffit de remplacer syGetWordNum par wordnum
pour info sur le même lien la fonction WORDS de FOXTOOLS est syGetWordCount
le 19/11/2015, benothmanchiheb a écrit : dans_tb introuvable ????
=dans_tb(form_tmp.properties)
Est-ce plutôt la procèdure dans_tbPour passer ?
Par ailleurs "wordnum" n'est pas trouvé dans la ligne
"SELECT DISTINCT PADR(wordnum(ALLTRIM(objet), 1, "."), 60) AS ob FROM prop0 WHERE '.' $ wordnum(objet, 1, "=") INTO CURSOR prop1"
Cordialement