FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Problème de compilateur.
par Pedro Alvarez Hier à 20:01

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par Pedro Alvarez Hier à 19:54

» Pb 17 (en analyse): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» Compilateur FBPano
par Mike Jeu 17 Aoû 2017 - 13:52

» un nouveau editeur panobasic
par Jean Claude Jeu 17 Aoû 2017 - 10:18

» Le compilateur.
par Pedro Alvarez Jeu 17 Aoû 2017 - 8:36

» Pb 16 (en analyse): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (en analyse): TIMER_ON plante à l'exécution
par Jack Mer 16 Aoû 2017 - 19:58

» KGF_dll - nouvelles versions
par Yannick Dim 13 Aoû 2017 - 17:35

» probleme d'outil
par Yannick Dim 13 Aoû 2017 - 17:32

» Carte de France des régions
par Yannick Sam 12 Aoû 2017 - 21:33

» Pb 14 (en analyse): PRINT_LOCATE plante à l'exécution
par Jack Ven 11 Aoû 2017 - 22:37

» Petit avertissement [Mots réservés]
par papydall Ven 11 Aoû 2017 - 13:45

» Distances sur plan
par JL35 Jeu 10 Aoû 2017 - 21:29

» Tracé : Triangle, Carrée, Dents de scie, Sinusoïde redressée
par papydall Jeu 10 Aoû 2017 - 14:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2017
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Calculette Décimal/Hexa sous forme de Sub

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Calculette Décimal/Hexa sous forme de Sub   Mar 4 Juin 2013 - 1:45

J'ai revu ma petite calculette hexa pour la rendre indépendante, sous forme de sub, donc à joindre à n'importe quel programme.
Seule contrainte: on passe en paramètre un numéro d'objet libre, la sub va utiliser ce numéro et les 25 numéros suivants.
On passe également en paramètres les coordonnées x et y de l'emplacement désiré de la calculette sur le Form 0.
La Sub (un peu longue, mais on n'a rien sans rien) inclut un sous-programme qui gère les événements 'appui de touches'.

Avec ci-dessous un exemple sommaire d'utilisation:
Code:

Calcul_Hexa(100,50,70): ' calculette: objets 100 à 125, en position 50,70
END
' =======================================================
SUB Calcul_Hexa(P,x,y)
' calculette hexadécimal ou décimal
' Paramètres: P = 1er de 26 objets consécutifs de P à P+25, x,y = emplacement
DIM_LOCAL n, xc, yc, yd, xd, ax$, wa%, lb: lb = 30
IF VARIABLE("Calcul_id")=0
    ' Variables/labels globales: on n'a pas le choix, il faut gérer des événements.
    LABEL Calcul_click, Calcul_val: ' sous-programmes inclus
    DIM Calcul_id: Calcul_id = P
    DIM Calcul_valp, Calcul_ope
    DIM Cal_i%, Cal_hx%, Cal_x, Cal_y, Cal_vl, Cal_vi, Cal_va$, lab$(5,3)
    DATA "Calculatrice_data"
    DATA "D","E","F","hd","A","B","C"," /","7","8","9","x"
    DATA "4","5","6","-","1","2","3","+","C","0",CHR$(7),"="
    ' on pointe sur les bons datas
    RESTORE: READ lab$(0,0)
    WHILE lab$(0,0)<>"Calculatrice_data": READ lab$(0,0): END_WHILE
    FORM P: TOP P,y: LEFT P,x: WIDTH P,160: HEIGHT P,290: BORDER_SMALL P
    COLOR P,255,164,128: ' HIDE P
    n = P + 1
    LIST n: PARENT n,P: TOP n,0: WIDTH n,WIDTH(P)-16: HEIGHT n,25
    COLOR n,200,200,200: FONT_NAME n,"Lucida Console": FONT_SIZE n,14
    n = n + 1: yd = 30: xd = 5
    FOR yc = 0 TO 5
        FOR xc = 0 TO 3
            PICTURE n: PARENT n,P: TOP n,yd+(lb+5)*yc: LEFT n,xd+(lb+5)*xc
            WIDTH n,lb: HEIGHT n,lb
            READ lab$(yc,xc)
            2D_TARGET_IS n: COLOR n,128,128,128: 2D_FILL_COLOR 128,128,128
            IF xc = 0 AND yc = 5
                COLOR n,164,0,0: 2D_FILL_COLOR 164,0,0
            ELSE
                IF xc = 3 AND yc = 0
                    COLOR n,0,128,0: 2D_FILL_COLOR 0,128,0
                ELSE
                    IF xc = 3 OR (xc=2 AND yc=5)
                        COLOR n,80,80,80: 2D_FILL_COLOR 80,80,80
                    END_IF
                END_IF
            END_IF
            PRINT_TARGET_IS n
            FONT_COLOR n,255,255,255: FONT_SIZE n,18: FONT_BOLD n
            ax$ = lab$(yc,xc): wa% = TEXT_WIDTH(ax$,n)
            PRINT_LOCATE (lb-wa%)/2,0: PRINT lab$(yc,xc)
            2D_PEN_WIDTH 3: 2D_LINE lb-2,1,lb-2,lb-2: 2D_POLY_TO 2,lb-2
            ON_CLICK n, Calcul_click
            n = n + 1
        NEXT xc
    NEXT yc
    HEIGHT P,272: CAPTION P, "  -  CALCULETTE  -"
    ITEM_ADD P+1, STRING$(11," ")+"0"
    PRINT_TARGET_IS 0: 2D_TARGET_IS 0
END_IF
Cal_hx% = 0: ' mode décimal implicite
HIDE P+2: HIDE P+3: HIDE P+4: HIDE P+6: HIDE P+7: HIDE P+8
SHOW Calcul_id: TO_FOREGROUND Calcul_id
EXIT_SUB
Calcul_click:
' Sous-programme événement: appui sur une touche de la calculette
Cal_i% = NUMBER_CLICK-(Calcul_id+2)
Cal_y = INT(Cal_i%/4): Cal_x = Cal_i%-Cal_y*4
Cal_va$ = TRIM$(ITEM_READ$(Calcul_id+1,1))
IF Cal_hx% = 0
    Cal_vi = VAL(Cal_va$)
ELSE
    Cal_vi = HEX(Cal_va$)
END_IF
IF Cal_x < 3
    ' touche valeur numérique 0 à 9 (décimal) ou 0 à F (hexa)
    IF Cal_y < 5 OR Cal_x = 1
        IF Cal_hx% = 0
            Cal_vl = VAL(lab$(Cal_y,Cal_x))
        ELSE
            Cal_vl = HEX(lab$(Cal_y,Cal_x))
        END_IF
        IF Cal_vi = 0
            Cal_va$ = lab$(Cal_y,Cal_x)
        ELSE
            IF Cal_hx% = 0
                Cal_i% = INSTR(Cal_va$,".")
                IF Cal_i% > 0
                    Cal_i% = 1+LEN(Cal_va$)-Cal_i%
                    Cal_x = Cal_vi + Cal_vl/POWER(10,Cal_i%)
                ELSE
                    Cal_x = Cal_vi*10+Cal_vl
                END_IF
            ELSE
                Cal_x = Cal_vi*16+Cal_vl
            END_IF
            IF Cal_x > 2147483647 THEN MESSAGE "Dépassement !": RETURN
            IF Cal_hx% = 0
                Cal_va$ = STR$(Cal_x)
            ELSE
                Cal_va$ = HEX$(Cal_x)
            END_IF
        END_IF
        GOSUB Calcul_val
    ELSE
        IF Cal_x = 0: ' touche 'C' clear
            CLEAR Calcul_id+1
            ITEM_ADD Calcul_id+1, STRING$(11," ")+"0"
        ELSE
            ' touche point décimal (= virgule, calcul décimal)
            Cal_va$ = Cal_va$ + ".": GOSUB Calcul_val
        END_IF
    END_IF
ELSE
    ' Dernière colonne
    ' touche 0: bascule modes hex/dec
    ' touche 1: division 2: multiplication 3: soustraction 4: addition
    ' touche 5: égal, exécuter l'opération
    IF Cal_y = 0: ' Touche 'hd' bascule entre les modes Hexa et Décimal
        IF Cal_hx% = 0
            SHOW Calcul_id+2: SHOW Calcul_id+3: SHOW Calcul_id+4
            SHOW Calcul_id+6: SHOW Calcul_id+7: SHOW Calcul_id+8
            HIDE Calcul_id+24: Cal_hx% = 1
            CLEAR Calcul_id+1: Cal_va$ = HEX$(INT(Cal_vi))
            CAPTION Calcul_id, " MODE HEXADÉCIMAL"
        ELSE
            HIDE Calcul_id+2: HIDE Calcul_id+3: HIDE Calcul_id+4
            HIDE Calcul_id+6: HIDE Calcul_id+7: HIDE Calcul_id+8
            SHOW Calcul_id+24: Cal_hx% = 0: ' mode décimal
            CLEAR Calcul_id+1: Cal_va$ = STR$(Cal_vi)
            CAPTION Calcul_id,"- MODE DÉCIMAL -"
        END_IF
        GOSUB Calcul_val
    ELSE
        IF Cal_y = 5: ' Touche '=': effectuer l'opération demandée
            IF Calcul_ope > 0
                SELECT Calcul_ope
                    CASE 1: Cal_vl = Calcul_valp/Cal_vi
                            IF Cal_hx% = 1 THEN Cal_vl = INT(Cal_vl)
                    CASE 2: Cal_vl = Calcul_valp*Cal_vi
                    CASE 3: Cal_vl = Calcul_valp-Cal_vi
                    CASE 4: Cal_vl = Calcul_valp+Cal_vi
                END_SELECT
                IF Cal_vl > 2147483647 THEN MESSAGE "Dépassement !": RETURN
                IF Cal_hx% = 0
                    Cal_va$ = STR$(Cal_vl)
                ELSE
                    Cal_va$ = HEX$(Cal_vl)
                END_IF
                GOSUB Calcul_val
                Calcul_ope = 0
            END_IF
        ELSE
            Calcul_ope = Cal_y
            Calcul_valp = Cal_vi
            Cal_va$ = "0": GOSUB Calcul_val
        END_IF
    END_IF
END_IF
RETURN
Calcul_val:
CLEAR Calcul_id+1: ' s/p affichage du résultat dans l'écran
ITEM_ADD Calcul_id+1, RIGHT$(STRING$(11," ")+Cal_va$, 12)
RETURN
END_SUB
Maj du 5/6: ajout de la fonction calculette décimale, donc double fonction, avec conversions d'un système à l'autre.
6/6 un peu de nettoyage.


Dernière édition par JL35 le Jeu 6 Juin 2013 - 18:03, édité 3 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7968
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 4 Juin 2013 - 1:55

Salut JL35,

C'est très intéressant tout çà !
Je vais la placer dans mon bibbliolib...

Si tu as des programmes indépendants ( *.exe ) que tu veuilles publier sur le site,
n'hésites pas à en parler sur les Topic consacré au mag...

Edit :

J' essai de me faire à la numérotation bizarre no%=no%+1
et pour ce genre de sub qui renvoit plusieurs objets plus loin je fais ceci :

Code:
Sub ma_sub ( no%,.........
    no%=no%+1 : var_obj% = no%
    if var_obj%=0
    ....
    .....
      no%=no%+nbre_objet%
    else
        show var_obj%:'cas d'une fenêtre
    end_if


Dernière édition par ygeronimi le Mar 4 Juin 2013 - 2:05, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Mar 4 Juin 2013 - 2:04

Ca peut servir effectivement si on s'intéresse au binaire (comme tous les programmeurs ?).
Sois sans crainte, je n'hésiterai pas à partager si j'ai des choses que je juge intéressantes à communiquer.

Edit on s'est croisés...
Y'a un truc qui m'échappe dans ton code, tu fait no%=no%+1: var% = no%: if var% = 0...
je ne vois pas bien comment var% peut être égal à zéro ?? du moins si no% n'est pas négatif au départ.

Bonne nuit ygeronimi, si tu es encore dans le coin... mais toi tu es un couche-tard !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages : 5920
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Mer 5 Juin 2013 - 21:35

J'ai ajouté les fonctions de calculette en base 10 pour en faire un outil complet, donc calcul dans les deux bases, 10 et 16, et conversion de valeurs d'une base à l'autre.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Invité
Invité



MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Mer 5 Juin 2013 - 22:15

Ygeronimi a écrit:
J' essai de me faire à la numérotation bizarre no%=no%+1
et pour ce genre de sub qui renvoit plusieurs objets plus loin je fais ceci :

ce serait pas plus simple de faire ainsi:
Code:

dim nb
nb():picture nb
nb():memo nb :left nb,200
end
sub nb()
 nb=nb+1
end_sub
Revenir en haut Aller en bas
Yannick

avatar

Nombre de messages : 7968
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 5 Juin 2013 - 23:06

@ JL35,

tu as raison, j' ai écris çà vite fait, mais la deuxième ligne doit être après le "if"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   

Revenir en haut Aller en bas
 
Calculette Décimal/Hexa sous forme de Sub
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Messages privés] Afficher les MP sous forme de "sujets privés"
» Catégories sous forme de menu ?
» backup sous forme d'archive?
» [Permissions] Mettre les permissions dans le PA sous forme de tableau intéractif
» Astuce du mardi : afficher les messages sous forme de bulles

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC 32 bits :: Vos sources, vos utilitaires à partager-
Sauter vers: