Les Objets
From PilibWiki
Section Précédente : Premier Programme | | Retour au sommaire | | Section Suivante : Organiser une fenêtre
Il est maintenant temps d'apprendre a utiliser les objets qui vous intéressent. J’entends par objets les boutons, les zones de texte, mes menus, ...
Une fois que vous aurez fait le tour de ceux qui vous intéressent, rendez vous la section « Organiser sa fenêtre ».
Contents |
Les fenêtres
Dans cette section, nous allons apprendre a générer une simple fenêtre avec gkwindow. Vous pouvez vous referez la section gkwindow dans le fichier pilib.html inclus dans la pack PILIB pour plus d'informations sur les types (integer, string, ...). La subroutine gkwindow est structuréé de cette manière :
gkwindow(caption,iborder,istate,window,iclos)
- caption
- le texte affiché dans l'entête de la fenêtre.
- iborder
- taille de la fenêtre. Par exemple, si vous mettez 200, vous aurez une fenêtre de 200x200 pixels.
- istate
- l’état de la fenêtre : 0 pour normal ("restored") et 1 pour maximisé
- window
- le nom de la fenêtre pour le programme. Nous utiliserons ce nom pour appeler la fenêtre. Attention, donnez des noms explicites pour ne pas vous perdre.
- iclos
- cette argument vaut 0 en temps normal, et vaut 1 lorsque la fenêtre est ferme. Remarque : La fenêtre reste ouverte jusqu' l'appelle de gkdestroy.
Exemple :
program example
use pimod
implicit none
integer(kind=kptr) :: Win,iclos
call piinit
call gkwindow(c('window example'),100,0,Win,iclos)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
Le Texte ou Label
Dans cette section, nous allons apprendre à générer un objet texte avec gktext. Vous pouvez vous referez à la section gktext dans le fichier pilib.html inclus dans la pack PILIB pour plus d'informations sur les types (integer, string, ...). (Vous pouvez changer de texte en cours de programme avec la fonction gksetstring, voir section suivante avec les zones de texte.) La subroutine gktext est structurée de cette manière :
gktext(texte,nom)
- texte
- le texte afficher.
- nom
- le nom du texte pour le programme.
Exemple :
program example
use pimod
implicit none
integer(kind=kptr) :: i,Win,iclos,Text
call piinit
call gkwindow(c('Texte'),0,0,Win,iclos)
call gktext(c('Salut les amiches'),Text)
call gkput(0,0,-1,-1,Win,Text)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
Les boutons
Dans cette section, nous allons apprendre à générer un objet bouton avec gkbutton. Vous pouvez, encore une fois et comme toujours, vous referez la section gkbutton dans le fichier pilib.html inclus dans la pack PILIB pour plus d'informations sur les types (integer, string, ...). La subroutine gkbutton est structurée de cette manière :
gkbutton(texte,nom,iclick)
- texte
- le texte afficher dans le bouton.
- nom
- le nom du bouton pour le programme.
- iclick
- variable entière associée à ce bouton. De valeur 0 en temps normal, elle change de valeur et passe à 1 lorsque l'utilisateur clique sur le bouton.
Exemple :
program example
use pimod
implicit none
integer(kind=kptr) :: i,Win,iclos,But
call piinit
call gkwindow(c('Bouton'),0,0,Win,iclos)
call gkbutton(c('Ceci est un bouton'),But,i)
call gkput(0,0,-1,-1,Win,But)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
Les zones de texte ou Text Field
Dans cette section, nous allons apprendre à générer une zone de texte sur une ligne avec gkxedt et une sur plusieurs lignes avec gkzedt (le nom n'est pas vraiment explicite ce coup çi, je vous l'accorde). Bon, cette fois là , vous avez compris, referez vous la section gkxedt ou gkzedt pour plus d'infos.
Afin de récupérer ou de mettre du texte dans ces zones (en imaginant que nous avons une zone de texte de nom 'ihzonedetext'), il faut utiliser les fonctions :
gksetstring pour mettre du texte :
gksetstring(c('tapez ici votre texte'),ihzonedetext)
gkgetstring pour récupérer le texte :
gkgetstring(message,ihzonedetext)
Remarque : 'message' est ici une variable type(string) qui vaudra le texte qui était dans la zone de texte au moment de l'appel de la fonction gkgetstring.)
La subroutine gkxedt est structurée de cette manière :
gkxedt(len,nom)
- len
- nombre maximum de caractères possibles. 0 pour infinie.
- nom
- le nom de la zone de texte pour le programme.
La subroutine gkzedt est structurée de cette manière :
gkzedt(scroll,nom)
- scroll
- nom du container dans lequel est placé la zone de texte. Attention !! Le gkcontain correspondant (voir la section « Organiser sa fenêtre ») doit être de type scroll.
- nom
- le nom de la zone de texte pour le programme.
exemple Zone de texte basique :
program example
use pimod
implicit none
integer(kind=kptr) :: i,Win,iclos,TextField
call piinit
call gkwindow(c('Zone de texte'),0,0,Win,iclos)
call gkxedt(50,TextField)
call gkput(0,0,-1,-1,Win,TextField)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
exemple grosse zone de texte :
program example
use pimod
implicit none
integer(kind=kptr) :: i,Win,iclos,zedt,contain
call piinit
call gkwindow(c('Zone de texte scroll'),0,0,Win,iclos)
call gkcontain(2,-1,-1,0,contain)
call gkzedt(contain,zedt)
call gkput(0,0,-1,-1,Win,contain)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
Les barres de chargement
Dans cette section, nous allons apprendre à gérer une barre de chargement avec gkbar. Referez vous la section gkbar pour plus d'infos.
La subroutine gkbar est structuré de cette manière :
gkbar(nom)
- nom
- le nom de la barre pour le programme.
Pour gérer l'avancement de la barre, il est nécessaire d'utiliser la fonction gksetfloat. Par exemple, si votre barre a pour nom 'ihbar', avec la ligne de code :
gksetfloat(0.5DO,ihbar)
La barre sera à 50 pour cents. Les valeurs en pourcentage sont comprises entre 0 et 1 (0 et 100 pour cent) et doivent être des réels de taille 8. ( l'utilisation de 'D0' signifiant 'fois 10 puissance 0 pour un float de taille 8', je vous rappelle au passage que PILIB nécessite des réels de taille 8).
program example
use pimod
implicit none
integer(kind=kptr) :: Win,iclos,barre
call piinit
call gkwindow(c('Barre'),0,0,Win,iclos)
call gkbar(barre)
call gksetfloat(0.7D0,barre)
call gkput(0,0,-1,-1,Win,barre)
call gkshow(Win)
do while(iclos.eq.0)
call gkproc
end do
call gkdestroy(Win)
end program example
Les Boîtes de Dialogue : MSGBOX
Dans cette section, nous allons apprendre gérer une boite de dialogue avec gkmsgbox. Referez vous à la section gkmsgbox pour plus d'infos. La subroutine gkmsgbox est structuré de cette manière :
gkmsgbox(texte,ibouton,icone,iaction)
- texte
- le texte à afficher dans la boîte de dialogue.
- ibouton
- L'entier ibutton décrit les boutons à afficher, entrez les valeurs suivantes pour obtenir la combinaison souhaité :
1: OK
2: Close
3: Cancel
4: Yes, No
5: Ok, Cancel
6: Yes, No, Cancel
- icone
- même chose que pour l'affichage des buttons, choisissez l'icone à afficher :
0: Info
1: Warning
2: Question
3: Error
- iaction
- l'entier iaction prend la valeur du bouton pressé. Par exemple, si l'utilisateur presse 'Yes', iaction vaudra 4 à la fermeture de la boîte de dialogue.
1: Ok
2: Cancel
3: Close
4: Yes
5: No
Pour plus d'explications sur le fonctionnement des MessagesBoxes, rendez vous à la section prévue à cet effet dans la section Les Bases pour programmer avec PILIB.
Les Listes
Dans cette section, nous allons apprendre gérer une liste avec gklist. Attention, afin de permettre l'accés au site en faible résolution, certaines lignes ont été coupées, puis reportés sur la ligne suivante. Le symbole suivant les accompagnes : /!\. La subroutine gklist est structuré de cette manière :
subroutine gklist(titrescol,largeurscol, /!\
positiontexte,nbcol,pas,scroll,nomListe)
- titrescol
- Titres des différentes colonnes.
- largeurscol
- Largeur en pixels des différentes colonnes.
- positiontexte
- position du texte dans les différentes colonnes.
0.0: gauche
0.5: centre
1.0: droite
- nbcol
- nombre de colonnes.
- pas
- pas en x entre les textes.
- scroll
- nom du container scroll.
- nomListe
- nom de la liste pour le programme.
Exemple de programme :
program list
use pimod
implicit none
integer(kind=kptr) :: ihwin,iclos,ihscrollcontain,ihlist
integer(kind=kptr), dimension (3) :: ihwidth
real(kind=kdouble), dimension (3) :: ihalign
type(string) :: cols(3),vals1(3),vals2(3),vals3(3)
cols(1)=c('Nom')
ihwidth(1)=100
ihalign(1)=0.5D0
cols(2)=c('Prenom')
ihwidth(2)=100
ihalign(2)=0.5D0
cols(3)=c('Age')
ihwidth(3)=100
ihalign(3)=0.5D0
vals1(1)=c('Alfred')
vals1(2)=c('Dupond')
vals1(3)=c('13')
vals2(1)=c('Roger')
vals2(2)=c('Delafond')
vals2(3)=c('14')
vals3(1)=c('Dudule')
vals3(2)=c('Pitipoix')
vals3(3)=c('12')
call piinit
call gkwindow(c('gklist'),0,0,ihwin,iclos)
call gkcontain(2,0,0,0,ihscrollcontain)
call gklist(cols(1:3),ihwidth(1:3),ihalign(1:3), /!\
3,0,ihscrollcontain,ihlist)
call gklistins(1,vals1(1:3),3,ihlist)
call gklistins(2,vals2(1:3),3,ihlist)
call gklistins(3,vals3(1:3),3,ihlist)
call gkput(0,0,300,100,ihwin,ihscrollcontain)
call gkshow(ihwin)
DO WHILE(iclos.eq.0)
call gkproc
END DO
call gkdestroy(ihwin)
end program list
Les Selectionneurs de fichier
Dans cette section, nous allons apprendre gérer Les Selectionneurs de fichier avec gkfilesel. Attention, afin de permettre l'accés au site en faible résolution, certaines lignes ont été coupées, puis reportés sur la ligne suivante. Le symbole suivant les accompagnes : /!\ La subroutine gkfilesel est structuré de cette manière :
subroutine gkfilesel(titre,types,description, /!\
ntypes,nomfichier,numérotype)
- titre
- Titre de la fenêtre de selection.
- types
- Types de fichiers (leur extensions).
- description
- Description des types de fichiers. (en relation avec Types de la ligne d'au dessus).
- ntypes
- nombre de types.
- nomfichier
- nom du fichier séléctionné par l'utilisateur.
- numérotype
- numéro du type de fichier séléctionné par l'utilisateur.
Exemple de programme : (il retournera dans l'invite de commande ou la console le nom du fichier séléctionné, ainsi que son numéro de type.)
program fileselect
use pimod
implicit none
integer(kind=kptr) :: nbselected
integer(kind=kptr), dimension (3) :: ihwidth
real(kind=kdouble), dimension (3) :: ihalign
type(string) :: cols(3),pat(3),fichier
cols(1)=c('.f95')
cols(2)=c('.f77')
cols(3)=c('.txt')
pat(1)=c('fichiers fortran95')
pat(2)=c('fichiers fortran77')
pat(3)=c('fichiers fortrantexte')
call piinit
call gkfilesel(c('Selectionnez le fichier'),cols(1:3), /!\
pat(1:3),3,fichier,nbselected)
print *,f_str2char(fichier)
print *,nbselected
end program fileselect
Section Précédente : Premier Programme | | Retour au sommaire | | Section Suivante : Organiser une fenêtre








