FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Calculette Décimal/Hexa sous forme de Sub Emptypar papydall Aujourd'hui à 3:22

» select intégrés [résolu]
Calculette Décimal/Hexa sous forme de Sub Emptypar jjn4 Hier à 17:00

» number_mouse_up
Calculette Décimal/Hexa sous forme de Sub Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Calculette Décimal/Hexa sous forme de Sub Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Calculette Décimal/Hexa sous forme de Sub Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Calculette Décimal/Hexa sous forme de Sub Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Calculette Décimal/Hexa sous forme de Sub Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Calculette Décimal/Hexa sous forme de Sub Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Calculette Décimal/Hexa sous forme de Sub Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Calculette Décimal/Hexa sous forme de Sub Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Calculette Décimal/Hexa sous forme de Sub Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Calculette Décimal/Hexa sous forme de Sub Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Calculette Décimal/Hexa sous forme de Sub Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Calculette Décimal/Hexa sous forme de Sub Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Calculette Décimal/Hexa sous forme de Sub Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le deal à ne pas rater :
Cdiscount : -30€ dès 300€ d’achat sur une sélection Apple
Voir le deal

 

 Calculette Décimal/Hexa sous forme de Sub

Aller en bas 
2 participants
AuteurMessage
JL35




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

Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: Calculette Décimal/Hexa sous forme de Sub   Calculette Décimal/Hexa sous forme de Sub EmptyMar 4 Juin 2013 - 0: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 - 17:03, édité 3 fois
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: re   Calculette Décimal/Hexa sous forme de Sub EmptyMar 4 Juin 2013 - 0: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 - 1:05, édité 1 fois
Revenir en haut Aller en bas
JL35




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

Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Calculette Décimal/Hexa sous forme de Sub EmptyMar 4 Juin 2013 - 1: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
JL35




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

Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Calculette Décimal/Hexa sous forme de Sub EmptyMer 5 Juin 2013 - 20: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
Invité
Invité




Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: Re: Calculette Décimal/Hexa sous forme de Sub   Calculette Décimal/Hexa sous forme de Sub EmptyMer 5 Juin 2013 - 21: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




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Calculette Décimal/Hexa sous forme de Sub Empty
MessageSujet: re   Calculette Décimal/Hexa sous forme de Sub EmptyMer 5 Juin 2013 - 22: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
Contenu sponsorisé





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

Revenir en haut Aller en bas
 
Calculette Décimal/Hexa sous forme de Sub
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Une petite calculette en Hexa
» Conversions Décimal<->Hexa
» Une calculette basique pour les enfants
» Conversion hexa/décimal (erreur, annulé)
» Une énigme sous forme d’un poème : flocon de Von Koch

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