Revenir au plan du site
Un objet texte à positionner n'importe où
struct s_texte
struct s_gui gui ; commun à tous les objets de la GUI
adresse_ecran defw ; position écran
adresse_chaine defw ; pointeur sur la chaine
endstruct
|
L'objet n'est pas interactif, il va nous permettre de construire l'écran avant les interactions, on pourra
appeler différentes routines d'affichage pour le texte, par exemple une routine qui affiche les caractères
à la verticale.
On va ajouter des caractères graphiques typiques des interfaces MSDOS ^_^
Voici notre fonte mise à jour

Et les nouvelles définitions de caractères qu'on ajoute à la suite dans guiGlobal.asm
; décoration dans la fonte
cadre_arron_hg=caractere_etendu : caractere_etendu+=1
cadre_horiz_h =caractere_etendu : caractere_etendu+=1
cadre_arron_hd=caractere_etendu : caractere_etendu+=1
cadre_verti_d =caractere_etendu : caractere_etendu+=1
cadre_arron_bg=caractere_etendu : caractere_etendu+=1
cadre_arron_bd=caractere_etendu : caractere_etendu+=1
cadre_verti_g =caractere_etendu : caractere_etendu+=1
cadre_horiz_b =caractere_etendu : caractere_etendu+=1
|
Le code de gestion de l'affichage horizontal va être aussi simple que... ...ça
GUITexteHGestion
; code ignoré, on affiche
ld hl,(ix+s_texte.adresse_chaine) : exx
ld de,(ix+s_texte.adresse_ecran)
jp GUIDisplayString
|
À peine moins simple, l'affichage vertical va découper le texte en morceaux, calculer l'adresse suivante...
GUITexteVGestion
ld hl,(ix+s_texte.adresse_chaine)
ld de,(ix+s_texte.adresse_ecran)
.reloop
ld a,(hl) : or a : ret z : ld (GUISingleChar),a
push hl,de
exx : ld hl,GUISingleChar : exx
call GUIDisplayString
pop de : ld hl,80 : add hl,de : ex hl,de
pop hl : inc hl
jr .reloop
;
GUISingleChar defb 0,0
|
Dans notre POC, on va se créer un cadre, c'est un peu laborieux, on se fera des primitives plus tard. D'abord les chaines
utilisant nos nouveaux caractères et ensuite des structures qui vont dérouler lors de l'initialisation et afficher
nos chaines horizontalement et verticalement.
cadre_haut defb cadre_arron_hg : defs 24,cadre_horiz_h : defb cadre_arron_hd,0
cadre_bas defb cadre_arron_bg : defs 24,cadre_horiz_b : defb cadre_arron_bd,0
cadre_gauche defs 2,cadre_verti_g : defb 0
cadre_droite defs 2,cadre_verti_d : defb 0
NULL=0
struct s_texte tt01 ,1,GUITexteHGestion ,0,tt02 ,NULL,#C000+80*0,cadre_haut
struct s_texte tt02 ,1,GUITexteHGestion ,0,tt03 ,NULL,#C000+80*3,cadre_bas
struct s_texte tt03 ,1,GUITexteVGestion ,0,tt04 ,NULL,#C000+80*1,cadre_gauche
struct s_texte tt04 ,1,GUITexteVGestion ,0,check1,NULL,#C000+80*1+50,cadre_droite
struct s_checkbox Check1 ,1,GUICheckBoxGestion ,1,Check2,Check2,#C000+80*1+2,0,0,'Première coche' ; première sélectionnée
struct s_checkbox Check2 ,1,GUICheckBoxGestion ,0,Check1,Check1,#C000+80*2+2,0,0,'Deuxième coche'
|
Et voilà le résultat :)

Pour les fichiers, ça se passe
[ ICI ]