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
» Une autre façon de terminer une application.
par Francis-mr Aujourd'hui à 12:07

» Compilateur FBPano
par jean_debord Aujourd'hui à 10:09

» Copier / coller du texte à partir de la fenêtre de commandes
par jean_debord Aujourd'hui à 9:46

» COMPILATEUR V 0.9 beta 8 du 18 aout 2017
par papydall Aujourd'hui à 5:01

» Mettre en windows en veille
par papydall Aujourd'hui à 4:15

» Stretch_on ne stretch plus...
par papydall Hier à 15:22

» Pb 18 (en analyse): RESTORE_LABEL avec DATA à la fin
par Jack Hier à 13:21

» Problème de traitement des opérateurs avec le compilateur.
par Pedro Alvarez Sam 19 Aoû 2017 - 20:01

» Pb 17 (résolu): ITEM_SELECT ne fonctionne pas
par Jack Jeu 17 Aoû 2017 - 19:26

» 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 (résolu): ON_CLOSE plante à l'exécution
par Jack Mer 16 Aoû 2017 - 20:00

» Pb 15 (résolu): 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

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 | 
 

 Boutons à la demande

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



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

MessageSujet: Boutons à la demande   Mer 7 Mar 2012 - 0:47

Pas vraiment révolutionnaire, donc je mets ça ici...
Le but est de fabriquer un bouton à la demande, de la couleur voulue, et comportant éventuellement plusieurs lignes de texte:

le sous-programme:
Code:
' Boutons à la demande
LABEL Bouton, Pourvoir
DIM n, xb, yb, lb, hb, tb$, i%, j%, k%
n = 10: lb = 120: hb = 50: xb = 70: yb = 10
tb$ = "Bouton avec#plusieurs lignes#de texte"
GOSUB Bouton: ON_CLICK n, Pourvoir
button 20: top 20, 10: left 20, 200: width 20, 90: caption 20, "Bouton classique"
END

Bouton:
' paramètres en entrée: n, xb, yb, lb, hb, tb$ (caption)
DIM rbt, gbt, bbt, nbt, ibt, jbt, kbt, tbt$(10)
rbt=192: gbt=192: bbt=192: ' couleur du bouton: gris
rbt=164: gbt=255: bbt=255: ' idem, cyan
PICTURE n: TOP n, yb: LEFT n, xb: WIDTH n, lb: HEIGHT n, hb
2D_TARGET_IS n: PRINT_TARGET_IS n
2D_FILL_COLOR rbt,gbt,bbt: 2D_PEN_COLOR rbt/2,gbt/2,bbt/2
2D_PEN_WIDTH 2: 2D_RECTANGLE 0,0,WIDTH(n),HEIGHT(n): 2D_PEN_WIDTH 1
2D_PEN_COLOR 255,255,255: 2D_LINE 1,hb-2,1,1: 2D_POLY_TO lb-2,1
nbt = 0
kbt = INSTR(tb$, "#"): ' séparateur de lignes éventuel
WHILE kbt > 0
    nbt = nbt+1: tbt$(nbt) = LEFT$(tb$,kbt-1): tb$ = MID$(tb$, kbt+1, 100)
    kbt = INSTR(tb$, "#")
END_WHILE
nbt = nbt+1: tbt$(nbt) = tb$
ibt = TEXT_WIDTH(tb$,n): jbt = TEXT_HEIGHT(tb$,n)
FOR kbt = 1 TO nbt
    ibt = TEXT_WIDTH(tbt$(kbt),n)
    PRINT_LOCATE (lb-ibt)/2,(kbt-1)*jbt+(hb-jbt*nbt)/2: PRINT tbt$(kbt)
NEXT kbt
2D_TARGET_IS 0: PRINT_TARGET_IS 0
FREE rbt: FREE gbt: FREE bbt: FREE ibt: FREE jbt: FREE kbt: FREE tbt$
RETURN
Pourvoir:
DIM ldn, hdn
2D_TARGET_IS n: 2D_PEN_COLOR 0,0,0: ldn = WIDTH(n): hdn = HEIGHT(n)
2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 255,255,255: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
WAIT 500: 2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 0,0,0: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
2D_TARGET_IS 0
print "Cliqué !"
FREE ldn: FREE hdn
RETURN

PS j'avais mis comme séparateur de lignes le caractère "<", mais ici (sur le forum), entre les balises 'code' ça met complètement la pagaille et ça tronque le texte... alors j'ai mis "|" (pour ici).


Dernière édition par JL35 le Mer 7 Mar 2012 - 15:59, édité 3 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Boutons à la demande   Mer 7 Mar 2012 - 3:36

Toujours pratique a avoir Wink Ca marche très bien
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
lodchjo

avatar

Nombre de messages : 162
Age : 46
Localisation : Anvers
Date d'inscription : 26/12/2011

MessageSujet: Re: Boutons à la demande   Mer 7 Mar 2012 - 11:01

Coucou!

Petite modification pour simuler le mouvement d'un bouton traditionel cliqué:
J'ai rajouté une ligne dans la procedure "Pourvoir:"

Code:

Pourvoir:
TOP n, yb+1: LEFT n, xb+1: WIDTH n, lb-2: HEIGHT n, hb-2:wait 200:TOP n, yb: LEFT n, xb: WIDTH n, lb: HEIGHT n, hb
 print "Cliqué !"
RETURN

A+!

Lode
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lode.weebly.com
JL35



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

MessageSujet: Re: Boutons à la demande   Mer 7 Mar 2012 - 13:06

Intéressant, comme toujours.

Ce s/p bouton c'est pour insérer dans une des futures bibliothèques... quand on pourra en faire ! Very Happy

J'ai appliqué ta méthode pour le cliqué en l'accentuant encore, optimisé pour les couleurs (et mis le caractère dièse '#' plus voyant au lieu de '|' comme séparateur de lignes).
Mais de toute façon la visualisation de l'enfoncement du bouton est un gadget pour la démo, mais inapplicable dans la réalité, au moment du clic on ne connaît plus en général les dimensions du bouton cliqué.
Si on peut les retrouver (comme j'ai appliqué ci-dessus), c'est quand même un peu gadget mais c'est possible !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Boutons à la demande   Dim 11 Mar 2012 - 17:59

Hallo Panoramics,

@ JL35 lol!

Sehr schöner Code.
Sehr genial.

Ich prüfe den Code um ihn zu verstehen.
Dabei habe ich folgende Idee:

Kann ein Bild und der Text auf die Pseudotaste gebracht werden? Question

@ Bignono lol!

Eureka! der Doppel-Klick!

Sehr schöner Code.
Sehr genial.

Ich prüfe den Code um ihn zu verstehen.
Dabei habe ich folgende Idee:

Kombination von Pseudotaste und Doppelklick. Question

Severin
der Sonntagsprogrammierer



Salut Panoramics,

@JL35 lol!

Code très beau.
Très génial.

J'examine le code autour de lui comprendre.
Avec cela, j'ai l'idée suivante :

Est-ce que une image et le texte sur la touche pseudo peut être apportée ? Question

@Bignono lol!

Eureka! le double-clic!

Code très beau.
Très génial.

J'examine le code autour de lui comprendre.
Avec cela, j'ai l'idée suivante :

Combinaison de la touche pseudo et du double-clic. Question

Séverin
le programmeur de dimanche


Hello, Panoramics,

@JL35 lol!

Very nice code.
Very brilliantly(ingeniously).

I check the code around him to understand.
Besides, I have the following idea:

Can a picture and the text on the pseudo key be brought? Question

@Bignono lol!

Eureka! the double click!

Very nice code.
Very brilliantly(ingeniously).

I check the code around him to understand.
Besides, I have the following idea:

Combination of pseudo key and double click. Question

Severin
the Sunday programmer
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Dim 11 Mar 2012 - 18:21

Bonjour Severin, programmeur du dimanche, et merci pour ton appréciation.
Bien sûr on peut ajouter une image sur le bouton, puisque c'est un Picture, on peut y mettre n'importe quel graphisme ou dessiner dessus.

Thank you Severin for your kind appreciation.
Obviously we can put pictures, text, design upon the pseudo-button, because it is a Picture object.






Revenir en haut Aller en bas
Voir le profil de l'utilisateur
bignono

avatar

Nombre de messages : 1085
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: Boutons à la demande   Dim 11 Mar 2012 - 21:14

bonjour Séverin Very Happy
(Désolé d'utiliser ton post JL35)
Si tu utilises le programme du double click, dans une boucle while...end_while ou bien repeat...until pense à activer avant avec on_click le sous programme et à le désactiver après avec off_click, sinon tu auras des erreurs qui se produiront.
Bon courage et bonne programmation à toi! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Boutons à la demande   Dim 11 Mar 2012 - 22:37

@ JL35

Frage wie Text und JPG verbinden ? Question

Entschundigung aber ich habe den Code noch nicht komplett verstanden. Embarassed

Severin

Eventuell in den obigen Code einfügen, mit REM. Embarassed


@JL35

La question comme le texte et JPG lient ? Question

L'Entschundigung cependant j'a compris pas encore complètement le code. Embarassed

Séverin

Insèrent éventuellement dans le code mentionné ci-dessus, avec REM. Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Dim 11 Mar 2012 - 23:19

Severin, il n'y a pas de miracle, le dessin et le texte ne sont pas liés entre eux, il faut dessiner soi-même dans le bouton si on veut une image, ou alors en importer une par 2d_Image_Paste n,x,y par exemple, avant d'écrire le texte.
C'est artisanal, mais c'est possible.
Je reprends l'exemple ci-dessus, avec le dernier dessin:
Code:
' Boutons à la demande
LABEL Bouton, Pourvoir
DIM n, xb, yb, lb, hb, tb$, i%, j%, k%
n = 10: lb = 120: hb = 40: xb = 70: yb = 10
tb$ = "Opération#interdite"
GOSUB Bouton: ON_CLICK n, Pourvoir
button 20: top 20, 10: left 20, 200: width 20, 90: caption 20, "Bouton classique"
END

Bouton:
' paramètres en entrée: n, xb, yb, lb, hb, tb$ (caption)
DIM rbt, gbt, bbt, nbt, ibt, jbt, kbt, tbt$(10)
rbt=192: gbt=192: bbt=192: ' couleur du bouton: gris
rbt=164: gbt=255: bbt=255: ' idem, cyan
PICTURE n: TOP n, yb: LEFT n, xb: WIDTH n, lb: HEIGHT n, hb
2D_TARGET_IS n: PRINT_TARGET_IS n
2D_FILL_COLOR rbt,gbt,bbt: 2D_PEN_COLOR rbt/2,gbt/2,bbt/2
2D_PEN_WIDTH 2: 2D_RECTANGLE 0,0,WIDTH(n),HEIGHT(n)
2D_PEN_COLOR 255,0,0: 2D_FILL_COLOR 255,0,0
2D_CIRCLE 18,18,14: 2D_PEN_COLOR 255,255,255: 2D_PEN_WIDTH 6: 2D_LINE 10,18,26,18
2D_FILL_COLOR rbt,gbt,bbt: 2D_PEN_WIDTH 1
2D_PEN_COLOR 255,255,255: 2D_LINE 1,hb-2,1,1: 2D_POLY_TO lb-2,1
nbt = 0
kbt = INSTR(tb$, "#"): ' séparateur de lignes éventuel
WHILE kbt > 0
    nbt = nbt+1: tbt$(nbt) = LEFT$(tb$,kbt-1): tb$ = MID$(tb$, kbt+1, 100)
    kbt = INSTR(tb$, "#")
END_WHILE
nbt = nbt+1: tbt$(nbt) = tb$
ibt = TEXT_WIDTH(tb$,n): jbt = TEXT_HEIGHT(tb$,n)
FOR kbt = 1 TO nbt
    ibt = TEXT_WIDTH(tbt$(kbt),n)
    PRINT_LOCATE (lb-ibt)/2,(kbt-1)*jbt+(hb-jbt*nbt)/2: PRINT tbt$(kbt)
NEXT kbt
2D_TARGET_IS 0: PRINT_TARGET_IS 0
FREE rbt: FREE gbt: FREE bbt: FREE ibt: FREE jbt: FREE kbt: FREE tbt$
RETURN
Pourvoir:
DIM ldn, hdn
2D_TARGET_IS n: 2D_PEN_COLOR 0,0,0: ldn = WIDTH(n): hdn = HEIGHT(n)
2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 255,255,255: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
WAIT 500: 2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 0,0,0: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
2D_TARGET_IS 0
print "Cliqué !"
FREE ldn: FREE hdn
RETURN

Bonsoir bignono, aucun problème, le post est ouvert, et en plus c'est un inutilitaire !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Boutons à la demande   Lun 12 Mar 2012 - 0:36

@ Bignono

Deine und alle Komentare von Panoramics sind willkommen. lol!

@ JL35

Danke, aber so meinte ich es nicht.
Ich habe mir die freien - Vista Icons Pack 3.0 - geladen.
Ca. 1000 Icons.
Diese Icons mit Text auf eine Pseudotaste platzieren.
Eventuell Hauptbild mit zwei aufgesetzten Bildern.
Erstes Bild der Hintergrund.
Zweites Bild das Icon.
Drittes Bild der Text.

Severin


@Bignono

Les tes et tous Komentare de Panoramics sont bienvenus. lol!

@JL35

Merci, mais ainsi je ne l'avais pas en vue.
Je me suis chargé les libres - Vista Icons le paquet 3.0-.
Environ 1000 Icons.
Ces Icons avec le texte sur une touche pseudo placent.
Eventuellement l'image principale avec deux images se posées.
La première image le fond.
La deuxième image Icon.
La troisième image le texte.

Séverin

@Bignono

Your and all Komentare of Panoramics are welcome. lol!

@JL35

Thanks, but thus I did not mean it.
I have burdened myself the free - Vista Icons stack 3.0-.
Approx. 1000 Icons.
These Icons with text on a pseudo key place.
Perhaps, main picture with two put on(arranged) pictures.
The first picture the background.
The second picture the Icon.
The third picture the text.

Severin
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Lun 12 Mar 2012 - 0:46

Oui Severin, il y a sûrement possibilité d'utiliser des icônes (comme je disais par 2d_Image_paste par exemple), comme le pseudo-bouton est un Picture on peut faire tout ce qu'on veut.
Mais on ne sait pas superposer un texte sur une image sans détruire l'image. Ou alors dessiner le texte pixel par pixel, mais c'est un peu laborieux.
Gute nacht ! Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Severin



Nombre de messages : 547
Localisation : Braunschweig / Germany
Date d'inscription : 13/12/2010

MessageSujet: Re: Boutons à la demande   Lun 12 Mar 2012 - 18:04

Hier mein erster Test. Ersetze Startbild.JPG durch ein eigenes. Ich forsche weiter.

Severin

Ici mon premier essai. Le Startbild.JPG remplace par un propre. Je recherche plus encore.

Severin

Here my first test. Replace Startbild.JPG by an own. I continue to research.

Severin

Neu: 12.3.2012 16:24

Code:
' ******************************************************************************
'
DIM DIR_A$
    DIR_A$ = "c:\"
'
' *** PROGRAMM STARTEN  ********************************************************
'
DIM SCREEN_X1
DIM SCREEN_Y1
'
DIM Bildbreite
DIM Bildhoehe
'
' ******************************************************************************
' *** DATEIEN AUS UNTERVERZEICHNIS  -Bilder - LADEN ****************************
'
DIM Speicherplatz_Bild01$
    Speicherplatz_Bild01$ = DIR_A$ + "1PC-ZEIT\03_PC-Zeit_BILDER\Startbild.JPG"
'
DIM Speicherplatz_Bild02$
    Speicherplatz_Bild02$ = DIR_A$ + "1PC-ZEIT\03_PC-Zeit_BILDER\Startbild.JPG"
'
DIM Speicherplatz_Bild03$
    Speicherplatz_Bild03$ = DIR_A$ + "1PC-ZEIT\03_PC-Zeit_BILDER\Startbild.JPG"
'
' ******************************************************************************
' *** FORM 000 DEFINIEREN UND ANZEIGEN BLEIBT IMMER BESTEHEN *******************
' FORM            000
'
TOP                000,0000
LEFT              000,0000
WIDTH              000,SCREEN_X
HEIGHT            000,SCREEN_Y
color              000,000,255,000
'
border_normal      000
'
' ******************************************************************************
' *** BILD1 AUF FORM 000 ANZEIGEN **********************************************
'
COMMAND_TARGET_IS  000
picture      99
'
TOP          99,INT(SCREEN_Y/2-225)      : REM  HÖHE FENSTER
LEFT        99,INT(SCREEN_X/2-225)      : REM  BREITE FENSTER
WIDTH        99,400                      : REM ......BREITE  1680
HEIGHT      99,400                      : REM ......HÖHE    1050
FILE_LOAD    99,Speicherplatz_Bild01$
STRETCH_ON  99                          : REM
SHOW        99                          : REM
'
' stop
' ******************************************************************************
' *** BILD2 AUF FORM 000 ANZEIGEN **********************************************
'
COMMAND_TARGET_IS  000
picture      98
'
TOP          98,INT(SCREEN_Y/2-225)      : REM  HÖHE FENSTER
LEFT        98,INT(SCREEN_X/2-225)      : REM  BREITE FENSTER
WIDTH        98,400                      : REM ......BREITE  1680
HEIGHT      98,200                      : REM ......HÖHE    1050
FILE_LOAD    98,Speicherplatz_Bild02$
STRETCH_ON  98                          : REM
SHOW        98                          : REM
'
' stop
' ******************************************************************************
' *** BILD3 AUF FORM 000 ANZEIGEN **********************************************
'
COMMAND_TARGET_IS  000
picture      97
'
TOP          97,INT(SCREEN_Y/2-025)      : REM  HÖHE FENSTER
LEFT        97,INT(SCREEN_X/2-225)      : REM  BREITE FENSTER
WIDTH        97,400                      : REM ......BREITE  1680
HEIGHT      97,200                      : REM ......HÖHE    1050
FILE_LOAD    97,Speicherplatz_Bild03$
STRETCH_ON  97                          : REM
SHOW        97                          : REM
'
Inactive 98
Inactive 97

' stop

on_click 99,clicken
'
end

clicken:

Print "gedrückt"

stop
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Manufacture de boutons   Mar 13 Mar 2012 - 20:48

Cette fois-ci il y a la chaîne complète:

1) La fabrication des icônes destinées à être affichées sur des boutons.

2) L'affichage de pseudo-boutons comportant du texte, éventuellement sur plusieurs lignes, et éventuellement une icône pour agrémenter ou expliciter le bouton (même utilisation que les BUTTON Panoramic).

1) La manufacture de fabrication des icônes
3 formats différents possibles: 16x16, 24x24 ou 32x32, avec 8 couleurs plus une couleur transparente.
Une fois dessinée, l'icône peut être copiée dans le clipboard sous forme de lignes de datas, qu'il suffit ensuite de 'coller' dans le programme utilisateur (ici, le programme 'Bouton' qui suit).
On pourrait facilement ajouter l'écriture dans un fichier, pour faire une collection, c'est à voir.
Code:

' Desic.bas: dessin d'icônes simplifiées pour illustration de boutons personnels
' ou tout autre usage.
' Affichage des icônes avec le s/p Desico donné plus loin.
LABEL Format, Desgril, Desoc, Decal, Recop, Undo, Dat2Clip, Chct, Coutil, Import
LABEL Redcoul, Clipico, Aide
DIM dic, pas, lfp, tpp, ctr, ctg, ctb, cfr, cfg, cfb, etr
DIM cr, cg, cb, xcl%, ycl%, x1%, y1%, x2%, y2%, i%, j%, k%, a$, b$, dct, dcf
DIM wpi%, hpi%, q%, cll%(10), clo%, n, r, outil, fi$, iv$
' couleurs: Noir, Rouge, Vert, Bleu, Jaune, Magenta, Cyan, Blanc, Transparent (8)-
cll%(0)=0: cll%(1)=255*65536:cll%(2)=255*256:cll%(3)=255:cll%(4)=65536*255+256*255
cll%(5)=65536*255+255:cll%(6)=256*255+255:cll%(7)=65536*255+256*255+255
iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe "

COLOR 0,192,255,255: FONT_BOLD 0
CONTAINER_OPTION 10: TOP 10, 0: LEFT 10,10: WIDTH 10, 80: HEIGHT 10, 92
CAPTION 10, " Icône: "
OPTION 11: PARENT 11,10: TOP 11,14: LEFT 11,10: WIDTH 11,60: CAPTION 11, "16x16"
OPTION 12: PARENT 12,10: TOP 12,29: LEFT 12,10: WIDTH 12,60: CAPTION 12, "24x24"
OPTION 13: PARENT 13,10: TOP 13,44: LEFT 13,10: WIDTH 13,60: CAPTION 13, "32x32"
OPTION 14: PARENT 14,10: TOP 14,59: LEFT 14,10: WIDTH 14,60: CAPTION 14, "48x48"
OPTION 15: PARENT 15,10: TOP 15,73: LEFT 15,10: WIDTH 15,60: CAPTION 15, "64x64"
dic = 32: MARK_ON 13
FOR i% = 11 TO 15: ON_CLICK i%, Format: NEXT i%
SPIN 20: TOP 20, 93: LEFT 20,10: WIDTH 20, 40: POSITION 20,1
MIN 20, 1: MAX 20,20
ALPHA 21: TOP 21, 97: LEFT 21, 55: CAPTION 21, "Épaisseur trait"
PICTURE 30: TOP 30,120: LEFT 30,80: WIDTH 30,24: HEIGHT 30,20: COLOR 30,0,0,0
PICTURE 31: TOP 31,120: LEFT 31,110: WIDTH 31,24: HEIGHT 31,20: COLOR 31,255,0,0
PICTURE 32: TOP 32,120: LEFT 32,140: WIDTH 32,24: HEIGHT 32,20: COLOR 32,0,255,0
PICTURE 33: TOP 33,145: LEFT 33,80: WIDTH 33,24: HEIGHT 33,20: COLOR 33,0,0,255
PICTURE 34: TOP 34,145: LEFT 34,110: WIDTH 34,24: HEIGHT 34,20: COLOR 34,255,255,0
PICTURE 35: TOP 35,145: LEFT 35,140: WIDTH 35,24: HEIGHT 35,20: COLOR 35,255,0,255
PICTURE 36: TOP 36,170: LEFT 36,80: WIDTH 36,24: HEIGHT 36,20: COLOR 36,0,255,255
PICTURE 37: TOP 37,170: LEFT 37,110: WIDTH 37,24: HEIGHT 37,20: COLOR 37,255,255,255
PICTURE 38: TOP 38,170: LEFT 38,140: WIDTH 38,24: HEIGHT 38,20: COLOR 38,192,192,192
2D_TARGET_IS 38:2D_LINE 0,0,24,24: 2D_LINE 0,24,24,0
PICTURE 39: TOP 39,130: LEFT 39,20: WIDTH 39,40: HEIGHT 39,20: COLOR 39,0,0,0
PICTURE 40: TOP 40,170: LEFT 40,20: WIDTH 40,40: HEIGHT 40,20: COLOR 40,255,255,255
dct = 0: dcf = 0
ALPHA 41: TOP 41,115: LEFT 41, 5: CAPTION 41, "Coul. trait:"
ALPHA 42: TOP 42,155: LEFT 42,5: CAPTION 42, "Coul. rempl.:"
FOR i% = 30 TO 42: ON_CLICK i%, Chct: NEXT i%

ALPHA 49: TOP 49, 195: LEFT 49, 10: CAPTION 49, "------------ OUTILS ------------"
PICTURE 50: TOP 50,210: LEFT 50,10: WIDTH 50, 30: HEIGHT 50,30: COLOR 50,192,192,192
PICTURE 51: TOP 51,210: LEFT 51,50: WIDTH 51,30: HEIGHT 51,30: COLOR 51,192,192,192
PICTURE 52: TOP 52,210: LEFT 52,90: WIDTH 52,30: HEIGHT 52,30: COLOR 52,192,192,192
PICTURE 53: TOP 53,210: LEFT 53,130: WIDTH 53,30: HEIGHT 53,30: COLOR 53,192,192,192
PICTURE 54: TOP 54,245: LEFT 54,10: WIDTH 54,30: HEIGHT 54,30: COLOR 54,192,192,192
PICTURE 55: TOP 55,245: LEFT 55,50: WIDTH 55,30: HEIGHT 55,30: COLOR 55,192,192,192
PICTURE 56: TOP 56,245: LEFT 56,90: WIDTH 56,30: HEIGHT 56,30: COLOR 56,192,192,192
PICTURE 57: TOP 57,245: LEFT 57,130: WIDTH 57,30: HEIGHT 57,30: COLOR 57,192,192,192
FOR i% = 50 TO 57: ON_CLICK i%, Coutil: NEXT i%
2D_PEN_COLOR 0,0,0: 2D_FILL_COLOR 192,192,192: 2D_PEN_WIDTH 2
2D_TARGET_IS 50: 2D_PEN_WIDTH 2: 2D_RECTANGLE 14,14,17,17
2D_TARGET_IS 51: 2D_PEN_WIDTH 2: 2D_LINE 5,22,25,8
2D_TARGET_IS 52: 2D_FILL_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_RECTANGLE 4,8,28,24
2D_TARGET_IS 53: 2D_FILL_COLOR 164,164,164: 2D_PEN_WIDTH 2: 2D_RECTANGLE 4,8,28,24
2D_TARGET_IS 54: 2D_FILL_COLOR 192,192,192: 2D_PEN_WIDTH 2: 2D_CIRCLE 15,15,11
2D_TARGET_IS 55: 2D_FILL_COLOR 164,164,164: 2D_PEN_WIDTH 2: 2D_CIRCLE 15,15,11
2D_TARGET_IS 56: 2D_FILL_COLOR 164,164,164: 2D_PEN_WIDTH 2: 2D_LINE 8,4,26,10
2D_POLY_TO 22,22: 2D_POLY_TO 4,16: 2D_POLY_TO 8,4: 2D_LINE 24,16,6,16
2D_POLY_TO 6,26: 2D_LINE 2,26,14,26
PRINT_TARGET_IS 57: FONT_BOLD 57: PRINT_LOCATE 2,9: PRINT "RAZ"
FOR outil = 50 TO 57
    2D_TARGET_IS outil: 2D_PEN_WIDTH 2
    IF outil = 50
        2D_PEN_COLOR 255,0,0
    ELSE
        2D_PEN_COLOR 164,164,164
    END_IF
    2D_LINE 1,1,29,1:2D_POLY_TO 29,29:2D_POLY_TO 1,29: 2D_POLY_TO 1,1
NEXT outil
outil = 50
ALPHA 58: TOP 58,285: LEFT 58,10: CAPTION 58,"Décalage"+CHR$(10)+"de 1 pixel:"
PICTURE 59: TOP 59,290: LEFT 59,80: WIDTH 59,20: HEIGHT 59,20
PICTURE 60: TOP 60,280: LEFT 60,105: WIDTH 60,20: HEIGHT 60,20
PICTURE 61: TOP 61,305: LEFT 61,105: WIDTH 61,20: HEIGHT 61,20
PICTURE 62: TOP 62,290: LEFT 62,130: WIDTH 62,20: HEIGHT 62,20
FOR i% = 59 TO 62
    COLOR i%, 192,192,192: 2D_TARGET_IS i%: 2D_FILL_COLOR 192,192,192
    2D_PEN_COLOR 128,128,128: 2D_RECTANGLE 0,0,WIDTH(i%),HEIGHT(i%)
    PRINT_TARGET_IS i%: FONT_NAME i%,"Symbol": FONT_SIZE i%,12: FONT_BOLD i%
    SELECT i%
        CASE 59: PRINT CHR$(172)
        CASE 60: PRINT_LOCATE 4,0: PRINT CHR$(173)
        CASE 61: PRINT_LOCATE 4,0: PRINT CHR$(175)
        CASE 62: PRINT CHR$(174)
    END_SELECT
    ON_CLICK i%, Decal
NEXT i%

BUTTON 64: TOP 64, 330: LEFT 64, 50: WIDTH 64, 70: HEIGHT 64,20: CAPTION 64, "Undo"
ON_CLICK 64, Undo

ALPHA 65: TOP 65, 375: LEFT 65, 10: CAPTION 65, "Importer une image (clic):"
EDIT 66: TOP 66, 390: LEFT 66, 10:WIDTH 66, 150
ON_CLICK 66, Import
BUTTON 67: TOP 67, 420: LEFT 67, 10: WIDTH 67, 150: HEIGHT 67, 20
CAPTION 67, "CIPBOARD -> ICONE": ON_CLICK 67, Clipico

ALPHA 70: TOP 70, 450: LEFT 70, 10: CAPTION 70, "Nom de l'icône résultat:"
EDIT 71: TOP 71, 465: LEFT 71, 10: WIDTH 71, 150
BUTTON 72: TOP 72, 490: LEFT 72, 10: WIDTH 72, 150: HEIGHT 72, 20
CAPTION 72, "DATAS -> CLIPBOARD": ON_CLICK 72, Dat2Clip

BUTTON 80: TOP 80, 2: LEFT 80, WIDTH(0)-78: WIDTH 80, 61: CAPTION 80, "Aide"
ON_CLICK 80, Aide

IMAGE 89: ' sauvegarde pour undo

pas = 12
etr = 1: ' épaisseur trait
ctr = 0: ctg = 0: ctb = 255: ' couleur trait
cfr = 255: cfg = 255: cfb = 0: ' couleur fond
lfp = 180: tpp = 30
PICTURE 100: TOP 100,tpp: LEFT 100, lfp: ON_CLICK 100, Desoc
PICTURE 101: TOP 101,tpp: LEFT 101, lfp-dic-10: WIDTH 101, dic: HEIGHT 101, dic
2D_IMAGE_COPY 89,0,0,WIDTH(101),HEIGHT(101)
GOSUB Desgril

END

Format:
FOR i% = 11 TO 15
    IF CHECKED(i%) = 1 THEN EXIT_FOR
NEXT i%
SELECT i%
    CASE 11: j% = 16
    CASE 12: j% = 24
    CASE 13: j% = 32
    CASE 14: j% = 48
    CASE 15: j% = 64
END_SELECT
IF j% <> dic THEN dic = j%: GOSUB Desgril
RETURN

Desgril:
IF dic < 48
    WIDTH 0,600: HEIGHT 0,550: pas = 12
ELSE
    IF dic < 64
        WIDTH 0, 680: HEIGHT 0, 550
    ELSE
        WIDTH 0, 850: HEIGHT 0, 720
    END_IF
    pas = 10
END_IF
WIDTH 100, dic*pas: HEIGHT 100,dic*pas
2D_TARGET_IS 0: 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE lfp-dic-12,tpp-2,lfp-8,tpp+dic+2
LEFT 101, lfp-dic-10: WIDTH 101, dic: HEIGHT 101, dic
2D_TARGET_IS 101: CLS
2D_TARGET_IS 100: 2D_PEN_COLOR 128,128,128: 2D_RECTANGLE 0,0,WIDTH(100),HEIGHT(100)
FOR j% = 0 TO HEIGHT(100) STEP pas: 2D_LINE 0,j%,WIDTH(100),j%: NEXT j%
FOR i% = 0 TO WIDTH(100) STEP pas: 2D_LINE i%,0,i%,HEIGHT(100): NEXT i%
2D_PEN_COLOR 255,128,255: 2D_LINE 0,HEIGHT(100)/2,WIDTH(100),HEIGHT(100)/2
2D_LINE WIDTH(100)/2,0,WIDTH(100)/2,HEIGHT(100)
RETURN

Desoc:
xcl% = INT(MOUSE_X_POSITION(100)/pas): ycl% = INT(MOUSE_Y_POSITION(100)/pas)
ctr = COLOR_PIXEL_RED(39,10,1): ctg = COLOR_PIXEL_GREEN(39,10,1)
ctb = COLOR_PIXEL_BLUE(39,10,1): cfr = COLOR_PIXEL_RED(40,10,1)
cfg = COLOR_PIXEL_GREEN(40,10,1): cfb = COLOR_PIXEL_BLUE(40,10,1)
2D_TARGET_IS 101: 2D_IMAGE_COPY 89,0,0,WIDTH(101),HEIGHT(101)
2D_PEN_COLOR ctr,ctg,ctb: 2D_FILL_COLOR cfr,cfg,cfb
2D_PEN_WIDTH POSITION(20)
i% = xcl%*pas+2: j%=ycl%*pas+2: x2% = i%+pas-4: y2% = j%+pas-4
SELECT outil
    CASE 50: 2D_POINT xcl%,ycl%: x1% = -1: ' point
    CASE 51: IF x1% = -1: ' trait
                x1% = xcl%: y1% = ycl%
                2D_TARGET_IS 100: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 2
                2D_LINE i%,j%,x2%,y2%: 2D_LINE i%,y2%,x2%,j%
                2D_PEN_WIDTH 1
            ELSE
                2D_LINE x1%,y1%,xcl%,ycl%: x1% = -1
            END_IF
    CASE 52: IF x1% = -1: ' rectangle vide
                x1% = xcl%: y1% = ycl%
                2D_TARGET_IS 100: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 2
                2D_LINE i%,j%,x2%,y2%: 2D_LINE i%,y2%,x2%,j%
                2D_PEN_WIDTH 1
            ELSE
                2D_LINE x1%,y1%,xcl%,y1%: 2D_POLY_TO xcl%,ycl%
                2D_POLY_TO x1%,ycl%: 2D_POLY_TO x1%,y1%: x1% = -1
            END_IF
    CASE 53: IF x1% = -1: ' rectangle plein
                x1% = xcl%: y1% = ycl%
                2D_TARGET_IS 100: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 2
                2D_LINE i%,j%,x2%,y2%: 2D_LINE i%,y2%,x2%,j%
                2D_PEN_WIDTH 1
            ELSE
                2D_RECTANGLE x1%,y1%,xcl%,ycl%: x1% = -1
            END_IF
    CASE 54: IF x1% = -1: ' cercle vide
                x1% = xcl%: y1% = ycl%
                2D_TARGET_IS 100: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 2
                2D_LINE i%,j%,x2%,y2%: 2D_LINE i%,y2%,x2%,j%
                2D_PEN_WIDTH 1
            ELSE
                r = SQR(POWER(xcl%-x1%,2)+POWER(y1%-ycl%,2))
                x2% = x1%+r: y2% = y1%
                FOR n = .5 TO 6.5 STEP .5
                    xcl% = x1% + r*COS(n): ycl% = y1% - r*SIN(n)
                    2D_LINE x2%,y2%,xcl%,ycl%: x2%=xcl%: y2%=ycl%
                NEXT n
                x1% = -1
            END_IF
    CASE 55: IF x1% = -1: ' cercle plein
                x1% = xcl%: y1% = ycl%
                2D_TARGET_IS 100: 2D_PEN_COLOR 0,0,0: 2D_PEN_WIDTH 2
                2D_LINE i%,j%,x2%,y2%: 2D_LINE i%,y2%,x2%,j%
                2D_PEN_WIDTH 1
            ELSE
                r = SQR(POWER(xcl%-x1%,2)+POWER(y1%-ycl%,2))
                2D_CIRCLE x1%,y1%,r: x1% = -1
            END_IF
    CASE 56: 2D_FLOOD xcl%,ycl%,cfr,cfg,cfb: ' remplissage
END_SELECT
IF x1% = -1 THEN GOSUB Recop
RETURN

Decal:
FOR i% = 59 TO 62
    IF CLICKED(i%) = 1 THEN EXIT_FOR
NEXT i%
2D_TARGET_IS 101: 2D_IMAGE_COPY 89,0,0,WIDTH(101),HEIGHT(101)
SELECT i%
    CASE 59: ' décalage à gauche
        FOR i% = 0 TO dic-2
            FOR j% = 0 TO dic-1
                cr = COLOR_PIXEL_RED(101,i%+1,j%)
                cg = COLOR_PIXEL_GREEN(101,i%+1,j%)
                cb = COLOR_PIXEL_BLUE(101,i%+1,j%)
                2D_PEN_COLOR cr,cg,cb: 2D_POINT i%,j%
            NEXT j%
        NEXT i%
        2D_PEN_COLOR 255,255,255: FOR j% = 0 TO dic-1: 2D_POINT dic-1,j%: NEXT j%
    CASE 60: ' décalage vers le haut
        FOR j% = 0 TO dic-2
            FOR i% = 0 TO dic-1
                cr = COLOR_PIXEL_RED(101,i%,j%+1)
                cg = COLOR_PIXEL_GREEN(101,i%,j%+1)
                cb = COLOR_PIXEL_BLUE(101,i%,j%+1)
                2D_PEN_COLOR cr,cg,cb: 2D_POINT i%,j%
            NEXT i%
        NEXT j%
        2D_PEN_COLOR 255,255,255: FOR i% = 0 TO dic-1: 2D_POINT i%,dic-1: NEXT i%
    CASE 61: ' décalage vers le bas
        FOR j% = dic-1 TO 1 STEP -1
            FOR i% = 0 TO dic-1
                cr = COLOR_PIXEL_RED(101,i%,j%-1)
                cg = COLOR_PIXEL_GREEN(101,i%,j%-1)
                cb = COLOR_PIXEL_BLUE(101,i%,j%-1)
                2D_PEN_COLOR cr,cg,cb: 2D_POINT i%,j%
            NEXT i%
        NEXT j%
        2D_PEN_COLOR 255,255,255: FOR i% = 0 TO dic-1: 2D_POINT i%,0: NEXT i%
    CASE 62: ' décalage à droite
        FOR i% = dic-1 TO 1 STEP -1
            FOR j% = 0 TO dic-1
                cr = COLOR_PIXEL_RED(101,i%-1,j%)
                cg = COLOR_PIXEL_GREEN(101,i%-1,j%)
                cb = COLOR_PIXEL_BLUE(101,i%-1,j%)
                2D_PEN_COLOR cr,cg,cb: 2D_POINT i%,j%
            NEXT j%
        NEXT i%
        2D_PEN_COLOR 255,255,255: FOR j% = 0 TO dic-1: 2D_POINT 0,j%: NEXT j%
END_SELECT
GOSUB Recop
RETURN

Recop:
' recopie de l'icône réelle dans la zone dessin
2D_TARGET_IS 100
FOR j% = 0 TO dic-1
    FOR i% = 0 TO dic-1
        cr = COLOR_PIXEL_RED(101,i%,j%)
        cg = COLOR_PIXEL_GREEN(101,i%,j%)
        cb = COLOR_PIXEL_BLUE(101,i%,j%)
        2D_PEN_COLOR cr,cg,cb: 2D_FILL_COLOR cr,cg,cb
        2D_RECTANGLE i%*pas+1,j%*pas+1,i%*pas+pas,j%*pas+pas
    NEXT i%
NEXT j%
RETURN

Undo:
2D_TARGET_IS 101: 2D_IMAGE_PASTE 89,0,0: GOSUB Recop
RETURN

Dat2Clip:
a$ = TEXT$(71)
IF a$ = ""
    MESSAGE "Pas de nom d'icône !": RETURN
END_IF
wpi% = WIDTH(101): hpi% = HEIGHT(101)
a$ = "DATA "+CHR$(34)+a$+CHR$(34)
a$=a$ + ","+CHR$(34)+STR$(wpi%)+"x"+STR$(hpi%)+CHR$(34)+CHR$(13)+CHR$(10)
a$=a$ + "DATA " + CHR$(34)
n = 3: ' nb de lignes de pixels par ligne de datas
IF wpi% > 24 THEN n = 2
IF wpi% > 32 THEN n = 1
FOR j% = 0 TO hpi%-1 STEP n
    FOR q% = j% TO j%+n-1
        FOR i% = 0 TO wpi%-1
            clo%=65536*COLOR_PIXEL_RED(101,i%,q%)+256*COLOR_PIXEL_GREEN(101,i%,q%)
            clo%=clo%+COLOR_PIXEL_BLUE(101,i%,q%)
            FOR k% = 0 TO 7
                IF clo% = cll%(k%) THEN EXIT_FOR
            NEXT k%
            a$ = a$ + STR$(k%)
        NEXT i%
        a$ = a$ + CHR$(34)+","+CHR$(34)
    NEXT q%
    a$ = LEFT$(a$, LEN(a$)-2) + CHR$(13) + CHR$(10) + "DATA " + CHR$(34)
NEXT j%
a$ = LEFT$(a$, LEN(a$)-8)
CLIPBOARD_STRING_COPY a$
RETURN

Chct:
FOR i% = 30 TO 42
    IF CLICKED(i%) = 1 THEN EXIT_FOR
NEXT i%
IF i% = 39 OR i% = 41 THEN dct = 1: RETURN
IF i% = 40 OR i% = 42 THEN dcf = 1: RETURN
IF dct = 0 AND dcf = 0 THEN RETURN
cr = COLOR_PIXEL_RED(i%,10,1)
cg = COLOR_PIXEL_GREEN(i%,10,1)
cb = COLOR_PIXEL_BLUE(i%,10,1)
k% = i%-30: ' couleur cliquée
IF dct = 1
    i% = 39: COLOR i%, cr,cg,cb: ctr = cr: ctb = cb: ctg = cg
ELSE
    i% = 40: COLOR i%, cr,cg,cb: cfr = cr: cfg = cg: cfb = cb
END_IF
IF k% = 8: ' couleur transparente
    2D_TARGET_IS i%: 2D_LINE 0,0,WIDTH(i%),HEIGHT(i%)
    2D_LINE 0,HEIGHT(i%),WIDTH(i%),0
END_IF
dct = 0: dcf = 0
RETURN

Coutil:
FOR i% = 50 TO 57
    IF CLICKED(i%) = 1 THEN EXIT_FOR
NEXT i%
IF i% = 57
    2D_TARGET_IS 101: CLS: GOSUB Recop: RETURN: ' RAZ
END_IF
2D_TARGET_IS outil: 2D_PEN_COLOR 164,164,164: 2D_PEN_WIDTH 2
2D_LINE 1,1,29,1:2D_POLY_TO 29,29:2D_POLY_TO 1,29: 2D_POLY_TO 1,1
outil = i%: x1% = -1
2D_TARGET_IS outil: 2D_PEN_COLOR 255,0,0: 2D_PEN_WIDTH 2
2D_LINE 1,1,29,1:2D_POLY_TO 29,29:2D_POLY_TO 1,29: 2D_POLY_TO 1,1
RETURN

Import:
OPEN_DIALOG 99: fi$ = FILE_NAME$(99): DELETE 99
IF LEN(fi$) < 3 THEN RETURN
TEXT 66,fi$
EXECUTE_WAIT iv$ + fi$ + "/info=C:\Temp\whim.tmp"
FILE_OPEN_READ 1, "C:\Temp\whim.tmp"
WHILE FILE_EOF(1) = 0
    FILE_READLN 1, a$
    IF LEFT$(a$, 16) = "Image dimensions"
        a$ = MID$(a$, 20, 16)
        i% = VAL(LEFT$(a$, INSTR(a$," ")-1)): a$ = MID$(a$, INSTR(a$,"x")+2,16)
        j% = VAL(LEFT$(a$, INSTR(a$," ")-1)): EXIT_WHILE
    END_IF
END_WHILE
FILE_CLOSE 1: FILE_DELETE "C:\Temp\whim.tmp"
IF i% > j%
    a$ = " /resize=("+STR$(dic)+",0 /aspectratio"
ELSE
    a$ = " /resize=(0,"+STR$(dic)+") /aspectratio"
END_IF
a$ = a$ + " /convert=C:\Temp\tmp.jpg"
EXECUTE_WAIT iv$ + fi$ + a$
FILE_LOAD 101, "C:\Temp\tmp.jpg": ' STRETCH_ON 101
FILE_DELETE "C:\Temp\tmp.jpg"
GOSUB Redcoul
GOSUB Recop
RETURN

Redcoul:
2D_TARGET_IS 101
FOR j% = 0 TO dic-1
    FOR i% = 0 TO dic-1
        cr = COLOR_PIXEL_RED (101,i%,j%): cg = COLOR_PIXEL_GREEN (101,i%,j%)
        cb = COLOR_PIXEL_BLUE (101,i%,j%)
        IF cr < 128
            cr = 0
        ELSE
            cr = 255
        END_IF
        IF cg < 128
            cg = 0
        ELSE
            cg = 255
        END_IF
        IF cb < 128
            cb = 0
        ELSE
            cb = 255
        END_IF
        2D_PEN_COLOR cr,cg,cb: 2D_POINT i%,j%
    NEXT i%
NEXT j%
RETURN

Clipico:
a$ = CLIPBOARD_STRING_PASTE$
IF LEFT$(a$, 5) <> "DATA "
    MESSAGE "Le presse-papier ne contient pas de DATAs !": RETURN
END_IF
FILE_OPEN_WRITE 1, "C:\Temp\tmp": FILE_WRITELN 1, a$: FILE_CLOSE 1
DLIST 99: FILE_LOAD 99, "C:\Temp\tmp": FILE_DELETE "C:\Temp\tmp"
DIM wic, hic, xic, yic, kic, dti$, rbi%, gbi%, bbi%
dti$ = ITEM_READ$(99, 1): dti$ = MID$(dti$, 7, 100)
kic = INSTR(dti$, ","): TEXT 71, LEFT$(dti$, kic-2): dti$ = MID$(dti$,kic+2,100)
dti$ = LEFT$(dti$, LEN(dti$)-1)
kic = INSTR(dti$, "x"): wic = VAL(LEFT$(dti$,kic-1)): hic = VAL(MID$(dti$,kic+1,10))
dic = wic: GOSUB Desgril
DLIST 98
FOR yic = 2 TO COUNT(99)
    dti$ = MID$(ITEM_READ$(99, yic),7,200)
    kic = INSTR(dti$, ",")
    WHILE kic > 0
        ITEM_ADD 98, LEFT$(dti$, kic-2)
        dti$ = MID$(dti$, kic+2, 100): kic = INSTR(dti$, ",")
    END_WHILE
    ITEM_ADD 98, LEFT$(dti$, LEN(dti$)-1)
NEXT yic
2D_TARGET_IS 101
FOR yic = 0 TO hic-1
    dti$ = ITEM_READ$(98, yic+1)
    FOR xic = 0 TO wic-1
        kic = VAL(MID$(dti$, xic+1, 1))
        IF kic < 8: ' couleur non transparente
            clo% = cll%(kic): rbi%=INT(clo%/65536)
            gbi%=INT(BIN_AND(clo%,65535)/256): bbi%=BIN_AND(clo%,255)
        ELSE
            rbi% = 192: gbi% = 192: bbi% = 192
        END_IF
        2D_PEN_COLOR rbi%,gbi%,bbi%: 2D_POINT xic,yic
    NEXT xic
NEXT yic
DELETE 98: DELETE 99
FREE wic: FREE hic: FREE xic: FREE yic: FREE kic: FREE dti$
FREE rbi%: FREE gbi%: FREE bbi%
GOSUB Recop
RETURN

Aide:
b$ = CHR$(13)+CHR$(10)
a$ = CHR$(9)+CHR$(9)+"-  FABRICATION D'ICONES SIMPLES  -"+b$+b$
a$=a$+"- Choisir le format de l'icône: 16x16, 24x24, 32x32, 48x48, 64x64"+b$
a$=a$+"- Choisir l'épaisseur du tracé ('Epaisseur trait')"+b$
a$=a$+"- Choisir les couleurs de tracé et de remplissage: cliquer sur le type,"+b$
a$=a$+"puis sur la couleur désirée."+b$
a$=a$+"NB: il existe une couleur 'transparente'."+b$
a$=a$+"- Choisir l'outil de dessin parmi ceux proposés: point, trait, rectangle"+b$
a$=a$+"vide ou plein, cercle vide ou plein, remplissage, effacement total du"+b$
a$=a$+"dessin (RAZ)."+b$
a$=a$+"  Outils de décalage d'1 pixel de la totalité de l'image à droite, gauche,"+b$
a$=a$+"haut ou bas."+b$+b$
a$=a$+"Il est possible d'importer depuis le presse-papier une icône sauvegardée"+b$
a$=a$+"précédemment sous forme de lignes de DATAs par le programme, ou copiées"+b$
a$=a$+"dans le presse-papier par un éditeur de textes (bouton CLIPBOARD -> ICONE)."+b$
a$=a$+"Ceci pour permettre de retoucher une icône déjà existante dans un programme"+b$
a$=a$+"ou dans une collection d'icônes personnelle."+b$+b$
a$=a$+"Il est également possible d'importer une icône existante quelconque,"+b$
a$=a$+"(cliquer dans la zone 'importer' pour choisir), mais il faut savoir qu'elle"+b$
a$=a$+"sera ramenée aux dimensions choisies pour l'icône, et surtout que ses"+b$
a$=a$+"couleurs seront réduites à la palette de 8 couleurs proposées ici, ce qui"+b$
a$=a$+"peut provoquer des résultats un peu... surprenants."+b$+b$
a$=a$+"La touche 'Undo' permet d'annuler la dernière opération effectuée."+b$+b$
a$=a$+"Le résultat est sauvegardé dans le presse-papier (bouton DATA->CLIPBOARD)"+b$
a$=a$+"sous la forme de lignes de DATAs, précédées du nom de l'icône, à fournir"+b$
a$=a$+"obligatoirement, et de ses dimensions, également sous la forme d'une ligne"+b$
a$=a$+"de DATA."+b$
a$=a$+"Ces éléments sont à 'coller' dans un programme Panoramic pour exploitation"+b$
a$=a$+"par un sous-programme d'affichage d'icônes obéissant aux mêmes normes,"+b$
a$=a$+"notamment de palette réduite de couleurs."+b$
MESSAGE a$
RETURN
2) L'affichage des boutons avec icône et texte
Déjà publié plus haut, on voit l'affichage d'un bouton avec une icône constituée avec le module ci-dessus qui se retrouve ici sous forme de lignes de datas (chaque chiffre correspond à la couleur du pixel correspondant, la série est précédée du nom et du format de l'icône).
On remarquera la couleur transparente ( = 8 ) autour du dessin.
Le centrage du texte tient compte de la présence éventuelle d'une icône à gauche du bouton.
Code:
' Boutons à la demande: texte multiple, icône éventuelle
LABEL Bouton, Desico, Pourvoir
DIM n, xb, yb, lb, hb, tb$, ib$, xi, yi, i%, j%, k%, a$

n = 10: lb = 120: hb = 40: xb = 70: yb = 10
tb$ = "Opération#interdite": ' texte du bouton
ib$ = "IcForbid": ' icône du bouton
GOSUB Bouton: ON_CLICK n, Pourvoir
' bouton classique Panoramic, pour comparaison:
button 20: top 20, 10: left 20, xb+lb+10: width 20, 90: caption 20, "Bouton classique"
END

DATA "IcForbid","24x24"
DATA "888888888888888888888888","888888888111111888888888","888888811111111118888888"
DATA "888881111111111111188888","888811111111111111118888","888111111111111111111888"
DATA "888111111111111111111888","881111111111111111111188","881111111111111111111188"
DATA "811111111111111111111188","811777777777777777777118","811777777777777777777118"
DATA "811777777777777777777118","811777777777777777777118","811111111111111111111188"
DATA "881111111111111111111188","881111111111111111111188","888111111111111111111888"
DATA "888111111111111111111888","888811111111111111118888","888881111111111111188888"
DATA "888888811111111118888888","888888888811118888888888","888888888888888888888888"

Bouton:
' paramètres en entrée: n, xb, yb, lb, hb, tb$ (caption), ib$ (icône éventuelle)
DIM rbt, gbt, bbt, nbt, ibt, jbt, kbt, tbt$(10)
rbt=192: gbt=192: bbt=192: ' couleur du bouton: gris
rbt=164: gbt=255: bbt=255: ' idem, cyan
PICTURE n: TOP n, yb: LEFT n, xb: WIDTH n, lb: HEIGHT n, hb
2D_TARGET_IS n: PRINT_TARGET_IS n
2D_FILL_COLOR rbt,gbt,bbt: 2D_PEN_COLOR rbt/2,gbt/2,bbt/2
2D_PEN_WIDTH 2: 2D_RECTANGLE 0,0,WIDTH(n),HEIGHT(n)
xi = 0
IF ib$ <> "": ' il y a une icône
    xi = 4: yi = (hb-24)/2: GOSUB Desico: ' icône 24x24
END_IF
2D_FILL_COLOR rbt,gbt,bbt: 2D_PEN_WIDTH 1
2D_PEN_COLOR 255,255,255: 2D_LINE 1,hb-2,1,1: 2D_POLY_TO lb-2,1
nbt = 0
kbt = INSTR(tb$, "#"): ' séparateur de lignes éventuel
WHILE kbt > 0
    nbt = nbt+1: tbt$(nbt) = LEFT$(tb$,kbt-1): tb$ = MID$(tb$, kbt+1, 100)
    kbt = INSTR(tb$, "#")
END_WHILE
nbt = nbt+1: tbt$(nbt) = tb$
ibt = TEXT_WIDTH(tb$,n): jbt = TEXT_HEIGHT(tb$,n)
FOR kbt = 1 TO nbt
    ibt = TEXT_WIDTH(tbt$(kbt),n)
    PRINT_LOCATE xi+(lb-xi-ibt)/2,(kbt-1)*jbt+(hb-jbt*nbt)/2: PRINT tbt$(kbt)
NEXT kbt
2D_TARGET_IS 0: PRINT_TARGET_IS 0
FREE rbt: FREE gbt: FREE bbt: FREE ibt: FREE jbt: FREE kbt: FREE tbt$
RETURN

Desico:
' Affichage de l'icône ib$ en xi, yi du 2d_Target
DIM clo%, cll%(10), rbi%, gbi%, bbi%, wic, hic, xic, yic, kic
' couleurs: Noir, Rouge, Vert, Bleu, Jaune, Magenta, Cyan, Blanc, Transparent (8)-
cll%(0)=0: cll%(1)=255*65536:cll%(2)=255*256:cll%(3)=255:cll%(4)=65536*255+256*255
cll%(5)=65536*255+255:cll%(6)=256*255+255:cll%(7)=65536*255+256*255+255
READ a$
WHILE a$ <> ib$: READ a$: END_WHILE
READ a$: wic = VAL(LEFT$(a$, 2)): hic = VAL(RIGHT$(a$, 2))
FOR yic = 0 TO hic-1
    READ a$
    FOR xic = 0 TO wic-1
        kic = VAL(MID$(a$, xic+1, 1))
        IF kic < 8: ' couleur non transparente
            clo% = cll%(kic): rbi%=INT(clo%/65536)
            gbi%=INT(BIN_AND(clo%,65535)/256): bbi%=BIN_AND(clo%,255)
            2D_PEN_COLOR rbi%,gbi%,bbi%: 2D_POINT xi+xic,yi+yic
        END_IF
    NEXT xic
NEXT yic
xi = xi + wic: ' index de la zone disponible pour le texte
FREE clo%: FREE cll%: FREE rbi%: FREE gbi%: FREE bbi%
FREE wic: FREE hic: FREE xic: FREE yic: FREE kic
RETURN

Pourvoir:
' Gadget, juste pour voir l'effet du clic sur le bouton (enfoncement)
DIM ldn, hdn
2D_TARGET_IS n: 2D_PEN_COLOR 0,0,0: ldn = WIDTH(n): hdn = HEIGHT(n)
2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 255,255,255: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
WAIT 500: 2D_LINE 1,hdn-2,1,1: 2D_POLY_TO ldn-2,1
2D_PEN_COLOR 0,0,0: 2D_LINE 2,hdn-2,ldn-2,hdn-2:2D_POLY_TO ldn-2,2
2D_TARGET_IS 0
print "Cliqué !"
FREE ldn: FREE hdn
RETURN

Edit 14/03 module Bouton (2): L'affichage de l'icône est faite par un s/p indépendant (appelé par le s/p Bouton), pour pouvoir afficher l'icône sur n'importe quel 2d_Target.
Edit 15/03 dessin d'icônes (1): possibilité d'importation d'icônes existantes
Edit 16/03 dessin d'icônes (1): rappel d'une icône précédente depuis le presse-papier, et ajout de la fonction 'undo'.
Edit 17/03 dessin d'icônes (1) ajout des formats 48x48 et 64x64. Ajout de fonctions de décalage d'un pixel dans les 4 directions gauche, droite, haut, bas.


Dernière édition par JL35 le Sam 17 Mar 2012 - 18:51, édité 9 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 4989
Age : 63
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Boutons à la demande   Mar 13 Mar 2012 - 20:57

Là je dit; RESPECT !

The KIT for BUTTON ! cheers


Une petite manip à faire pour transférer les data (supprimer le 24") et reprendre la ligne du prog.

Bravo
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Boutons à la demande   Mar 13 Mar 2012 - 22:44

J'adore (en plus, ton programme et facilement utilisable pour faire un éditeur de niveau, mais bon, ça c'est une autre histoire ....)
Merci JL35
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Mer 14 Mar 2012 - 3:33

J'ai édité pour des bricoles.

@Jicehel, l'utilisation est évidemment laissée à l'imagination de chacun.

@Jean Claude... pas bien compris ta remarque (supprimer le 24" ?)
Il suffit de coller le clipboard dans l'éditeur Panoramic, à l'emplacement voulu dans le programme cible (en fait n'importe où).
là-dessus bonne nuit à tous, et je ne suis pas là avant demain soir... enfin, vu l'heure, ce soir ! Sleep
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Mer 14 Mar 2012 - 23:41

Edit du 14/03:
Pour faire plus modulaire, j'ai extrait du s/p d'affichage du pseudo-bouton illustré ('Bouton') l'affichage de l'icône elle-même, pour en faire un s/p indépendant qui permet d'afficher une icône créée par la méthode précédente d'être affichée non plus seulement sur un bouton mais sur n'importe quelle cible 2d_Target, pour agrémenter une présentation par exemple.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5849
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Boutons à la demande   Mer 14 Mar 2012 - 23:54

On approche de plus en plus de la librairie de sous programme. Excellent JL35
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Jeu 15 Mar 2012 - 0:32

C'est un peu le but recherché, à travers tout ça.

Bonne nuit à tous !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Boutons à la demande   Jeu 15 Mar 2012 - 20:22

Edit du 15/03: dans le programme de dessin d'icônes, possibilité d'importation d'icônes existantes, avec forte dégradation éventuelle de l'aspect du fait des dimensions généralement réduites, et surtout de la réduction de la palette de couleurs à 8, mais enfin ça donne la forme générale, sur laquelle on peut redessiner.

Edit du 16/03: idem, possibilité de rappel d'une icône depuis le clipboard (retouche d'une icône existante).
Et ajout du bouton 'Undo', pour annuler la dernière opération de traçage.

Edit du 17/03: idem, ajout des formats 48x48 et 64x64, + ajout de boutons de décalage de l'image entière dans les directions gauche, droite, haut et bas, pour recadrage éventuel.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Boutons à la demande   

Revenir en haut Aller en bas
 
Boutons à la demande
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Annulée] Demande de page d'aceuil
» probleme pour faire un lien avec mes boutons
» [Annulée] Demande de description des catégories.
» boutons à la place du dispatcher
» [Resolu] Disparitions de boutons et autres !

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 :: Les inutilitaires-
Sauter vers: