Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Calculatrice spéciale | |
| | Auteur | Message |
---|
Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Calculatrice spéciale Dim 13 Sep 2015 - 22:51 | |
| Bonjour à tous ! Je vous présente mon dernier programme encore destiné à l'agriculture ! - Code:
-
' ------ Calculatrice formule soupe v2.0 ------
DIM Dilution DIM Saisie$ DIM L% DIM A$ DIM N% DIM B DIM i% DIM x% DIM x1% DIM X2% DIM y% DIM Y1% DIM y2% DIM TotalIncorpo DIM Pr$(9) DIM MS(9) DIM In(9) DIM PoidsReel(8) DIM Espace% DIM NbEspaces% DIM LongueurTexte% DIM Objet_Clique%
Pr$(0)="Eau"
LABEL Quitter LABEL SaisieDilution LABEL SaisieProduit LABEL SaisieMatiereSeche LABEL SaisieIncorporation LABEL EffaceColonne LABEL Selection_Champ_Numerique LABEL ToucheEntree LABEL DeplacementFenetre LABEL Selection_Champ_Texte
IF FILE_EXISTS("Formule.dat")=0 x% = 0 y% = 0 Ecriture_fichier() END_IF
FILE_OPEN_READ 1, "Formule.dat"
FOR i% = 0 to 8 FILE_READLN 1, PR$(i%) FILE_READLN 1, MS(i%) FILE_READLN 1, IN(i%) NEXT i%
FILE_READLN 1, Dilution FILE_READLN 1, x% FILE_READLN 1, y%
FILE_CLOSE 1
border_hide 0 LEFT 0, x% TOP 0, y% width 0, 720 height 0, 480 color 0, 200,230,255 Font_name 0, "Arial" FONT_SIZE 0,18
ALPHA 1 TOP 1, 10 LEFT 1, 40 caption 1, "C A L C U L A T R I C E F O R M U L E S O U P E v 2.0 " ON_DOUBLE_CLICK 1, DeplacementFenetre
BUTTON 2 LEFT 2,19 TOP 2, 44 WIDTH 2, 172 HEIGHT 2, 38 CAPTION 2, "Produits" ON_CLICK 2, EffaceColonne
BUTTON 3 LEFT 3, 189 TOP 3, 44 WIDTH 3, 172 HEIGHT 3, 38 CAPTION 3, "% Mat. Sèche" ON_CLICK 3, EffaceColonne
BUTTON 4 LEFT 4, 359 TOP 4, 44 WIDTH 4, 172 HEIGHT 4, 38 CAPTION 4, "% incorpo." ON_CLICK 4, EffaceColonne
BUTTON 5 LEFT 5, 529 TOP 5, 44 WIDTH 5, 172 HEIGHT 5, 38 CAPTION 5, "Poids réel"
rem Colonne 1 PRODUITS
EDIT 6 LEFT 6, 20 TOP 6, 81 WIDTH 6, 170 HEIGHT 6, 36 TEXT 6, " Eau" INACTIVE 6
EDIT 7 LEFT 7, 20 TOP 7, 117 WIDTH 7, 170 HEIGHT 7, 36
EDIT 8 LEFT 8, 20 TOP 8, 153 WIDTH 8, 170 HEIGHT 8, 36
EDIT 9 LEFT 9, 20 TOP 9, 189 WIDTH 9, 170 HEIGHT 9, 36
EDIT 10 LEFT 10, 20 TOP 10, 225 WIDTH 10, 170 HEIGHT 10, 36
EDIT 11 LEFT 11, 20 TOP 11, 261 WIDTH 11, 170 HEIGHT 11, 36
EDIT 12 LEFT 12, 20 TOP 12, 297 WIDTH 12, 170 HEIGHT 12, 36
EDIT 13 LEFT 13, 20 TOP 13, 333 WIDTH 13, 170 HEIGHT 13, 36
EDIT 14 LEFT 14, 20 TOP 14, 369 WIDTH 14, 170 HEIGHT 14, 36
rem Colonne 2 % M.S.
EDIT 15 LEFT 15, 190 TOP 15, 81 WIDTH 15, 170 HEIGHT 15, 36 INACTIVE 15
EDIT 16 LEFT 16, 190 TOP 16, 117 WIDTH 16, 170 HEIGHT 16, 36
EDIT 17 LEFT 17, 190 TOP 17, 153 WIDTH 17, 170 HEIGHT 17, 36
EDIT 18 LEFT 18, 190 TOP 18, 189 WIDTH 18, 170 HEIGHT 18, 36
EDIT 19 LEFT 19, 190 TOP 19, 225 WIDTH 19, 170 HEIGHT 19, 36
EDIT 20 LEFT 20, 190 TOP 20, 261 WIDTH 20, 170 HEIGHT 20, 36
EDIT 21 LEFT 21, 190 TOP 21, 297 WIDTH 21, 170 HEIGHT 21, 36
EDIT 22 LEFT 22, 190 TOP 22, 333 WIDTH 22, 170 HEIGHT 22, 36
EDIT 23 LEFT 23, 190 TOP 23, 369 WIDTH 23, 170 HEIGHT 23, 36
rem Colonne 3 % incorpo.
EDIT 24 LEFT 24, 360 TOP 24, 81 WIDTH 24, 170 HEIGHT 24, 36 INACTIVE 24
EDIT 25 LEFT 25, 360 TOP 25, 117 WIDTH 25, 170 HEIGHT 25, 36
EDIT 26 LEFT 26, 360 TOP 26, 153 WIDTH 26, 170 HEIGHT 26, 36
EDIT 27 LEFT 27, 360 TOP 27, 189 WIDTH 27, 170 HEIGHT 27, 36
EDIT 28 LEFT 28, 360 TOP 28, 225 WIDTH 28, 170 HEIGHT 28, 36
EDIT 29 LEFT 29, 360 TOP 29, 261 WIDTH 29, 170 HEIGHT 29, 36
EDIT 30 LEFT 30, 360 TOP 30, 297 WIDTH 30, 170 HEIGHT 30, 36
EDIT 31 LEFT 31, 360 TOP 31, 333 WIDTH 31, 170 HEIGHT 31, 36
EDIT 32 LEFT 32, 360 TOP 32, 369 WIDTH 32, 170 HEIGHT 32, 36
rem Colonne 4 POIDS REEL
EDIT 33 LEFT 33, 530 TOP 33, 81 WIDTH 33, 170 HEIGHT 33, 36
EDIT 34 LEFT 34, 530 TOP 34, 117 WIDTH 34, 170 HEIGHT 34, 36
EDIT 35 LEFT 35, 530 TOP 35, 153 WIDTH 35, 170 HEIGHT 35, 36
EDIT 36 LEFT 36, 530 TOP 36, 189 WIDTH 36, 170 HEIGHT 36, 36
EDIT 37 LEFT 37, 530 TOP 37, 225 WIDTH 37, 170 HEIGHT 37, 36
EDIT 38 LEFT 38, 530 TOP 38, 261 WIDTH 38, 170 HEIGHT 38, 36
EDIT 39 LEFT 39, 530 TOP 39, 297 WIDTH 39, 170 HEIGHT 39, 36
EDIT 40 LEFT 40, 530 TOP 40, 333 WIDTH 40, 170 HEIGHT 40, 36
EDIT 41 LEFT 41, 530 TOP 41, 369 WIDTH 41, 170 HEIGHT 41, 36
FOR i% = 33 TO 41 INACTIVE i% NEXT i%
REM DERNIERE LIGNE BUTTON 42 LEFT 42, 19 TOP 42, 422 WIDTH 42, 172 HEIGHT 42, 38 CAPTION 42, "Dilution :"
EDIT 43 LEFT 43, 190 TOP 43, 423 WIDTH 43, 70 HEIGHT 43, 36 TEXT 43, Dilution ON_CHANGE 43, SaisieDilution ON_CLICK 43, Selection_Champ_Numerique ON_KEY_DOWN 43, ToucheEntree
ALPHA 44 LEFT 44, 360 TOP 44, 426 WIDTH 44, 180 HEIGHT 44, 36
BUTTON 45 LEFT 45, 601 TOP 45, 422 WIDTH 45, 100 HEIGHT 45, 38 CAPTION 45, "Quitter" ON_CLICK 45, Quitter
Espace% = text_width(" ",1) : ' Calcul longueur d'un espace texte
FOR i% = 1 TO 8 TEXT i%+6, PR$(i%) NEXT i% FOR i% = 1 to 8 TEXT i%+15, MS(i%) TEXT i%+24, IN(i%) NEXT i%
FOR i% = 1 TO 8 ON_CHANGE i% + 6, SaisieProduit ON_CLICK i% +6, Selection_Champ_Texte ON_KEY_DOWN i% + 6, ToucheEntree ON_CHANGE i% + 15, SaisieMatiereSeche ON_CLICK i% +15, Selection_Champ_Numerique ON_KEY_DOWN i% + 15, ToucheEntree ON_CHANGE i% + 24, SaisieIncorporation ON_CLICK i% + 24, Selection_Champ_Numerique ON_KEY_DOWN i% + 24, ToucheEntree NEXT i%
CalculFeuille()
Mise_en_Forme()
END
' ------------------------------------------------------------------------------
Selection_Champ_Numerique: Objet_Clique% = NUMBER_CLICK
Mise_en_Forme()
LongueurTexte% = LEN(TEXT$(Objet_Clique%))
IF LongueurTexte% > 2 AND Objet_Clique% < 33 A$ = LEFT$(TEXT$(Objet_Clique%),LongueurTexte% - 1) ELSE A$ = TEXT$(Objet_Clique%) END_IF B = VAL(A$) TEXT Objet_Clique%, B RETURN
' ------------------------------------------------------------------------------
Selection_Champ_Texte:
Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
SUB Mise_en_Forme()
FOR i% = 7 to 14 OFF_CHANGE i% A$ = PR$(i%-6) IF LEFT$(A$,1) <> " " THEN A$ = " " + A$ TEXT i%, A$ ON_CHANGE i%, SaisieProduit NEXT i%
FOR i% = 16 to 23 OFF_CHANGE i% A$ = STR$(MS(i%-15)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieMatiereSeche NEXT i%
FOR i% = 25 to 32 OFF_CHANGE i% A$ = STR$(IN(i%-24)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieIncorporation NEXT i%
OFF_CHANGE 43 A$ = STR$(Dilution) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((70 - LongueurTexte%)/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ TEXT 43, A$ ON_CHANGE 43, SaisieDilution
END_SUB
' ------------------------------------------------------------------------------
SaisieDilution:
a$=RIGHT$(TEXT$(43),1) IF a$="" THEN Saisie$="0" : TEXT 43, Saisie$: Dilution = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(43)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(43),L%-1),".")<>0 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF a$="." or a$="," THEN TEXT 43, LEFT$(TEXT$(43),L%-1) + "." : CARET_POSITION 43, L% : Saisie$ = text$(43): Dilution = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF LEN(TEXT$(43))=2 AND LEFT$(TEXT$(43),1)="0" THEN Saisie$ = A$ : TEXT 43, Saisie$ Saisie$=LEFT$(TEXT$(43),4) TEXT 43, Saisie$ L%=LEN(TEXT$(43)):CARET_POSITION 43, L% Dilution = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieProduit:
N%=number_change PR$(N%-6)=LEFT$(TEXT$(N%),11) TEXT N%, PR$(N%-6) L%=LEN(TEXT$(N%)):CARET_POSITION N%, L%
RETURN
' ------------------------------------------------------------------------------
SaisieMatiereSeche:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: MS(N%-15) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): MS(N%-15) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% MS(N%-15) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieIncorporation:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: IN(N%-24) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): IN(N%-24) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% IN(N%-24) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
EffaceColonne:
N% = NUMBER_CLICK
IF N% = 2 THEN FOR i%=1 TO 8: PR$(i%)="": TEXT i%+6, PR$(i%): NEXT i%
IF N% = 3 FOR i% = 1 TO 8 OFF_CHANGE i% + 15 MS(i%) = 0 TEXT i% + 15, MS(i%) ON_CHANGE i% + 15, SaisieMatiereSeche NEXT i% END_IF
IF N% = 4 FOR i% = 1 to 8 OFF_CHANGE i% + 24 IN(i%) = 0 TEXT i% + 24, IN(i%) ON_CHANGE i% + 24, SaisieIncorporation NEXT i% END_IF CalculFeuille() Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
ToucheEntree: IF KEY_DOWN_CODE = 13 N% = NUMBER_CLICK INACTIVE N% : ACTIVE N% Mise_en_Forme() END_IF RETURN
' ------------------------------------------------------------------------------
SUB CalculFeuille()
TotalIncorpo = 0 FOR i% = 1 TO 8 TotalIncorpo = TotalIncorpo + IN(i%) NEXT i%
IF TotalIncorpo = 100 THEN A$ = " " + STR$(TotalIncorpo) + " %" IF TotalIncorpo < 100 THEN TotalIncorpo = 100 - TotalIncorpo : A$ = "Manque " + STR$(TotalIncorpo) + " %" IF TotalIncorpo > 100 THEN TotalIncorpo = TotalIncorpo -100 : A$ = "De trop " + STR$(TotalIncorpo) + " %" LongueurTexte% = text_width(A$,1) NbEspaces% = int(((180 - LongueurTexte% )/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ CAPTION 44, A$
FOR i% = 1 TO 8 IF TotalIncorpo = 100 AND MS(i%)>0 PoidsReel(i%)=INT((860000*(IN(i%)/MS(i%))/(1000 + (Dilution * 1000)))+0.5) ELSE PoidsReel(i%)=0 END_IF NEXT i%
FOR i% = 1 TO 8 A$ = STR$(PoidsReel(i%)) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((170 - LongueurTexte% - 65) + 0.5) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g" IF PoidsReel(i%) = 0 TEXT i%+33, " - - -" ELSE TEXT i%+33, A$ END_IF NEXT i%
L% = 0 FOR i% = 1 TO 8 L% = L% + PoidsReel(i%) NEXT i% PoidsReel(0)= 1000-L% IF PoidsReel(0) < 0 COLOR 33, 254,100,100 ELSE COLOR 33, 255,255,255 END_IF A$ = STR$(PoidsReel(0)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 65) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g"
TEXT 33, A$
END_SUB
' ------------------------------------------------------------------------------
DeplacementFenetre:
FONT_COLOR 1, 250,100,100
Off_DOUBLE_CLICK 1
X2% = MOUSE_X_POSITION(1) Y2% = MOUSE_Y_POSITION(1)
REPEAT X1% = MOUSE_X_POSITION(1) Y1% = MOUSE_Y_POSITION(1) x% = x% + X1% - x2% : LEFT 0, x% y% = y% + y1% - y2% : TOP 0, y% UNTIL SCANCODE = 2 or SCANCODE = 27 OR SCANCODE = 13
FONT_COLOR 1, 0,0,0
ON_DOUBLE_CLICK 1, DeplacementFenetre
RETURN
' ------------------------------------------------------------------------------
SUB Ecriture_fichier()
FILE_OPEN_WRITE 1, "Formule.dat"
FOR i% = 0 to 8 FILE_WRITELN 1, PR$(i%) FILE_WRITELN 1, MS(i%) FILE_WRITELN 1, IN(i%) NEXT i%
FILE_WRITELN 1, Dilution FILE_WRITELN 1, x% FILE_WRITELN 1, y% FILE_CLOSE 1
END_SUB
' ------------------------------------------------------------------------------ Quitter:
Ecriture_fichier()
TERMINATE Cette calculatrice permet de quantifier les produits à mélanger pour obtenir 1 kilo d'aliment en fonction de la matière sèche et du pourcentage d'incorporation de chaque produit. Ergonomie :Elle est dessinée pour pouvoir être facilement utilisée sur une tablette ou un téléphone portable... Vivement la version non limitée de Panoramic pour Android ! Particularités : - Les données sont gardées en mémoire. - La fenêtre est repositionnable : Un double clic gauche sur le titre permet d'ancrer la souris au titre. Déplacez la souris à l’endroit souhaité. Clique droit, ESC ou ENTER pour détacher la fenêtre. => La nouvelle position reste en mémoire : au prochain lancement du programme, la fenêtre sera à endroit où vous l'aviez laissée. - Un clic sur le titre d'une colonne permet d'en effacer le contenu. - Toutes les cellules sont formatées. Je vous laisse découvrir. Bugs :- Très rarement, au lancement, la fenêtre est tronquée sur sa partie droite : - Scan_code "se bloque" et renvoie une valeur fixe : par exemple 117 quelle que soit la touche enfoncée. (Merci au Forum qui m'a donné la seule solution : éteindre l'ordinateur et redémarrer). - Très rarement aussi, désordre dans la gestion des objets qui peut altérer le fichier de sauvegarde. Solution : fermer l'application, effacer le fichier "formule.dat" et re-lancer l'application. un nouveau fichier vierge sera créé. - Beep lors de la fermeture du programme. Bug connu depuis longtemps. - Pas vraiment un bug : Beep quand je valide un champ. Merci pour vos remarques. Bonne fin de weekend, Marc | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculatrice spéciale Lun 14 Sep 2015 - 5:02 | |
| Je viens d'ajouter un bouton IMPRIMER nommé "PRINT". Il crée un fichier texte "Formule.txt" et ouvre notepad.exe configuré au préalable en police "COURRIER NEW" - Code:
-
' ------ Calculatrice formule soupe v2.0 ------
DIM Dilution DIM Saisie$ DIM L% DIM A$ DIM N% DIM B DIM i% DIM x% DIM x1% DIM X2% DIM y% DIM Y1% DIM y2% DIM TotalIncorpo DIM Pr$(9) DIM MS(9) DIM In(9) DIM PoidsReel(8) DIM Espace% DIM NbEspaces% DIM LongueurTexte% DIM Objet_Clique%
Pr$(0)="Eau"
LABEL Quitter LABEL SaisieDilution LABEL SaisieProduit LABEL SaisieMatiereSeche LABEL SaisieIncorporation LABEL EffaceColonne LABEL Selection_Champ_Numerique LABEL ToucheEntree LABEL DeplacementFenetre LABEL Selection_Champ_Texte LABEL Impression
IF FILE_EXISTS("Formule.dat")=0 x% = 0 y% = 0 Ecriture_fichier() END_IF
FILE_OPEN_READ 1, "Formule.dat"
FOR i% = 0 to 8 FILE_READLN 1, PR$(i%) FILE_READLN 1, MS(i%) FILE_READLN 1, IN(i%) NEXT i%
FILE_READLN 1, Dilution FILE_READLN 1, x% FILE_READLN 1, y%
FILE_CLOSE 1
border_hide 0 LEFT 0, x% TOP 0, y% width 0, 720 height 0, 480 color 0, 200,230,255 Font_name 0, "Arial" FONT_SIZE 0,18
ALPHA 1 TOP 1, 10 LEFT 1, 40 caption 1, "C A L C U L A T R I C E F O R M U L E S O U P E v 2.0 " ON_DOUBLE_CLICK 1, DeplacementFenetre
BUTTON 2 LEFT 2,19 TOP 2, 44 WIDTH 2, 172 HEIGHT 2, 38 CAPTION 2, "Produits" ON_CLICK 2, EffaceColonne
BUTTON 3 LEFT 3, 189 TOP 3, 44 WIDTH 3, 172 HEIGHT 3, 38 CAPTION 3, "% Mat. Sèche" ON_CLICK 3, EffaceColonne
BUTTON 4 LEFT 4, 359 TOP 4, 44 WIDTH 4, 172 HEIGHT 4, 38 CAPTION 4, "% incorpo." ON_CLICK 4, EffaceColonne
BUTTON 5 LEFT 5, 529 TOP 5, 44 WIDTH 5, 172 HEIGHT 5, 38 CAPTION 5, "Poids réel"
rem Colonne 1 PRODUITS
EDIT 6 LEFT 6, 20 TOP 6, 81 WIDTH 6, 170 HEIGHT 6, 36 TEXT 6, " Eau" INACTIVE 6
EDIT 7 LEFT 7, 20 TOP 7, 117 WIDTH 7, 170 HEIGHT 7, 36
EDIT 8 LEFT 8, 20 TOP 8, 153 WIDTH 8, 170 HEIGHT 8, 36
EDIT 9 LEFT 9, 20 TOP 9, 189 WIDTH 9, 170 HEIGHT 9, 36
EDIT 10 LEFT 10, 20 TOP 10, 225 WIDTH 10, 170 HEIGHT 10, 36
EDIT 11 LEFT 11, 20 TOP 11, 261 WIDTH 11, 170 HEIGHT 11, 36
EDIT 12 LEFT 12, 20 TOP 12, 297 WIDTH 12, 170 HEIGHT 12, 36
EDIT 13 LEFT 13, 20 TOP 13, 333 WIDTH 13, 170 HEIGHT 13, 36
EDIT 14 LEFT 14, 20 TOP 14, 369 WIDTH 14, 170 HEIGHT 14, 36
rem Colonne 2 % M.S.
EDIT 15 LEFT 15, 190 TOP 15, 81 WIDTH 15, 170 HEIGHT 15, 36 INACTIVE 15
EDIT 16 LEFT 16, 190 TOP 16, 117 WIDTH 16, 170 HEIGHT 16, 36
EDIT 17 LEFT 17, 190 TOP 17, 153 WIDTH 17, 170 HEIGHT 17, 36
EDIT 18 LEFT 18, 190 TOP 18, 189 WIDTH 18, 170 HEIGHT 18, 36
EDIT 19 LEFT 19, 190 TOP 19, 225 WIDTH 19, 170 HEIGHT 19, 36
EDIT 20 LEFT 20, 190 TOP 20, 261 WIDTH 20, 170 HEIGHT 20, 36
EDIT 21 LEFT 21, 190 TOP 21, 297 WIDTH 21, 170 HEIGHT 21, 36
EDIT 22 LEFT 22, 190 TOP 22, 333 WIDTH 22, 170 HEIGHT 22, 36
EDIT 23 LEFT 23, 190 TOP 23, 369 WIDTH 23, 170 HEIGHT 23, 36
rem Colonne 3 % incorpo.
EDIT 24 LEFT 24, 360 TOP 24, 81 WIDTH 24, 170 HEIGHT 24, 36 INACTIVE 24
EDIT 25 LEFT 25, 360 TOP 25, 117 WIDTH 25, 170 HEIGHT 25, 36
EDIT 26 LEFT 26, 360 TOP 26, 153 WIDTH 26, 170 HEIGHT 26, 36
EDIT 27 LEFT 27, 360 TOP 27, 189 WIDTH 27, 170 HEIGHT 27, 36
EDIT 28 LEFT 28, 360 TOP 28, 225 WIDTH 28, 170 HEIGHT 28, 36
EDIT 29 LEFT 29, 360 TOP 29, 261 WIDTH 29, 170 HEIGHT 29, 36
EDIT 30 LEFT 30, 360 TOP 30, 297 WIDTH 30, 170 HEIGHT 30, 36
EDIT 31 LEFT 31, 360 TOP 31, 333 WIDTH 31, 170 HEIGHT 31, 36
EDIT 32 LEFT 32, 360 TOP 32, 369 WIDTH 32, 170 HEIGHT 32, 36
rem Colonne 4 POIDS REEL
EDIT 33 LEFT 33, 530 TOP 33, 81 WIDTH 33, 170 HEIGHT 33, 36
EDIT 34 LEFT 34, 530 TOP 34, 117 WIDTH 34, 170 HEIGHT 34, 36
EDIT 35 LEFT 35, 530 TOP 35, 153 WIDTH 35, 170 HEIGHT 35, 36
EDIT 36 LEFT 36, 530 TOP 36, 189 WIDTH 36, 170 HEIGHT 36, 36
EDIT 37 LEFT 37, 530 TOP 37, 225 WIDTH 37, 170 HEIGHT 37, 36
EDIT 38 LEFT 38, 530 TOP 38, 261 WIDTH 38, 170 HEIGHT 38, 36
EDIT 39 LEFT 39, 530 TOP 39, 297 WIDTH 39, 170 HEIGHT 39, 36
EDIT 40 LEFT 40, 530 TOP 40, 333 WIDTH 40, 170 HEIGHT 40, 36
EDIT 41 LEFT 41, 530 TOP 41, 369 WIDTH 41, 170 HEIGHT 41, 36
FOR i% = 33 TO 41 INACTIVE i% NEXT i%
REM DERNIERE LIGNE BUTTON 42 LEFT 42, 19 TOP 42, 422 WIDTH 42, 172 HEIGHT 42, 38 CAPTION 42, "Dilution :"
EDIT 43 LEFT 43, 190 TOP 43, 423 WIDTH 43, 65 HEIGHT 43, 36 TEXT 43, Dilution ON_CHANGE 43, SaisieDilution ON_CLICK 43, Selection_Champ_Numerique ON_KEY_DOWN 43, ToucheEntree
ALPHA 44 LEFT 44, 360 TOP 44, 426 WIDTH 44, 180 HEIGHT 44, 36
BUTTON 45 LEFT 45, 601 TOP 45, 422 WIDTH 45, 100 HEIGHT 45, 38 CAPTION 45, "Quitter" ON_CLICK 45, Quitter
BUTTON 46 LEFT 46, 276 TOP 46, 422 WIDTH 46, 85 HEIGHT 46, 38 CAPTION 46, "Print" ON_CLICK 46, Impression
Espace% = text_width(" ",1) : ' Calcul longueur d'un espace texte
FOR i% = 1 TO 8 TEXT i%+6, PR$(i%) NEXT i% FOR i% = 1 to 8 TEXT i%+15, MS(i%) TEXT i%+24, IN(i%) NEXT i%
FOR i% = 1 TO 8 ON_CHANGE i% + 6, SaisieProduit ON_CLICK i% +6, Selection_Champ_Texte ON_KEY_DOWN i% + 6, ToucheEntree ON_CHANGE i% + 15, SaisieMatiereSeche ON_CLICK i% +15, Selection_Champ_Numerique ON_KEY_DOWN i% + 15, ToucheEntree ON_CHANGE i% + 24, SaisieIncorporation ON_CLICK i% + 24, Selection_Champ_Numerique ON_KEY_DOWN i% + 24, ToucheEntree NEXT i%
CalculFeuille()
Mise_en_Forme()
END
' ------------------------------------------------------------------------------
Selection_Champ_Numerique: Objet_Clique% = NUMBER_CLICK
Mise_en_Forme()
LongueurTexte% = LEN(TEXT$(Objet_Clique%))
IF LongueurTexte% > 2 AND Objet_Clique% < 33 A$ = LEFT$(TEXT$(Objet_Clique%),LongueurTexte% - 1) ELSE A$ = TEXT$(Objet_Clique%) END_IF B = VAL(A$) TEXT Objet_Clique%, B RETURN
' ------------------------------------------------------------------------------
Selection_Champ_Texte:
Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
SUB Mise_en_Forme()
FOR i% = 7 to 14 OFF_CHANGE i% A$ = PR$(i%-6) IF LEFT$(A$,1) <> " " THEN A$ = " " + A$ TEXT i%, A$ ON_CHANGE i%, SaisieProduit NEXT i%
FOR i% = 16 to 23 OFF_CHANGE i% A$ = STR$(MS(i%-15)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieMatiereSeche NEXT i%
FOR i% = 25 to 32 OFF_CHANGE i% A$ = STR$(IN(i%-24)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieIncorporation NEXT i%
OFF_CHANGE 43 A$ = STR$(Dilution) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((70 - LongueurTexte%)/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ TEXT 43, A$ ON_CHANGE 43, SaisieDilution
END_SUB
' ------------------------------------------------------------------------------
SaisieDilution:
a$=RIGHT$(TEXT$(43),1) IF a$="" THEN Saisie$="0" : TEXT 43, Saisie$: Dilution = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(43)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(43),L%-1),".")<>0 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF a$="." or a$="," THEN TEXT 43, LEFT$(TEXT$(43),L%-1) + "." : CARET_POSITION 43, L% : Saisie$ = text$(43): Dilution = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF LEN(TEXT$(43))=2 AND LEFT$(TEXT$(43),1)="0" THEN Saisie$ = A$ : TEXT 43, Saisie$ Saisie$=LEFT$(TEXT$(43),4) TEXT 43, Saisie$ L%=LEN(TEXT$(43)):CARET_POSITION 43, L% Dilution = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieProduit:
N%=number_change PR$(N%-6)=LEFT$(TEXT$(N%),11) TEXT N%, PR$(N%-6) L%=LEN(TEXT$(N%)):CARET_POSITION N%, L%
RETURN
' ------------------------------------------------------------------------------
SaisieMatiereSeche:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: MS(N%-15) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): MS(N%-15) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% MS(N%-15) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieIncorporation:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: IN(N%-24) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): IN(N%-24) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% IN(N%-24) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
EffaceColonne:
N% = NUMBER_CLICK
IF N% = 2 THEN FOR i%=1 TO 8: PR$(i%)="": TEXT i%+6, PR$(i%): NEXT i%
IF N% = 3 FOR i% = 1 TO 8 OFF_CHANGE i% + 15 MS(i%) = 0 TEXT i% + 15, MS(i%) ON_CHANGE i% + 15, SaisieMatiereSeche NEXT i% END_IF
IF N% = 4 FOR i% = 1 to 8 OFF_CHANGE i% + 24 IN(i%) = 0 TEXT i% + 24, IN(i%) ON_CHANGE i% + 24, SaisieIncorporation NEXT i% END_IF CalculFeuille() Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
ToucheEntree: IF KEY_DOWN_CODE = 13 N% = NUMBER_CLICK INACTIVE N% : ACTIVE N% Mise_en_Forme() END_IF RETURN
' ------------------------------------------------------------------------------
SUB CalculFeuille()
TotalIncorpo = 0 FOR i% = 1 TO 8 TotalIncorpo = TotalIncorpo + IN(i%) NEXT i%
IF TotalIncorpo = 100 THEN A$ = " " + STR$(TotalIncorpo) + " %" IF TotalIncorpo < 100 THEN TotalIncorpo = 100 - TotalIncorpo : A$ = "Manque " + STR$(TotalIncorpo) + " %" IF TotalIncorpo > 100 THEN TotalIncorpo = TotalIncorpo -100 : A$ = "De trop " + STR$(TotalIncorpo) + " %" LongueurTexte% = text_width(A$,1) NbEspaces% = int(((180 - LongueurTexte% )/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ CAPTION 44, A$
FOR i% = 1 TO 8 IF TotalIncorpo = 100 AND MS(i%)>0 PoidsReel(i%)=INT((860000*(IN(i%)/MS(i%))/(1000 + (Dilution * 1000)))+0.5) ELSE PoidsReel(i%)=0 END_IF NEXT i%
FOR i% = 1 TO 8 A$ = STR$(PoidsReel(i%)) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((170 - LongueurTexte% - 65) + 0.5) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g" IF PoidsReel(i%) = 0 TEXT i%+33, " - - -" ELSE TEXT i%+33, A$ END_IF NEXT i%
L% = 0 FOR i% = 1 TO 8 L% = L% + PoidsReel(i%) NEXT i% PoidsReel(0)= 1000-L% IF PoidsReel(0) < 0 COLOR 33, 254,100,100 ELSE COLOR 33, 255,255,255 END_IF A$ = STR$(PoidsReel(0)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 65) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g"
TEXT 33, A$
END_SUB
' ------------------------------------------------------------------------------
DeplacementFenetre:
FONT_COLOR 1, 250,100,100
Off_DOUBLE_CLICK 1
X2% = MOUSE_X_POSITION(1) Y2% = MOUSE_Y_POSITION(1)
REPEAT X1% = MOUSE_X_POSITION(1) Y1% = MOUSE_Y_POSITION(1) x% = x% + X1% - x2% : LEFT 0, x% y% = y% + y1% - y2% : TOP 0, y% UNTIL SCANCODE = 2 or SCANCODE = 27 OR SCANCODE = 13
FONT_COLOR 1, 0,0,0
ON_DOUBLE_CLICK 1, DeplacementFenetre
RETURN
' ------------------------------------------------------------------------------
SUB Ecriture_fichier()
FILE_OPEN_WRITE 1, "Formule.dat"
FOR i% = 0 to 8 FILE_WRITELN 1, PR$(i%) FILE_WRITELN 1, MS(i%) FILE_WRITELN 1, IN(i%) NEXT i%
FILE_WRITELN 1, Dilution FILE_WRITELN 1, x% FILE_WRITELN 1, y% FILE_CLOSE 1
END_SUB
' ------------------------------------------------------------------------------
Impression: Imprimer() RETURN
' ------------------------------------------------------------------------------
SUB Imprimer() DIM_LOCAL Imp$(8,4)
FOR i% = 0 to 8 L% = LEN(PR$(i%)) IMP$(i%,0) = " " + PR$(i%) + STRING$(15-L%," ") A$ = STR$(MS(i%)) L% = LEN(A$) IMP$(i%,1) = STRING$(10-L%," ") + A$ +" %" A$ = STR$(IN(i%)) L% = LEN(A$) IMP$(i%,2) = STRING$(10-L%," ") + A$ +" %" A$ = STR$(PoidsReel(i%)) L% = LEN(A$) IMP$(i%,3) = STRING$(10-L%," ") + A$ +" g" IMP$(i%,4) = IMP$(i%,0)+IMP$(i%,1)+IMP$(i%,2)+IMP$(i%,3) NEXT i% FILE_OPEN_WRITE 2, "Formule.txt"
FILE_WRITELN 2, " " + DATE$ + " " + TIME$ FILE_WRITELN 2, "" FILE_WRITELN 2, " PRODUIT MAT.SECHE INCORPO POIDS REEL" FILE_WRITELN 2, ""
FOR i% = 0 to 8 FILE_WRITELN 2, IMP$(i%,4) FILE_WRITELN 2, "" NEXT i%
A$ = STR$(Dilution) FILE_WRITELN 2, " Dilution : " + A$
FILE_CLOSE 2
EXECUTE "notepad.exe d:\Panoramic\Formule.txt"
END_SUB
' ------------------------------------------------------------------------------ Quitter:
Ecriture_fichier()
TERMINATE Bonne nuit ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Calculatrice spéciale Lun 14 Sep 2015 - 9:13 | |
| Bonjour Marc Je viens de tester. 1) il faut, au préalable, enregistrer le code dans un dossier, sinon çà ne marche pas. 2) J'ai eu le bug (plusieurs fois), celui que tu as signalé plus haut, la partie droite de FORM 0 est tronquée. Sinon, j'ai rempli les cases à l'aveuglette, vu que je ne comprend pas le programme. J'ai regardé la déclaration des objets: je ne vois pas d'erreur. A part que je trouve curieux TOP 0,y% et pareil pour LEFT 0,x% pourquoi pas une valeur fixe ?
Je ne peux pas en dire beaucoup plus, on est dans un domaine particulier.
A+
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculatrice spéciale Lun 14 Sep 2015 - 10:08 | |
| Bonjour Jean-Claude, Merci d'avoir fait le test. - Citation :
- TOP 0,y% et pareil pour LEFT 0,x% pourquoi pas une valeur fixe ?
=> Ce sont des variables et non des constantes : la fenêtre est repositionnable : Un double clic gauche sur le titre permet d'ancrer la souris au titre. Déplace la souris à l’endroit souhaité. Clique droit, ESC ou ENTER pour détacher la fenêtre. La nouvelle position reste en mémoire : au prochain lancement du programme, la fenêtre sera à endroit où tu l'avais laissée. Ces deux variables sont mémorisées dans le fichier "formule.dat" qui est créé. Pour le FORM 0 qui est parfois tronqué, j'ai essayé d'ajouter DISPLAY à différents endroits mais rien n' y fait. De plus, ce matin, j'ai essayé entre 10 et 20 fois de lancer le programme : pas de problème ! Quant au fonctionnement du programme, il faut que la somme de la colonne %incorporation soit égale à 100 pour pouvoir déclencher le calcul des quantités. Tu as l'exemple sur la première photo. Bonne programmation ! Marc | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Calculatrice spéciale Lun 14 Sep 2015 - 10:34 | |
| OK pour le déplacement de la fenêtre, je n'avais pas remarqué. - Citation :
- Pour le FORM 0 qui est parfois tronqué, j'ai essayé d'ajouter DISPLAY à différents endroits mais rien n' y fait. De plus, ce matin, j'ai essayé entre 10 et 20 fois de lancer le programme : pas de problème !
J'ai remarqué que tu déclares WIDTH et HEIGHT pour FORM 0 après BORDER_HIDE. Personnellement je commence toujours par donner les dimensions d'un objet avant tout autres commandes, çà me parait plus logique. Néanmoins je ne pense pas que le bug vienne de ça. A+ | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculatrice spéciale Mer 16 Sep 2015 - 9:27 | |
| Bonjour à tous, J’ai remanié la structure de mon programme pour plus de lisibilité, du moins je l’espère. J’ai suivi les conseils de Jean-Claude en plaçant le WIDTH et HEIGHT du FORM 0 avant BORDER_HIDE pour tenter d’éradiquer le bug à l’affichage du FORM 0. Pour l’instant je ne l’ai pas re-constaté. - Code:
-
' ------ Calculatrice formule soupe v2.0 ------
Declarations()
Lecture_Fichier() Affichage_Masque()
Espace% = text_width(" ",1) : ' Calcul longueur d'un espace texte
Affichage_donnees()
Evenements()
CalculFeuille()
Mise_en_Forme()
END
' ------------------------------------------------------------------------------
SUB Evenements() ON_DOUBLE_CLICK 1, DeplacementFenetre ON_CLICK 2, EffaceColonne ON_CLICK 3, EffaceColonne ON_CLICK 4, EffaceColonne ON_CHANGE 43, SaisieDilution ON_CLICK 43, Selection_Champ_Numerique ON_KEY_DOWN 43, ToucheEntree ON_CLICK 45, Quitter ON_CLICK 46, Impression
FOR i% = 1 TO 8 ON_CHANGE i% + 6, SaisieProduit ON_CLICK i% +6, Selection_Champ_Texte ON_KEY_DOWN i% + 6, ToucheEntree ON_CHANGE i% + 15, SaisieMatiereSeche ON_CLICK i% +15, Selection_Champ_Numerique ON_KEY_DOWN i% + 15, ToucheEntree ON_CHANGE i% + 24, SaisieIncorporation ON_CLICK i% + 24, Selection_Champ_Numerique ON_KEY_DOWN i% + 24, ToucheEntree NEXT i%
END_SUB ' ------------------------------------------------------------------------------
Selection_Champ_Numerique: Objet_Clique% = NUMBER_CLICK
Mise_en_Forme()
LongueurTexte% = LEN(TEXT$(Objet_Clique%))
IF LongueurTexte% > 2 AND Objet_Clique% < 33 A$ = LEFT$(TEXT$(Objet_Clique%),LongueurTexte% - 1) ELSE A$ = TEXT$(Objet_Clique%) END_IF B = VAL(A$) TEXT Objet_Clique%, B RETURN
' ------------------------------------------------------------------------------
Selection_Champ_Texte:
Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
SUB Mise_en_Forme()
FOR i% = 7 to 14 OFF_CHANGE i% A$ = PR$(i%-6) IF LEFT$(A$,1) <> " " THEN A$ = " " + A$ TEXT i%, A$ ON_CHANGE i%, SaisieProduit NEXT i%
FOR i% = 16 to 23 OFF_CHANGE i% A$ = STR$(MS(i%-15)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieMatiereSeche NEXT i%
FOR i% = 25 to 32 OFF_CHANGE i% A$ = STR$(IN(i%-24)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 70)/ Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " %" TEXT i%, A$ ON_CHANGE i%, SaisieIncorporation NEXT i%
OFF_CHANGE 43 A$ = STR$(Dilution) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((70 - LongueurTexte%)/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ TEXT 43, A$ ON_CHANGE 43, SaisieDilution
END_SUB
' ------------------------------------------------------------------------------
SaisieDilution:
a$=RIGHT$(TEXT$(43),1) IF a$="" THEN Saisie$="0" : TEXT 43, Saisie$: Dilution = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(43)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(43),L%-1),".")<>0 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF a$="." or a$="," THEN TEXT 43, LEFT$(TEXT$(43),L%-1) + "." : CARET_POSITION 43, L% : Saisie$ = text$(43): Dilution = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT 43, LEFT$(TEXT$(43),L%-1) : CARET_POSITION 43, L% : RETURN IF LEN(TEXT$(43))=2 AND LEFT$(TEXT$(43),1)="0" THEN Saisie$ = A$ : TEXT 43, Saisie$ Saisie$=LEFT$(TEXT$(43),4) TEXT 43, Saisie$ L%=LEN(TEXT$(43)):CARET_POSITION 43, L% Dilution = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieProduit:
N%=number_change PR$(N%-6)=LEFT$(TEXT$(N%),11) TEXT N%, PR$(N%-6) L%=LEN(TEXT$(N%)):CARET_POSITION N%, L%
RETURN
' ------------------------------------------------------------------------------
SaisieMatiereSeche:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: MS(N%-15) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): MS(N%-15) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% MS(N%-15) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
SaisieIncorporation:
N%=NUMBER_CHANGE a$=RIGHT$(TEXT$(N%),1) IF a$="" THEN Saisie$="0" : TEXT N%, Saisie$: IN(N%-24) = val(Saisie$) : CalculFeuille() : RETURN L%=LEN(TEXT$(N%)) IF A$ = "." OR A$ = "," and INSTR(LEFT$(TEXT$(n%),L%-1),".")<>0 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF a$="." or a$="," THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) + "." : CARET_POSITION N%, L% : Saisie$ = text$(n%): IN(N%-24) = val(Saisie$): CalculFeuille() : RETURN IF ASC(a$)<48 or ASC(a$)>57 THEN TEXT N%, LEFT$(TEXT$(N%),L%-1) : CARET_POSITION N%, L% : RETURN IF LEN(TEXT$(N%))=2 AND LEFT$(TEXT$(N%),1)="0" THEN Saisie$ = A$ : TEXT n%, Saisie$ Saisie$=LEFT$(TEXT$(N%),5) TEXT N%, Saisie$ L%=LEN(TEXT$(N%)):CARET_POSITION N%, L% IN(N%-24) = val(Saisie$) CalculFeuille()
RETURN
' ------------------------------------------------------------------------------
EffaceColonne:
N% = NUMBER_CLICK
IF N% = 2 THEN FOR i%=1 TO 8: PR$(i%)="": TEXT i%+6, PR$(i%): NEXT i%
IF N% = 3 FOR i% = 1 TO 8 OFF_CHANGE i% + 15 MS(i%) = 0 TEXT i% + 15, MS(i%) ON_CHANGE i% + 15, SaisieMatiereSeche NEXT i% END_IF
IF N% = 4 FOR i% = 1 to 8 OFF_CHANGE i% + 24 IN(i%) = 0 TEXT i% + 24, IN(i%) ON_CHANGE i% + 24, SaisieIncorporation NEXT i% END_IF CalculFeuille() Mise_en_Forme()
RETURN
' ------------------------------------------------------------------------------
ToucheEntree: IF KEY_DOWN_CODE = 13 N% = NUMBER_CLICK INACTIVE N% : ACTIVE N% Mise_en_Forme() END_IF RETURN
' ------------------------------------------------------------------------------
SUB CalculFeuille()
TotalIncorpo = 0 FOR i% = 1 TO 8 TotalIncorpo = TotalIncorpo + IN(i%) NEXT i%
IF TotalIncorpo = 100 THEN A$ = " " + STR$(TotalIncorpo) + " %" IF TotalIncorpo < 100 THEN TotalIncorpo = 100 - TotalIncorpo : A$ = "Manque " + STR$(TotalIncorpo) + " %" IF TotalIncorpo > 100 THEN TotalIncorpo = TotalIncorpo -100 : A$ = "De trop " + STR$(TotalIncorpo) + " %" LongueurTexte% = text_width(A$,1) NbEspaces% = int(((180 - LongueurTexte% )/Espace%)/2) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ CAPTION 44, A$
FOR i% = 1 TO 8 IF TotalIncorpo = 100 AND MS(i%)>0 PoidsReel(i%)=INT((860000*(IN(i%)/MS(i%))/(1000 + (Dilution * 1000)))+0.5) ELSE PoidsReel(i%)=0 END_IF NEXT i%
FOR i% = 1 TO 8 A$ = STR$(PoidsReel(i%)) LongueurTexte% = text_width(A$,1) NbEspaces% = int(((170 - LongueurTexte% - 65) + 0.5) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g" IF PoidsReel(i%) = 0 TEXT i%+33, " - - -" ELSE TEXT i%+33, A$ END_IF NEXT i%
L% = 0 FOR i% = 1 TO 8 L% = L% + PoidsReel(i%) NEXT i% PoidsReel(0)= 1000-L% IF PoidsReel(0) < 0 COLOR 33, 254,100,100 ELSE COLOR 33, 255,255,255 END_IF A$ = STR$(PoidsReel(0)) LongueurTexte% = text_width(A$,1) NbEspaces% = int((170 - LongueurTexte% - 65) / Espace%) IF NbEspaces% > 0 then A$ = string$(NbEspaces%," ") + A$ + " g"
TEXT 33, A$
END_SUB
' ------------------------------------------------------------------------------
DeplacementFenetre:
FONT_COLOR 1, 250,100,100
Off_DOUBLE_CLICK 1
X2% = MOUSE_X_POSITION(1) Y2% = MOUSE_Y_POSITION(1)
REPEAT X1% = MOUSE_X_POSITION(1) Y1% = MOUSE_Y_POSITION(1) x% = x% + X1% - x2% : LEFT 0, x% y% = y% + y1% - y2% : TOP 0, y% UNTIL SCANCODE = 2 or SCANCODE = 27 OR SCANCODE = 13
FONT_COLOR 1, 0,0,0
ON_DOUBLE_CLICK 1, DeplacementFenetre
RETURN
' ------------------------------------------------------------------------------
SUB Ecriture_fichier()
FILE_OPEN_WRITE 1, "Formule.dat"
FOR i% = 0 to 8 FILE_WRITELN 1, PR$(i%) FILE_WRITELN 1, MS(i%) FILE_WRITELN 1, IN(i%) NEXT i%
FILE_WRITELN 1, Dilution FILE_WRITELN 1, x% FILE_WRITELN 1, y% FILE_CLOSE 1
END_SUB
' ------------------------------------------------------------------------------
Impression: Imprimer() RETURN
' ------------------------------------------------------------------------------
SUB Imprimer() DIM_LOCAL Imp$(8,4)
FOR i% = 0 to 8 L% = LEN(PR$(i%)) IMP$(i%,0) = " " + PR$(i%) + STRING$(15-L%," ") A$ = STR$(MS(i%)) L% = LEN(A$) IMP$(i%,1) = STRING$(10-L%," ") + A$ +" %" A$ = STR$(IN(i%)) L% = LEN(A$) IMP$(i%,2) = STRING$(10-L%," ") + A$ +" %" A$ = STR$(PoidsReel(i%)) L% = LEN(A$) IMP$(i%,3) = STRING$(10-L%," ") + A$ +" g" IMP$(i%,4) = IMP$(i%,0)+IMP$(i%,1)+IMP$(i%,2)+IMP$(i%,3) NEXT i% FILE_OPEN_WRITE 2, "Formule.txt"
FILE_WRITELN 2, " " + DATE$ + " " + TIME$ FILE_WRITELN 2, "" FILE_WRITELN 2, " PRODUIT MAT.SECHE INCORPO POIDS REEL" FILE_WRITELN 2, ""
FOR i% = 0 to 8 FILE_WRITELN 2, IMP$(i%,4) FILE_WRITELN 2, "" NEXT i%
A$ = STR$(Dilution) FILE_WRITELN 2, " Dilution : " + A$
FILE_CLOSE 2
EXECUTE "notepad.exe d:\Panoramic\Formule.txt"
END_SUB
' ------------------------------------------------------------------------------
SUB Declarations() DIM Dilution DIM Saisie$ DIM L% DIM A$ DIM N% DIM B DIM i% DIM x% DIM x1% DIM X2% DIM y% DIM Y1% DIM y2% DIM TotalIncorpo DIM Pr$(9) DIM MS(9) DIM In(9) DIM PoidsReel(8) DIM Espace% DIM NbEspaces% DIM LongueurTexte% DIM Objet_Clique%
LABEL Quitter LABEL SaisieDilution LABEL SaisieProduit LABEL SaisieMatiereSeche LABEL SaisieIncorporation LABEL EffaceColonne LABEL Selection_Champ_Numerique LABEL ToucheEntree LABEL DeplacementFenetre LABEL Selection_Champ_Texte LABEL Impression
Pr$(0)="Eau"
END_SUB
' ------------------------------------------------------------------------------
SUB Lecture_Fichier()
IF FILE_EXISTS("Formule.dat")=0 x% = 0 y% = 0 Ecriture_fichier() END_IF
FILE_OPEN_READ 1, "Formule.dat"
FOR i% = 0 to 8 FILE_READLN 1, PR$(i%) FILE_READLN 1, MS(i%) FILE_READLN 1, IN(i%) NEXT i%
FILE_READLN 1, Dilution FILE_READLN 1, x% FILE_READLN 1, y%
FILE_CLOSE 1
END_SUB ' ------------------------------------------------------------------------------
SUB Affichage_Masque()
width 0, 720 height 0, 480 LEFT 0, x% TOP 0, y% border_hide 0 color 0, 200,230,255 Font_name 0, "Arial" FONT_SIZE 0,18
ALPHA 1 TOP 1, 10 LEFT 1, 40 caption 1, "C A L C U L A T R I C E F O R M U L E S O U P E v 2.0 "
BUTTON 2 LEFT 2,19 TOP 2, 44 WIDTH 2, 172 HEIGHT 2, 38 CAPTION 2, "Produits"
BUTTON 3 LEFT 3, 189 TOP 3, 44 WIDTH 3, 172 HEIGHT 3, 38 CAPTION 3, "% Mat. Sèche"
BUTTON 4 LEFT 4, 359 TOP 4, 44 WIDTH 4, 172 HEIGHT 4, 38 CAPTION 4, "% incorpo."
BUTTON 5 LEFT 5, 529 TOP 5, 44 WIDTH 5, 172 HEIGHT 5, 38 CAPTION 5, "Poids réel"
rem Colonne 1 PRODUITS
EDIT 6 LEFT 6, 20 TOP 6, 81 WIDTH 6, 170 HEIGHT 6, 36 TEXT 6, " Eau"
EDIT 7 LEFT 7, 20 TOP 7, 117 WIDTH 7, 170 HEIGHT 7, 36
EDIT 8 LEFT 8, 20 TOP 8, 153 WIDTH 8, 170 HEIGHT 8, 36
EDIT 9 LEFT 9, 20 TOP 9, 189 WIDTH 9, 170 HEIGHT 9, 36
EDIT 10 LEFT 10, 20 TOP 10, 225 WIDTH 10, 170 HEIGHT 10, 36
EDIT 11 LEFT 11, 20 TOP 11, 261 WIDTH 11, 170 HEIGHT 11, 36
EDIT 12 LEFT 12, 20 TOP 12, 297 WIDTH 12, 170 HEIGHT 12, 36
EDIT 13 LEFT 13, 20 TOP 13, 333 WIDTH 13, 170 HEIGHT 13, 36
EDIT 14 LEFT 14, 20 TOP 14, 369 WIDTH 14, 170 HEIGHT 14, 36
rem Colonne 2 % M.S.
EDIT 15 LEFT 15, 190 TOP 15, 81 WIDTH 15, 170 HEIGHT 15, 36
EDIT 16 LEFT 16, 190 TOP 16, 117 WIDTH 16, 170 HEIGHT 16, 36
EDIT 17 LEFT 17, 190 TOP 17, 153 WIDTH 17, 170 HEIGHT 17, 36
EDIT 18 LEFT 18, 190 TOP 18, 189 WIDTH 18, 170 HEIGHT 18, 36
EDIT 19 LEFT 19, 190 TOP 19, 225 WIDTH 19, 170 HEIGHT 19, 36
EDIT 20 LEFT 20, 190 TOP 20, 261 WIDTH 20, 170 HEIGHT 20, 36
EDIT 21 LEFT 21, 190 TOP 21, 297 WIDTH 21, 170 HEIGHT 21, 36
EDIT 22 LEFT 22, 190 TOP 22, 333 WIDTH 22, 170 HEIGHT 22, 36
EDIT 23 LEFT 23, 190 TOP 23, 369 WIDTH 23, 170 HEIGHT 23, 36
rem Colonne 3 % incorpo.
EDIT 24 LEFT 24, 360 TOP 24, 81 WIDTH 24, 170 HEIGHT 24, 36
EDIT 25 LEFT 25, 360 TOP 25, 117 WIDTH 25, 170 HEIGHT 25, 36
EDIT 26 LEFT 26, 360 TOP 26, 153 WIDTH 26, 170 HEIGHT 26, 36
EDIT 27 LEFT 27, 360 TOP 27, 189 WIDTH 27, 170 HEIGHT 27, 36
EDIT 28 LEFT 28, 360 TOP 28, 225 WIDTH 28, 170 HEIGHT 28, 36
EDIT 29 LEFT 29, 360 TOP 29, 261 WIDTH 29, 170 HEIGHT 29, 36
EDIT 30 LEFT 30, 360 TOP 30, 297 WIDTH 30, 170 HEIGHT 30, 36
EDIT 31 LEFT 31, 360 TOP 31, 333 WIDTH 31, 170 HEIGHT 31, 36
EDIT 32 LEFT 32, 360 TOP 32, 369 WIDTH 32, 170 HEIGHT 32, 36
rem Colonne 4 POIDS REEL
EDIT 33 LEFT 33, 530 TOP 33, 81 WIDTH 33, 170 HEIGHT 33, 36
EDIT 34 LEFT 34, 530 TOP 34, 117 WIDTH 34, 170 HEIGHT 34, 36
EDIT 35 LEFT 35, 530 TOP 35, 153 WIDTH 35, 170 HEIGHT 35, 36
EDIT 36 LEFT 36, 530 TOP 36, 189 WIDTH 36, 170 HEIGHT 36, 36
EDIT 37 LEFT 37, 530 TOP 37, 225 WIDTH 37, 170 HEIGHT 37, 36
EDIT 38 LEFT 38, 530 TOP 38, 261 WIDTH 38, 170 HEIGHT 38, 36
EDIT 39 LEFT 39, 530 TOP 39, 297 WIDTH 39, 170 HEIGHT 39, 36
EDIT 40 LEFT 40, 530 TOP 40, 333 WIDTH 40, 170 HEIGHT 40, 36
EDIT 41 LEFT 41, 530 TOP 41, 369 WIDTH 41, 170 HEIGHT 41, 36
REM DERNIERE LIGNE
BUTTON 42 LEFT 42, 19 TOP 42, 422 WIDTH 42, 172 HEIGHT 42, 38 CAPTION 42, "Dilution :"
EDIT 43 LEFT 43, 190 TOP 43, 423 WIDTH 43, 65 HEIGHT 43, 36 TEXT 43, Dilution
ALPHA 44 LEFT 44, 360 TOP 44, 426 WIDTH 44, 180 HEIGHT 44, 36
BUTTON 45 LEFT 45, 601 TOP 45, 422 WIDTH 45, 100 HEIGHT 45, 38 CAPTION 45, "Quitter"
BUTTON 46 LEFT 46, 276 TOP 46, 422 WIDTH 46, 85 HEIGHT 46, 38 CAPTION 46, "Print"
INACTIVE 6 INACTIVE 15 INACTIVE 24
FOR i% = 33 TO 41 INACTIVE i% NEXT i%
END_SUB
' ------------------------------------------------------------------------------
SUB Affichage_donnees()
FOR i% = 1 TO 8 TEXT i%+6, PR$(i%) NEXT i%
FOR i% = 1 to 8 TEXT i%+15, MS(i%) TEXT i%+24, IN(i%) NEXT i% END_SUB
' ------------------------------------------------------------------------------ Quitter:
Ecriture_fichier()
TERMINATE La fonction "imprimer" me pose problème : le chemin est fixe pour que NOTEPAD trouve le fichier texte à imprimer. Dans mon cas, en ligne 382, c’est d:\Panoramic\Formule.txt". Je ne trouve pas d’astuce pour avoir une détection automatique du répertoire d’installation. Avez-vous une idée ? Merci et bonne programmation ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Calculatrice spéciale Mer 16 Sep 2015 - 11:28 | |
| Ce n'est pas compliqué. A la création du fichier, tu mets le chemin suivant: - Code:
-
dim f$ f$ = param_value$(0) f$ = file_extract_path$(f$) f$ = f$ + "MonFichier.txt" J'ai décomposé exprès en 3 lignes pour plus de clarté, mais tu peux simplifier... Tu utilises alors ce nom de fichier pour le passer à NotePad, et éventuellement pour le supprimer. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Calculatrice spéciale Mer 16 Sep 2015 - 21:52 | |
| Merci Klaus !
Effectivement ce n'est pas compliqué. Je passe à la pratique dès ce soir.
Bonne soirée ! | |
| | | Contenu sponsorisé
| Sujet: Re: Calculatrice spéciale | |
| |
| | | | Calculatrice spéciale | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |