Forum Liberty Basic France

Projets open source » MULTI-CONTROL.BAS Générer une série de contrôles avec paramètres
Visiteur
Le 18/06/2012 à 13h22

Libertynaute Inactif

Groupe: Visiteur



Bonjour,

Ceci est un projet qui n'est rien de plus qu'un projet de projet.

Il s'agit de créer un série de contrôles nombreux sur une feuille; éventuellement plusieurs types de controles.
par exemple 50 ou 100 (ou plus) checkbox pour une liste de courses par exemple, ou pour tout autre formulaire un peu long. On n'est pas tenu au checkbox, on choisit ce qu'on veut, en adaptant la syntaxe.

Le code MULTI-CONTROL.BAS "PRINT#" les instructions de création des contrôles dans un autre fichier (séquentiel) CONTROLX.BAS. Les noms des contrôles peuvent être créés à la volée, et leurs coordonnées sont données par les variables x, y, w, h ainsi que dh pour la distance horizontale entre les contrôles (x = x + dh), et dv pour la distance verticale entre contrôles (y = y + dv).

Bien évidemment le codage manuscrit et freeform restent meilleurs et sont beaucoup moins lourds s'il n'y a qu'un nombre limité de contrôles.

Toutefois ce procédé-ci donne un interface aisément corrigible; il suffit de retourner dans MULTI-CONTROL.BAS et d'y modifier les valeurs de quelques paramètres, par exemple dh pour l'espacement horizontal, etc... pas de calculs piégeux !

Le problème des textes (titres) à afficher dans les contrôles n'est pas réglé ici. Si on ajoute des textes à afficher dans le document CONTROLX.BAS, ils seront effacés si on veut corriger la disposition des contrôles. Mais on pourrait les prévoir dans MULTI-CONTROL.BAS avec la méthode DATA...READ; ce qui n'est pas encore fait.

Ce code-ci ne prévoit pas tous les ça, c'est un essai, à transformer si utile.

Claude

Code :


'MULTI-CONTROL.BAS          version du 18 juin 2012
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'sur une idée @!#&? de claudevdw

'BUT: créer indirectement une feuille contenant un grand nombre de contrôles de type plutôt uniforme
'         en se servant de chaînes et de paramètres x, y, w, h, dv, dh

'VARIABLES  x, y, w, h     comme d'habitude
'                   dv = distance verticale entre deux contrôles
'                   dh = distance horizontale entre deux contrôles
'                   CMD$ contient toutes les instructions pour créer le contrôle
'                   Pour homogénéiser les données (et les écrire dans un fichier séquentiel)
'                   toutes les variables numériques sont converties en chaînes par STR$( )

OPEN "CONTROLX.BAS" FOR OUTPUT AS #1        ' c'est le produit provisoire, à compléter quand satisfaisant

PRINT #1, "NOMAINWIN"
PRINT #1, ""

'--- plaçons une colonne de 15 textbox

'--- d'abord les coordonnées

x = 20: y = 20: w = 100: h = 25: dh = 10: dv = 10
x$ = STR$(x + dh) + ", " : w$ = STR$(w) + ", ":  h$ = STR$(h)      'y$ est adapté dans la boucle

FOR i = 1 TO 15
    y$ = STR$(i * 30 + dv) + ", "
    CMD$ = "TEXTBOX " + "#w." + STR$(i) + ", " + x$ + y$ + w$ + h$
    PRINT #1, CMD$
NEXT i

PRINT #1, ""

'--- plaçons une colonne de 15 checkbox
'--- d'abord les coordonnées

x = 150: y = 20     ': w = 100: h = 25: dh = 10: dv = 10    'inchangés
x$ = STR$(x + dh) + ", ": y$ = STR$(y + dv) + ", ": w$ = STR$(w) + ", ": h$ = STR$(h)

FOR i = 1 TO 15
    y$ = STR$(i * 30 + dv) + ", "
    CMD$ = "CHECKBOX " + "#w.0" + STR$(i ) + ", " + CHR$(34) + "MonCheckbox" + CHR$(34) + ", Checked, " +  "Unchecked, " + x$ + y$ + w$ + h$
    PRINT #1, CMD$
NEXT i

PRINT #1, ""

'--- et puis encore une colonne de 15 radiobuttons, nettement plus à doite
x = 500: y = 20     ': w = 100: h = 25: dh = 10: dv = 10    'inchangés
x$ = STR$(x + dh) + ", ": y$ = STR$(y + dv) + ", ": w$ = STR$(w) + ", ": h$ = STR$(h)

FOR i = 1 TO 15
    y$ = STR$(i * 30 + dv) + ", "
    CMD$ = "RADIOBUTTON " + "#w.00" + STR$(i ) + ", " + CHR$(34) + "MonRadioButton" + CHR$(34) + ", Checked, " +  "Unchecked, " + x$ + y$ + w$ + h$
    PRINT #1, CMD$
NEXT i

PRINT #1, ""

'--- centrer la fenêtre
PRINT #1, "WindowWidth = 800"
PRINT #1, "WindowHeight = 600"
PRINT #1, "UpperLeftX = INT(DisplayWidth - WindowWidth) / 2"
PRINT #1, "UpperLeftY = INT(DisplayHeight - WindowHeight) / 2"
PRINT #1, ""
'et l'ouvrir
PRINT #1, "OPEN " + CHR$(34) + "Multi-Contrôles" + CHR$(34) + " FOR WINDOW AS " + "#w"
PRINT #1, ""
PRINT #1, "PRINT #w, " + CHR$(34) + "TrapClose [EXIT]" + CHR$(34)

'--- plaçons ici ou là un petit texte
PRINT #1, "PRINT #w.1, " + CHR$(34)  + "MonTextbox" + CHR$(34)
PRINT #1, "PRINT #w.3, " +  CHR$(34) + "Ceci est #w.3" + CHR$(34)
PRINT #1, "PRINT #w.9, " +  CHR$(34) + "Et ici #w.9" + CHR$(34)

PRINT #1, ""
PRINT #1, "WAIT"
PRINT #1, ""

'----------------------------------sub Checked
PRINT #1, "SUB Checked handle$"
PRINT #1, " 'cette sub ne fait rien"
PRINT #1, "END SUB"

PRINT #1, ""
'----------------------------------sub Unchecked
PRINT #1, "SUB Unchecked handle$"
PRINT #1, " 'cette sub ne fait rien non plus"
PRINT #1, "END SUB"

'----------------------------------et créer la finale de CONTROLX.BAS
PRINT #1, ""
PRINT #1, "[EXIT]"
PRINT #1, "CLOSE #w"
PRINT #1, "END"
'--------------------------------------fin de MULTI-CONTROL.BAS
CLOSE #1

PRINT "TERMINE !"
PRINT ""
PRINT  "Ce code a été copié dans <CONTROLX.BAS>"
PRINT ""
PRINT "Si la disposition, le nombre et la taille des contrôles conviennent, "
PRINT "il faut maintenant adapter <CONTROLX.BAS> à l'usage prévu,"
PRINT "sans oublier de le renommer."
PRINT ""
PRINT "Si le résultat n'est pas satisfaisant, retourner dans <MULTI-CONTROL.BAS>"
PRINT "pour modifier les paramètres."
PRINT ""
PRINT "OK"

END





Edité par Visiteur Le 18/06/2012 à 16h45
____________________
Omnium populorum gallicorum bravissimi sunt Belgae.

Web    
Le 20/06/2012 à 22h11

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2471
Sacré exercice de style.. :top .. mais ce n'est pas pour les débutants .
Belle démonstration de concaténation
Je pense en extraire un bout ( opérationnel ) pour le mettre en exemple dans la prochaine version de l'aide.
...(... quand j'aurai bien tout compris... ;) ...)
____________________
Roro

   
Le 02/07/2012 à 17h28

Administrateur

Groupe: Administrateur

Inscrit le: 25/09/2010
Messages: 362
Personnelemen, pout concatener des chaines, j'utilise tout le temps le point virgule, c'est plus sur et je trouve ca plus lisible. Ca evite les erreur d'innatention danz les calcules.

Jag

ps: et pourquoi pas un parseur html (simplifié)tant que t'y es :p
____________________
J'ai toujours raison ! Sauf quand j'ai tort ...

Web    
Le 02/07/2012 à 19h51

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2471
C'est quoi un " parseur" ? c'est pour parçir ?.... les bonnes tomates parcies. ? :p
____________________
Roro

   
Visiteur
Le 03/07/2012 à 15h54

Libertynaute Inactif

Groupe: Visiteur



Bonjour,

Le " + " pour la concaténation c'est par habitude, c'est tout. Certains préfèrent le " ; " , et ailleurs (mais pas en LB/JB je crois) on préfère le " & ".

De même j'ai l'habitude d'utiliser " PRINT #h... " alors que ce n'est pas nécessaire, mais cela me permet de distinguer les actions sur un objet, par rapport à d'autres instructions p. ex. graphiques ou mathématiques.

Un peu comme les gens qui utilisent " REM " au lieu de " ' ", ou " LET ", sans autre utilité que de pouvoir se relire.

Mais ce n'est peut-être pas trop important puisque tout le monde comprend au premier coup d'oeil.

Par contre, le parseur HTML, je ne connais pas.

@+

Claude
____________________
Omnium populorum gallicorum bravissimi sunt Belgae.

Web    
Le 03/07/2012 à 17h01

Administrateur

Groupe: Administrateur

Inscrit le: 25/09/2010
Messages: 362
Oui, ca depend completement de la personne qui code, je dit juste que je trouve ca mieux mais c'est juste mon point de vu. Par exemple, en C++ avec les String, c'est forcement un +, en Java egalement, mais en PhP, c'est forcement un "." pour la concatenation, vu qu'il n'y a pas de typage statique des variables.

Pour le parser (analysatationnateur? :p ) de Html, tu prends ton code, et au lieu de lui dire directement dans le code source, il va analyser un fichier ecrit dans un certain langage.

Par exemple, le langage choisi serait un derivé de l'html. Ou encore, un langage format xml typé specialement pour cree des interfaces graphiques. Je sais que Qt peut en utiliser un (Qt, celebre farmwork en C++).

Apres, c'est sur que ton code va devenir un chouilla plus complexe ><

Exemple du code a parser:
<body title="Ma fenetre" height="300" width="300">
<p>Un statictext dans une fenetre</p>
</body>

Qui va me creer une fenetre de 300*300 avec pour titre "Ma fenetre" et avec un statictext qui prend tout la place disponnible.

Bon, ma pause est finit.
a+
Cordialement
Jagang
____________________
J'ai toujours raison ! Sauf quand j'ai tort ...

Web    
Le 03/07/2012 à 18h49

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2471
Merci pour l'info...C'est pas croyable ce qu'on peut faire avec des 0 et des 1. :p
____________________
Roro

   
Le 04/07/2012 à 17h07

Administrateur

Groupe: Administrateur

Inscrit le: 25/09/2010
Messages: 362
:p
____________________
J'ai toujours raison ! Sauf quand j'ai tort ...

Web    
Projets open source » MULTI-CONTROL.BAS Générer une série de contrôles avec paramètres  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie