Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [C] - Les Fkeys Icons
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

[C] - Les Fkeys Icons

Posté le 08/02/2015 00:16

Voila, un petit sujet pour présenter 2-3 petits trucs, même si ça n'est pas forcément ultra utile, y'avait pas trop de doc dessus en dehors de quelques succinctes lignes dans la doc de SimLo... Comme ça y'aura un peu plus de doc qui existera quelque part si quelqu'un utilise la fonction rechercher un jour là dessus ^^...

Même si la tendance actuelle est plutôt de commencer à essayer de se passer un maximum des syscalls de Casio, parfois leur utilisation peut il me semble s'avérer judicieuse, notamment lorsque l'on essaiera de faire un add-in "s'intégrant" bien à l'OS (c'est ce qu'on essaie de faire avec Eigenmath actuellement). L'exemple le plus significatif est peut être l'utilisation de GetKey qui permet de faire bien des choses qui sont en lien avec l'OS !

Ici je vais détailler un peu l'utilisation des syscalls permettant d'utiliser les "Fkeys icons" comme baptisés dans le doc de SimLo', c'est à dire les icônes qui s'affichent au dessus de chaque touche F1 à F6 dans la plupart des applications de Casio.


Comme ici par exemple.


Une fois n'est pas coutume, il y a des syscalls qui s'occupent et gèrent cet affichage.

Syscall n°0268 : GetFKeyIconPointer
Syscall n°04D1 : DisplayFKeyIcon


dont les prototypes sont les suivants :

void GetFKeyIconPointer( int FKeyNo, unsigned char** Bitmap );
void DisplayFKeyIcon( int FKeyPos, unsigned char* Bitmap );


Ils sont un peu différents de la doc de SimLo mais sont plus logiques pour moi comme ceci. Notez aussi qu'il existe un ou deux autres syscall liés à ces icônes, mais je n'ai pas encore eu à les utiliser, donc je ne saurais pas trop en parler pour l'instant ^^...

Le "point faible" de ces syscalls, c'est qu'il ne permettent pas d'afficher (directement) n'importe quoi, dans le sens où vous ne pouvez pas choisir d'afficher n'importe quelle chaîne de texte directement dans vos menus (enfin, si, mais c'est un peu plus compliqué). En fait de base, le système fonctionne avec des bitmaps qui sont intégrés à l'OS. C'est l'adresse de ceux-ci qui va être récupérée par GetFKeyIconPointer : en premier paramètre, elle prend l'ID de l'icône, et en second paramètre l'adresse d'un pointeur qui pointera vers le bitmap en question.
Le truc c'est qu'on avait pas trop de liste précise de l'ensemble des icônes associés à leur ID, du coup, j'avais un peu de temps ce soir et j'ai fait à l'aide d'un petit addin, une sorte de tableau récapitulatif de ce qui existe (du moins dans l'OS embarqué avec l'émulateur du SDK) (il est à "lire" de droite à gauche et de bas en haut si vous cherchez un ordre relatif dans les ID) :


L'ID de l'icône est au dessus de celui-ci.


Du coup il y en a un certain nombre c'est vrai (bon, j'avais un certain temps aussi) ^^, ce qui fait que cette image n'est pas des plus pratique pour en trouver un précis...

Du coup une fois l'adresse récupérée, il suffit d'appeler ensuite DisplayFKeyIcon où FKeyPos sera un nombre entre 0 et 5 désignant respectivement l'emplacement au dessus des touches F1 à F6, et Bitmap sera le pointeur vers le... bitmap récupéré plus tôt. Ainsi, par exemple, si je veux afficher "Solve" au dessus de la touche F4, je devrais faire :

    unsigned char* solve;
    GetFKeyIconPointer(0x00B8, &solve ); // On trouve 0x00B8 avec l'image plus haut.
    DisplayFKeyIcon( 3, solve); // 3 correspond à la touche F4


C'est pas beaucoup plus compliqué que ça, il faut bien sûr ensuite rafraichir l'écran comme on en a l'habitude, et tout roule !

Ensuite, y'a deux trois petites pistes pour continuer ce "tuto" (si on peut appeler ça comme ça ), notamment celle qui permettrait d'afficher un peu n'importe quel texte, en sachant que les icônes font 8*19 pixels, il faut juste regarder comment ils sont codés, et on peut envoyer un bitmap "maison" à la fonction, donc ça doit rouler !

Voilà, donc à suivre, si vous avez des trucs à dire (suggestions - questions - insultes - informations diverses ...) n'hésitez pas !


Fichier joint


PurobazHors ligneMembre d'honneurPoints: 2690 Défis: 110 Message

Citer : Posté le 08/02/2015 00:46 | #


Ouais, je trouve plus simple d'afficher des bitmaps qui copient les "Fkeys icons". On peut ainsi les personnaliser, et il n'y a aucun problème de compatibilité SH3 / SH4.
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

Citer : Posté le 08/02/2015 07:16 | #


Je sais pas comment tu as fais mais ça a l'air vachement bien
In Arch, I trust ! And you ?
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 08/02/2015 08:17 | #


Super nouvelle
-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

Citer : Posté le 08/02/2015 10:36 | #


Donc à chaque fois que l'on appelle une des tes icones, ça appelle la fonction correspondante ?
In Arch, I trust ! And you ?
PurobazHors ligneMembre d'honneurPoints: 2690 Défis: 110 Message

Citer : Posté le 08/02/2015 10:40 | #


Ca permet juste d'afficher l'icone !
I'll be back !
pour plus de fun
mes programmes fun
de technique
mes projets
et de Swag
les projets que je soutiens
-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

Citer : Posté le 08/02/2015 10:40 | #


ah ok dommage

In Arch, I trust ! And you ?
TheprogHors ligneMembrePoints: 1447 Défis: 20 Message

Citer : Posté le 21/02/2015 19:23 | #


Petit up, je me demandais si c'etait compatible SH4 justement par rapport a ce qu'a dit Puro ?
NemhardyHors ligneGrand maître des Traits d'EspritPoints: 1235 Défis: 54 Message

Citer : Posté le 21/02/2015 19:40 | #


Je pense que oui, vu que c'est utilisé par l'OS, et qu'ils apparaissent bien dans les applications "officielles", à mon avis pas de soucis à ce niveau là.
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
Xavier59Hors ligneMembre de CreativeCalcPoints: 1337 Défis: 12 Message

Citer : Posté le 21/02/2015 19:53 | #


Sinon vous pouvez aussi utiliser cette fonction que j'avais trouver dans le code d'explorer :


void Mini(char* c, int n)
{
    int i;
    for(i=56 ; i<64 ; i++)
        Bdisp_DrawLineVRAM(n*21+2, i, n*21+20, i);
    if(strlen(c)<4) i=4;
    else i=3;
    PrintMini(n*21+i, 58, c, MINI_REV);
}

// Exemple :
Mini("OPTN",4);     // Ecris 'OPTN' à la 4ème case ( 1 case = 1 place pour un Fkeys )


LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 21/02/2015 20:10 | #


Bof, c'est pas complet du tout.
Par exemple, en théorie une icône qui est un sous-menu est rognée sur le bord bas droite, alors qu'une fonction est un rectangle.
Et puis, PrintMini() peut tout à fait déborder si le libellé est trop long, et le cas échéant, ne permet pas d'utiliser des symboles.

Rise.
Xavier59Hors ligneMembre de CreativeCalcPoints: 1337 Défis: 12 Message

Citer : Posté le 21/02/2015 20:22 | #


J'ai jamais dit que c'était compliqué.
J'ai juste donnée une solution alternative
LephenixnoirEn ligneAdministrateurPoints: 13829 Défis: 136 Message

Citer : Posté le 21/02/2015 20:28 | #


Xavier59 a écrit :
J'ai jamais dit que c'était compliqué.

Mais j'ai jamais écrit ça moi, j'ai dit que c'était pas complet pour une utilisation générale oO
Rise.
-florian66-Hors ligneAncien rédacteurPoints: 2298 Défis: 19 Message

Citer : Posté le 22/02/2015 11:37 | #


Dans mon tableau périodique v2 je me sert de Mini d'explorer
In Arch, I trust ! And you ?
TheprogHors ligneMembrePoints: 1447 Défis: 20 Message

Citer : Posté le 07/03/2015 17:28 | #


C'est pas mal de pouvoir utiliser les FKeys, en effet ca rend mieux
Le seul soucis c'est qu'il faut chercher pendant 10 minutes dans le tableau le FKey

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 43 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd