Foire Aux Questions & Conseils
Retrouvez toutes les explications techniques, conseils et astuces officiels pour programmer efficacement avec PANORAMIC.
1 - Généralités
La structure conseillée d'un programme est la suivante :
1 - Déclaration : DIM et LABEL
2 - Programme principal : définition des composants (objets), calculs, comportement, END
3 - Traitement d'événements
Exemple : création d'un bouton qui affiche "Cliquez sur moi", puis "Salut!" quand on a cliqué sur lui.
rem déclaration des étiquettes utilisées
LABEL clk
rem déclaration des variables utilisées
DIM A$
rem --- PROGRAMME PRINCIPAL ---
A$ = "Cliquez sur moi"
rem création d'un OBJET
button 1
rem lui donner un petit texte (son "intitulé")
caption 1,a$
rem définir le traitement quand il est cliqué
on_click 1,clk
rem --- FIN DU PROGRAMME PRINCIPAL ---
end
rem --- TRAITEMENT DES ÉVÉNEMENTS ---
Clk :
caption 1,"Salut!"
return
2 - Monde 3D
1 - Tout d'abord, créez un objet pour visualiser votre monde 3D avec le mot-clé scene3d et lui donner un numéro :
scene3d 1
Une caméra 3D et une lumière 3D sont alors automatiquement créés avec votre scene3d et maintenant vous pouvez les utiliser (pour les positionner et viser un point avec la caméra)
2 - Placer des objets dans votre monde 3D
Vous pouvez créer des objets 3D prédéterminés (3d_box, 3d_cube, 3d_cone, 3d_torus, 3d_sphere, 3d_cylinder, 3d_text, 3d_teapot, 3d_dodecahedron) ou des objets 3D formatés : 3d_mesh (en "3DS" format de Studio 3D Max) ou 3d_actor (en "MD2", format de Quake).
Avec le mot-clé correspondant, vous lui donnez un numéro 3D :
3d_teapot 1
3 - Vous pouvez alors les déplacer, les dimensionner, les faire tourner, les colorer, leur donner une texture...
Créer un monde 3D :
scene3D 1
rem lui donner tout l'espace disponible dans FORM numéro 0
full_space 1
Remarque : pour donner tout l'espace de l'écran à FORM numéro 0 :
full_space 0
En combinant les 2 commandes, vous avez un monde 3D prenant tout l'écran :
full_space 0 : rem FORM0 prend tout l'espace sur l'écran
scene3D 1
full_space 1 : rem SCENE3D prend tout l'espace sur FORM0
Utilisez 3D_TARGET_IS pour désigner le récepteur d'objet 3D
scene3d 1 : rem créer le premier monde 3D
scene3d 2 : rem créer le deuxième monde 3D
left 2,210 : rem le positionner (autrement il recouvre le premier)
3d_teapot 1 : rem créer le premier objet 3D dans le premier monde 3D
3d_target_is 2 : rem assigner le deuxième monde 3D comme le récepteur de commandes 3D
3d_teapot 2 : rem créer le deuxième objet 3D dans le deuxième monde 3D
Utilisez le numéro N du scene3D (le monde 3D a été créé par la commande scene3d N) dans la commande color :
color N, Rouge, Vert, Bleu
3D_X_rotate, 3D_Y_rotate, 3D_Z_rotate sont relatifs aux axes propres de l'objet.
Les axes propres de l'objet 3D sont les axes qui étaient parallèles aux axes du monde quand l'objet 3D a été créé.
Les angles de rotation sont exprimés par rapport à la position d'origine :
3D_X_rotate N,30 : rem positionne l'objet 3D N à 30° par rapport à sa position d'origine
Tous les objets 3D sont créés à la position (0,0,0).
Pour déplacer un objet 3D, utilisez les commandes : 3d_x_position, 3d_y_position, 3d_z_position
Exemple :
rem la sphère n°1 avec rayon=2 est créée en (0,0,0)
3d_sphere 1,2
rem la déplacer en (5,6,7)
3d_x_position 1,5
3d_y_position 1,6
3d_z_position 1,7
rem créez un scene3D (monde 3D)
scene3d 1 : rem 1 est le numéro d'objet
rem créez un objet "maillé"
3d_mesh 1 : rem 1 est le numéro d'objet 3D
rem chargez votre fichier dans l'objet 3D numéro 1
3d_load_object 1,"MonObjet.3ds"
rem créez un scene3D (monde 3D)
scene3d 1 : rem 1 est le numéro d'objet
rem créez un objet3D "acteur"
3d_actor 1 : rem 1 est le numéro d'objet 3D
rem chargez votre fichier dans l'objet 3D numéro 1
3d_load_object 1,"MonObjet.md2"
3 - Objets
Utiliser le numéro N du FORM dans la commande color (0 pour le FORM de Base, ou N pour un FORM créé par la commande form N) :
color N, Rouge, Vert, Bleu
rem mettre le fond en couleur blanche
color 0,255,255,255 : display
Une image a été créée par la commande picture N . Utilisez le numéro N dans la commande color :
color N, Rouge, Vert, Bleu
Voir l'exemple suivant :
rem créer l'objet "menu principal"
main_menu 1
rem créer 2 "sous menus" au même niveau (fils de l'objet numéro 1)
sub_menu 2 : caption 2,"Fichier" : parent 2,1
sub_menu 3 : caption 3,"Edition" : parent 3,1
rem créer 3 "sous-menus" fils de l'objet numéro 2
sub_menu 4 : caption 4,"Ouvrir" : parent 4,2
sub_menu 5 : caption 5,"Sauvegarder" : parent 5,2
sub_menu 6 : caption 6,"Quitter" : parent 6,2
rem créer 3 "sous-menus" fils de l'objet numéro 3
sub_menu 7 : caption 7,"Copier" : parent 7,3
sub_menu 8 : caption 8,"Coller" : parent 8,3
sub_menu 9 : caption 9,"Défaire" : parent 9,3
left et top sont utilisés pour positionner un objet sur son père (son conteneur).
width et height sont utilisés pour dimensionner un objet.
Première possibilité :
form 3 : rem créer un autre FORM (numéro 3)
button 1 : rem créer un BUTTON (numéro 1)
parent 1,3 : rem le BUTTON va sur son père (le container) : FORM numéro 3
Deuxième possibilité :
form 3 : rem créer un autre FORM (numéro 3)
command_target_is 3 : rem toutes les commandes vont sur l'objet numéro 3
button 1 : rem créer un BUTTON : il va sur FORM numéro 3
form 3 : rem créer une autre forme (numéro 3)
command_target_is 3 : rem toutes les commandes vont sur l'objet numéro 3
main_menu 1 : rem créer un menu sur FORM numéro 3
caption 1,"Menu" : rem lui donner un caption le rend visible
Un open_dialog est créé par la commande open_dialog N et est utilisé par la commande file_name$ (N), N étant le numéro de l'open_dialog.
Comme file_name$ retourne soit le nom du fichier choisi par l'utilisateur, soit le caractère souligné "_" si aucun fichier n'est choisi, la valeur rendue doit être stockée dans une variable string puis comparée à "_".
dim a$ : rem déclarer une variable string
open_dialog 1 : rem créer un open_dialog
a$=file_name$(1) : rem choisir un nom de fichier avec l'open_dialog numéro 1
if a$ <> "_" then - - - : rem si a$ contient un nom de fichier, alors - - -
Un save_dialog est créé par la commande save_dialog N et est utilisé par la commande file_name$(N), N étant le numéro du save_dialog.
save_dialog 1 : rem créer un save_dialog
memo 2 : rem créer un memo
rem pour sauvegarder le contenu du memo avec le save_dialog
file_save 2,file_name$(1)
dim a$ : rem déclarer une variable string
picture 1 : rem créer une image
a$="c:\MyPicture.bmp" : rem définir le nom du fichier
file_load 1,a$ : rem le fichier est chargé dans l'image
dim a$ : rem déclarer une variable string
picture 1 : rem créer une image
open_dialog 2 : rem créer un open_dialog
a$=file_name$(2) : rem active l'open_dialog numéro 2
if a$ <> "_" then file_load 1,a$ : rem si un fichier est choisi, le charger dans l'image
Rappel : la fonction file_name$ retourne le caractère souligné "_" si aucun fichier n'a été choisi par l'utilisateur. C'est pourquoi il faut comparer la valeur de a$ avec "_" : if a$ <> "_"
dim a$ : rem déclarer une variable string
memo 1 : rem créer un memo
open_dialog 2 : rem créer un open_dialog
a$ = file_name$(2) : rem activer l'open_dialog
if a$ <> "_" then file_load 1,a$ : rem si un fichier est choisi, le charger dans le memo
Rappel : la fonction file_name$ retourne le caractère souligné "_" si aucun fichier n'a été choisi par l'utilisateur. C'est pourquoi il faut comparer la valeur de a$ avec "_" : if a$ <> "_"
caption N,"Salut" : rem N doit être un numéro de button, d'option, de check, d'alpha ou de form
Cette commande sur un autre type d'objet produit une erreur.
text N,"Salut" : rem N doit être le numéro d'un EDIT ou d'un COMBO
Cette commande sur un autre type d'objet produit une erreur.
Il y a 3 sortes de barres : track_bar, scroll_bar et progress_bar.
- Pour lire la position du curseur :
A=position(N) : rem N est le numéro de l'objet barre.
- Pour changer la position de curseur :
position N, P : rem P est la position à prendre par le curseur de la barre numéro N.
Quand vous créez des barres, elles ont des valeurs standards pour le minimum et le maximum.
- Pour changer la valeur minimale :
min N,M : rem M est la valeur minimale, N est le numéro de l'objet barre.
- Pour changer la valeur maximale :
max N,M : rem M est la valeur maximale, N est le numéro de l'objet barre.
4 - Multimédia
sound 1 : rem créer un son
file_load 1,"file.mid" : rem charger un fichier
play 1 : rem le jouer
sound 1 : rem créer un son
file_load 1,"file.wav" : rem charger un fichier
play 1 : rem le jouer
sound 1 : rem créer un son
file_load 1,"fichier.mp3" : rem charger un fichier
play 1 : rem le jouer
dim a$ : rem déclarer une variable string
a$="c:\MonFilm.avi" : rem définir le nom du fichier
movie 1 : rem créer un film
file_load 1,a$ : rem charger le fichier
play 1 : rem le jouer
5 - Divers
tangente(x) = SIN(x) / COS(x)
- > utiliser SIN(X) / COS(X)
ArcSin(x) = ArcTan(x/sqr(1-sqr(x)))
-> utiliser ATN(X/SQR(1-SQR(X)))
ArcCos(x) = ArcTan(sqr(1-sqr(x)) /x)
-> utiliser ATN(SQR(1-SQR(X))/X)
Voir l'exemple suivant :
dim a$
label loop
loop:
a$=inkey$
if a$="" then goto loop
rem ici, a$ contient la touche qui a été enfoncée
Un sous-programme est un groupe de commandes qui peuvent être traitées un certain nombre de fois.
Un sous-programme commence par un LABEL (que l'on doit déclarer par le mot clé LABEL) et finit par RETURN.
Quand RETURN est exécuté, l'exécution de programme retourne à la commande immédiatement après la commande GOSUB.
Quand un événement (clic, changement) arrive sur un objet, vous définissez dans un sous-programme les commandes à traiter pour répondre à l'événement.
Un sous-programme commence par un LABEL et se termine par RETURN.
Attention : Certains événements ne sont pas possibles avec certains objets !