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 ]
CPCrulez[Content Management System] v8.732-desktop/c Page créée en 341 millisecondes et consultée 12 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|