Quelques questions, appel aux conseils

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
wanamoa
Messages : 11
Inscription : mer. 21/nov./2012 10:36

Quelques questions, appel aux conseils

Message par wanamoa »

Bonjour à tous,

Je me permets de vous déranger dans vos occupations pour vous faire part de mes questions.
Je suis en phase de réflexion sur l'achat d'un environnement de développement pour quelques applications personnelles, et d'autres destinées au collège dans lequel je bosse. En particulier, je souhaiterais parvenir à mettre au point une application distribuée à chaque prof et se connectant à une base mysql. Je précise que je travaille sous Mac mais pas le collège.
Principe :
- le prof lance l'appli et se connecte avec des identifiants personnels ;
- il choisit une classe dans laquelle il intervient ;
- pour chaque élève de cette classe il met une note mais basée sur des étoiles (type notation itunes), et idéalement pas de clic nécessaire mais un simple survol ; donc ici un "visuel" traduit en note au moment de l'enregistrement dans la base, et vice-versa ;
- le chef se connecte et récupère le tout au format csv.

J'avais pensé à SQLite mais il est plutôt mono-utilisateur dans le principe.
1) La liaison avec mysql est-elle possible sans trop de heurts (j'ai vu passer des posts déclarant que le driver mysql posait souci) ?
2) Connaissant PB, pensez vous que la mise au point d'une note basée sur les étoiles telle que je l'imagine est réalisable assez facilement ?

Il y a deux ans, j'avais commis (oui, comme une faute... je suis un novice) une petite application avec Runrev Livecode pour une gestion de casiers/élèves/clés relativement facilement.
Du coup, j'ai un choix à faire entre RealBasic, Livecode et PB que je viens de découvrir. Mon choix s'arrête sur les deux derniers et j'ai donc téléchargé la version d'essai de PB.

Point positifs de PB :
- l'éditeur visuel de PB car je pensais devoir tout faire à la main ; je ne suis pas flemmard mais je sais que j'ai besoin de faire cela assez rapidement ;
- le tarif unique, les mises à jour incluses, la liberté commerciale ;
- le fait que les exe soient compilées et non interprétés.

Deux choses me font hésiter :
- Livecode est évènementiel, et le gain est conséquent en temps / réflexion...
- il permet aussi de déployer vers iPad, et cela m'intéresse car j'ai quelques idées (des trucs assez simples et persos mais bon... sait-on jamais) et je possède un iPad ;
- par contre le tarif est 8O !

Voilà, tout cela est un peu décousu et je m'en excuse mais toute remarque sera la bienvenue.

PS : le lien "éditeur visuel" dans les outils de PB ne fonctionne pas sur Mac. Par contre, je peux lancer FormDesigner depuis le dossier Applications sans souci.

J'attends avec impatience vos réactions.
Bon week-end à tous.

Wanamoa.
Dernière modification par wanamoa le sam. 24/nov./2012 19:35, modifié 1 fois.
Avatar de l’utilisateur
Mindphazer
Messages : 695
Inscription : mer. 24/août/2005 10:42

Re: Quelques questions, appel aux conseils

Message par Mindphazer »

wanamoa a écrit : PS : le lien "éditeur visuel" dans les outils de PB ne fonctionne pas sur Mac. Par contre, je peux lancer FormDesigner depuis le dossier Applications sans souci.
Wanamoa.
Il faut que tu donnes, dans les préférences de l'IDE, onglet général, le chemin complet de l'exécutable Mac qui se trouve à l'intérieur de l'APP, comme ceci (exemple à adapter à ton environnement) :
/Volumes/New Coyote/Applications/Logiciels Programmation/PureBasic 5.00/FormDesigner.app/Contents/MacOS/FormDesigner
Bureau : Win10 64bits
Maison : Macbook Pro M3 16" SSD 512 Go / Ram 24 Go - iPad Pro 32 Go (pour madame) - iPhone 15 Pro Max 256 Go
wanamoa
Messages : 11
Inscription : mer. 21/nov./2012 10:36

Re: Quelques questions, appel aux conseils

Message par wanamoa »

Impeccable Mindphazer !
Merci beaucoup.

Je n'avais pas pensé à afficher le contenu du paquet FormDesigner... :lol:
Yrahen
Messages : 51
Inscription : sam. 01/sept./2012 4:14

Re: Quelques questions, appel aux conseils

Message par Yrahen »

L'application servirait a.. noter les eleves?
Du genre "Lui c'est un chieur en cours, il fait jamais ses devoirs, 1 etoile" - "Aaaah elle, premiere de la classe, toujours au tableau ect.. 5 etoiles"
La finalité c'est quoi? Au conseil de classe, si l'eleve a de bonnes etoiles on lui met une bonne appreciation?
"L'imagination est plus importante que la connaissance."
wanamoa
Messages : 11
Inscription : mer. 21/nov./2012 10:36

Re: Quelques questions, appel aux conseils

Message par wanamoa »

Yrahen a écrit :L'application servirait a.. noter les eleves?
Du genre "Lui c'est un chieur en cours, il fait jamais ses devoirs, 1 etoile" - "Aaaah elle, premiere de la classe, toujours au tableau ect.. 5 etoiles"
La finalité c'est quoi? Au conseil de classe, si l'eleve a de bonnes etoiles on lui met une bonne appreciation?
Salut,

Je ne crois pas avoir déclaré que tel était le débat, et je ne vois pas pourquoi vous faîtes preuve d'autant de surprise et d'ironie déplacée, sans même en connaître la finalité. Si vous avez un souci à régler avec le système scolaire de ce pays, faîtes-le mais ne laissez pas votre amertume embarasser et gratifier d'un accueil peu chaleureux les nouveaux venus sur ce forum, et désireux de découvrir PB.

Cependant, je vais prendre le temps de vous répondre ;-).
Les profs de ce pays ont dans l'obligation de délivrer une note, dite de vie scolaire, aux collégiens : cette note a été mise en place à la base pour des zones d'éducation prioritaire et ayant pour but d'évaluer des choses simples comme la politesse, l'aptitude au travail en groupe, la solidarité, l'état d'esprit, l'investissement, le respect du matériel, les absences et les retards... Valoriser les élèves dans ces comportements est un impératif.

Cela a été étendu à l'ensemble des collèges. Dans mon collège de 400 élèves, il n'y a en général qu'un ou deux élèves obtenant une note sous 10. La moyenne doit tourner à 18/20...
Dans ma classe, cette moyenne est de 19. Sachant que cela entre en compte dans l'obtention du DNB, je ne vois pas où j'ai l'intention de sanctionner l'un d'entre eux sur délit de faciès.

Donc, et donc, l'objectif est de pouvoir remplir de manière simple un formulaire tout en sortant des sempiternelles valeurs numériques. Voilà tout.
Finalement, rien de bien méchant, non :( ?


Par ailleurs, si l'usage de PB par le corps éducatif n'est pas souhaité par son développeur, merci de m'indiquer les références idoines dans la licence. Et si elle ne l'est pas par les membres de ce forum, je me dirigerais vers une autre solution.
Toutefois, on peut réfléchir deux secondes ; j'aurais pu tout aussi bien ne pas mentionner le fait que je sois dans l'éducation (et j'avais pourtant hésité ayant déjà mesuré la capacité d'autrui à dézinguer tout ce qui déboule par pure démagogie, pseudo-philosophie ou simple ignorance), ne pas mentionner l'usage prévu et ramener cela à un logiciel de notation de ma cdthèque, et personne n'aurait rien trouvé à redire.

Je me relis, et trouve ma réponse plus sèche que je ne l'aurais voulu mais vous comprendrez mon agacement face à une question à laquelle vous apportez une réponse vous-mêmes. J'aurais ainsi préféré une simple question à laquelle j'aurais volontiers répondu sans vous heurter, désamorçant vos craintes du même coup.

Mais bon... passons à autre chose de plus sympa, comme PB, non ? :D
Yrahen
Messages : 51
Inscription : sam. 01/sept./2012 4:14

Re: Quelques questions, appel aux conseils

Message par Yrahen »

Après relecture, je m'appercois que c'est surtout ma reponse qui etait mal formulée, et j'en suis désolé.
Il n'y avait aucune amertume ni ironie, plutot de la curiosité, mais sans doute mal avancée.

Je connaissais pas ce systeme de "note de savoir vivre", mais après tout pourquoi pas. Ca fait longtemps que le college est derriere moi, j'ai peut etre raté un 20/20 :(

En tout cas Pb pour moi permettrait de realiser assez simplement ce genre de programmes, hormis le systeme d'etoile que je serais incapable de faire. Mais je suis loin d'etre le plus competent ici ( très très loin ), donc je pense qu'il vaut mieux attendre qu'un vrai connaisseur tombe sur ce sujet^^

M'enfin si tu veux mon avis personnel sur purebasic, c'est qu'il permet de faire assez simplement des projets interessants, sa syntaxe est facilement abordable ( basic quoi ), et je pense que pour une petite/moyenne appli de ce genre, il est tout indiqué.
"L'imagination est plus importante que la connaissance."
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Quelques questions, appel aux conseils

Message par comtois »

wanamoa a écrit :Par ailleurs, si l'usage de PB par le corps éducatif n'est pas souhaité par son développeur, merci de m'indiquer les références idoines dans la licence.
Son usage est plutôt encouragé, si j'en crois les copies d'écran du site officiel :)

Notamment Elementary Reports
Image
Connaissant PB, pensez vous que la mise au point d'une note basée sur les étoiles telle que je l'imagine est réalisable assez facilement ?
Je ne suis pas apte à répondre à tes questions, mais j'ai l'impression que le logiciel 'Elementary Report' réalise tout ce que tu souhaites faire et bien plus.


Bon courage dans ton projet.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Quelques questions, appel aux conseils

Message par graph100 »

comtois a écrit :
Connaissant PB, pensez vous que la mise au point d'une note basée sur les étoiles telle que je l'imagine est réalisable assez facilement ?
Je ne suis pas apte à répondre à tes questions, mais j'ai l'impression que le logiciel 'Elementary Report' réalise tout ce que tu souhaites faire et bien plus.
Bigre ! Si comtois n'est pas apte à répondre, alors que dire de moi ?!
Enfin, je vais essayer de répondre avec mes connaissances et expérience :)

Pour la notation avec les étoiles, si on ne parle que de la partie interface, c'est très simple à faire. Je l'utilise dans un de mes logiciels pour noté des séries de livres. Maintenant, si on ajoute la partie base de donnée qui doit être associée à l'interface, je suis beaucoup moins compétent, sachant que je n'utilise que SQlite qui dans Pb de base.

Du reste il me semble que tout ce que tu as décris est réalisable, avec plus ou moins d'effort.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
wanamoa
Messages : 11
Inscription : mer. 21/nov./2012 10:36

Re: Quelques questions, appel aux conseils

Message par wanamoa »

Yrahen a écrit :Après relecture, je m'appercois que c'est surtout ma reponse qui etait mal formulée, et j'en suis désolé.
Il n'y avait aucune amertume ni ironie, plutot de la curiosité, mais sans doute mal avancée.
Hello Yrahen,

Pas de souci, tout cela est un quiproquo comme cela arrive souvent lors d'échanges écrits qui traduisent mal nos sentiments, notre état d'esprit :wink: .
Je connaissais pas ce systeme de "note de savoir vivre", mais après tout pourquoi pas. Ca fait longtemps que le college est derriere moi, j'ai peut etre raté un 20/20 :(
Tout cela entre en compte dans ce qui est appelé le socle commun des compétences, mais qui est déjà remis en cause tel qu'il est. Ah, l'éducation... il y a du boulot pour rafraîchir le mamouth !
En tout cas Pb pour moi permettrait de realiser assez simplement ce genre de programmes, hormis le systeme d'etoile que je serais incapable de faire. Mais je suis loin d'etre le plus competent ici ( très très loin ), donc je pense qu'il vaut mieux attendre qu'un vrai connaisseur tombe sur ce sujet^^

M'enfin si tu veux mon avis personnel sur Purebasic, c'est qu'il permet de faire assez simplement des projets interessants, sa syntaxe est facilement abordable ( basic quoi ), et je pense que pour une petite/moyenne appli de ce genre, il est tout indiqué.
Ce qui m'inquiète en réalité c'est le codage de l'évènementiel, ce qui est facilité avec RealBasic ou Livecode. En ai-je les compétences, voilà le souci...
J'ai commencé à jouer avec FormDesigner, copier-coller le code source qui en découle dans l'éditeur de PB et essayer de suivre le 1er tutoriel en partie (très rapidement). Il faut que je prenne le temps de m'y essayer.

Merci de ces réponses en tout cas ;-).
wanamoa
Messages : 11
Inscription : mer. 21/nov./2012 10:36

Re: Quelques questions, appel aux conseils

Message par wanamoa »

comtois a écrit :
wanamoa a écrit :Par ailleurs, si l'usage de PB par le corps éducatif n'est pas souhaité par son développeur, merci de m'indiquer les références idoines dans la licence.
Son usage est plutôt encouragé, si j'en crois les copies d'écran du site officiel :)

Notamment Elementary Reports
Image
Connaissant PB, pensez vous que la mise au point d'une note basée sur les étoiles telle que je l'imagine est réalisable assez facilement ?
Je ne suis pas apte à répondre à tes questions, mais j'ai l'impression que le logiciel 'Elementary Report' réalise tout ce que tu souhaites faire et bien plus.


Bon courage dans ton projet.

Salut comtois,

Oui, je "connais" l'existence ce cette application : mon premier réflexe a été de chercher sur le site si PB était utilisé commercialement et quelles types d'applis étaient développées (ce qui me paraît donner une idée du niveau d'un langage, de ses possibilités, de sa viabilité).

Par contre, celui-cité (niveau école primaire) va trop loin pour nos besoins. Au collège et uniquement pour cette note de VS, on bosse sur des feuilles excel, ce qui nous restreint à une ouverture et une seule à la fois du document et en local qui plus est.
Je cherche juste à donner la possibilité d'exécuter cette tâche à domicile et donc en multi-accès (d'où mysql).

Merci beaucoup ;-).
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Quelques questions, appel aux conseils

Message par falsam »

Bonjour wanamoa et bienvenue sur ce forum.
wanamoa a écrit :Ce qui m'inquiète en réalité c'est le codage de l'évènementiel ...
Tu as utilisé FormDesigner et le souci est que cet utilitaire ne génère pas le code lié aux évènements. (En fait j'ai dit une bêtise. Form Designer gère bien les évènements. Par contre je n'aime pas le code généré.)

Les évènements de Pure Basic sont gérés dans une boucle évènementielle dans laquelle tu seras capable de contrôler ton application.

L’évènement le plus simple est la fermeture de la fenêtre.

Code : Tout sélectionner

Enumeration
  #Mainform
EndEnumeration

;Variables gestion des évenements
Define.l Event

;Style de la fenetre 
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  OpenWindow(#Mainform, 0, 0, 500, 400, "Gestion des évenements", WindowStyle)
EndProcedure

Open_MainForm()

;-Boucle evenementielle
Repeat
  ;Bloque l'exécution du programme jusqu'à ce qu'un évènement intervienne
  Event = WaitWindowEvent() 
  
  ;Un evement c'est produit
  Select Event
        
    Case #PB_Event_CloseWindow ;Evenement fermeture de la fenêtre
      End ;Fin du programme
  EndSelect
ForEver
Quand un évènement se produit on peut savoir qui a produit l’évènement.
EventWindow() permet de savoir sur quelle fenêtre s'est produit le dernier évènement.
EventMenu() permer de savoir quel élément du menu a produit le dernier évènement.
EventGadget() permet de savoir sur quel gadget s'est produit l’évènement.
EventType() permet de savoir quel est le type du dernier évènement survenu :
Clic avec le bouton gauche de la souris, obtention du focus sur un gadget, le contenu d'un gadget a changé .....

Un exemple de code pour illustrer certains de ces évènements.

Code : Tout sélectionner

Enumeration
  #Mainform     ;Fenetre de l'application
  #Eleve        ;Nom de l'éléve
  #Note         ;Note
  #Valider      ;Bouton valider
EndEnumeration

;Variables gestion des évenements
Define.l Event, WEvent, GEvent, TEvent

;Style de la fenetre 
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Procedure Open_MainForm()
  ;Mise en place de la fenetre principale de l'application (#MainForm)
  OpenWindow(#Mainform, 0, 0, 500, 400, "Gestion des évenements", WindowStyle)
  
  ;Pour l'exemple, saisie du nom d'un éleve et une note
  TextGadget(#PB_Any, 10, 20, 80, 20, "Eléve")
  StringGadget(#Eleve, 100, 20, 150, 22, "")
  
  TextGadget(#PB_Any, 10, 45, 80, 20, "Note")
  StringGadget(#Note, 100, 45, 50, 22, "0", #PB_String_Numeric) 
    
  ;Un bouton valider
  ButtonGadget(#Valider, 400, 20, 80, 22, "Envoyer")
  
  ;A l'ouverture de la fenêtre, focus sur le nom de l'éléve
  SetActiveGadget(#Eleve)
    
EndProcedure

;Ouverture de la fenêtre principale de l'application
Open_MainForm()

;-Boucle evenementielle
Repeat
  
  ;Gestionnaire d'evenement
  Event  = WaitWindowEvent() ;Bloque l'exécution du programme jusqu'à ce qu'un évènement intervienne
  
  ;Un evenement est intervenu
  WEvent = EventWindow()  ;sur quelle fenêtre s'est produit le dernier évènement. 
  GEvent = EventGadget()  ;Quel est le numéro du gadget sur lequel l'évenement c'est produit
  TEvent = EventType()    ;Quel est le type du dernier évènement survenu (Exemple : focus sur un gagdet, ...)
  
  Select Event
      
    Case #PB_Event_Gadget ;Evenement gadget ?
      Select GEvent
        Case #Eleve
          Select TEvent ;Quel type d'évenement?
            Case #PB_EventType_Focus ;Le curseur se trouve dans le champ nom de l'éléve
              SetGadgetColor(#Eleve, #PB_Gadget_BackColor, RGB(255, 248, 220))
              
            Case #PB_EventType_LostFocus ;Le curseur quitte le champ nom de l'éléve
              SetGadgetColor(#Eleve, #PB_Gadget_BackColor, RGB(255, 255, 255))
          EndSelect
          
        Case #Note
          Select TEvent ;Quel type d'évenement?
            Case #PB_EventType_Focus 
              SetGadgetColor(#Note, #PB_Gadget_BackColor, RGB(255, 248, 220))
              
            Case #PB_EventType_LostFocus
              SetGadgetColor(#Note, #PB_Gadget_BackColor, RGB(255, 255, 255))
          EndSelect
          
        Case #Valider
          MessageRequester("Information", "Vous avez cliqué sur le bouton valider")
          
      EndSelect
        
    Case #PB_Event_CloseWindow 
      
      ;Evenement fermeture de la fenetre principale (#mainform) de l'application
      ;Est ce la fenetre #MainForm qui génére l'évenement. 
      ;Dans cet exemple, ce test est inutile car #MainForm est la seule fenêtre de l'application
      If WEvent = #Mainform 
        If MessageRequester("Information", "Êtes vous certain de quitter l'application ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
          End ;Fin de l'éxécution du programme
        EndIf
      EndIf
      
  EndSelect
ForEver
Dernière modification par falsam le dim. 25/nov./2012 23:39, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Quelques questions, appel aux conseils

Message par Backup »

falsam a écrit :Tu as utilisé FormDesigner et le souci est que cet utilitaire ne génère pas le code lié aux évènements.

?? ben si , c'est peut etre une option dans les parametres , mais la boucle d'event est generé par
visual Designer ... ;)

comme avec PureForm du reste ...
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Quelques questions, appel aux conseils

Message par falsam »

Oops tu as raison Dobro. Form Designer génére bien une procédure liée à la gestion des évènements. Il faut penser à bien cocher la case Générer procédure d’évènement et la case Générer boucle d’évènement.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Quelques questions, appel aux conseils

Message par falsam »

wanamoa a écrit :... pour chaque élève de cette classe il met une note mais basée sur des étoiles (type notation itunes), et idéalement pas de clic nécessaire mais un simple survol ; donc ici un "visuel" traduit en note ....
Je pense que le survol sans validation par un clic est source d'erreur. Ci dessous un exemple de code incluant un systeme de notation avec des étoiles.
Image
Survoles les étoiles avec la souris et valide par un clic gauche de la souris. Tu peux aussi noter avec le sélecteur de notes.

:arrow: Comme il manque les images, tu peux télécharger le code avec les média depuis ce lien (3,5 Ko)

Code : Tout sélectionner

EnableExplicit

Enumeration
  #FontApp
  #Mainform
  #Res_StarEmpty
  #Res_StarFull
EndEnumeration


Structure Evaluation
  EvalAssidu.i     ;Evaluation assiduité
  IdCanvasAssidu.l ;Handle du canvas assiduité 
  IdSpinAssidu.l   ;Handle du spin notant l'assiduité
EndStructure

Global NewMap Eleve.Evaluation()

Define.l Event, GEvent, TEvent

Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget

Global CurrentNote.i

;Mise à jour du canvas contenant les etoiles.
;
;Paramétres
; Gadget    : Canvas contenant les etoiles
; Width     : Largeur d'une etoile
; Maximum   : Maximum d'étoile sur le canvas (Nombre d'étoiles eteintes)
; Note      : Note (Nombre d'étoiles allumées)
; StarEmpty : Image (PNG) etoile eteinte
; StarFull  : Image (PNG) etoile allumée
; Background: Couleur d'arriere plan
Procedure UpdateEvaluationImage(Gadget, Width, Maximum, Note, StarEmpty, StarFull, Background)
  Protected N.i
  
  StartDrawing(CanvasOutput(Gadget))
  
  ;Dessin de la couleur de fond
  Box(0, 0, 80, 16, Background)
  
  ;Dessins des étoiles
  DrawingMode(#PB_2DDrawing_AlphaBlend)
  ;Etoile eteintes 
  For N=0 To Maximum-1
    DrawImage(ImageID(StarEmpty), Width*N, 0)
  Next
  
  ;Etoiles allumées
  For N=0 To Note-1
    DrawImage(ImageID(StarFull), Width*N, 0)
  Next
  
  ;Fin du dessin
  StopDrawing()
EndProcedure

;Fenetre principale de l'application
Procedure Open_MainForm()
  Protected Lig.i, N.i, IdCanvasAssidu.i, IdSpinAssidu.i
  
  OpenWindow(#Mainform, 0, 0, 500, 400, "Evaluation", WindowStyle)
  
  ForEach Eleve()
    Lig+25
    TextGadget(#PB_Any, 10, Lig, 150, 22, MapKey(Eleve())) 
    
    ;Canvas d'affichage des étoiles
    IdCanvasAssidu = CanvasGadget(#PB_Any, 170, Lig, 80, 16)
    UpdateEvaluationImage(IdCanvasAssidu, 16, 5, 5, #Res_StarEmpty, #Res_StarFull, RGB(240, 240, 240))
    
    ;La note
    IdSpinAssidu = SpinGadget(#PB_Any, 265, Lig, 50, 22, 0, 5, #PB_Spin_ReadOnly|#PB_Spin_Numeric )
    SetGadgetState(IdSpinAssidu, 5)
    
    ;Mémorisation des gadgets associés à l'éléve
    Eleve()\IdCanvasAssidu = IdCanvasAssidu
    Eleve()\IdSpinAssidu = IdSpinAssidu
    
  Next  
EndProcedure

Procedure Start()
  ;Initialisation application, police, etc ..
  LoadFont(#FontApp,"Arial",10)
  SetGadgetFont(#PB_Default,FontID(#FontApp)) 
    
  ;Chargement des images (PNG)
  UsePNGImageDecoder()
  CatchImage(#Res_StarEmpty, ?Res_StarEmpty) ;Etoile inactive
  CatchImage(#Res_StarFull, ?Res_StarFull) ;Etoile inactive
    
  ;Jeu de test 
  ; Trois éleves d'une classe.
  ; En début d'année chaque éléve a la totalité des points
  Eleve("Marc Olivier")\EvalAssidu=5  
  Eleve("Aude Mignet")\EvalAssidu=5
  Eleve("Chris Tory")\EvalAssidu=5
  
  ;Affichage de la fenetre
  Open_MainForm()
EndProcedure

start()

;- Boucle évenementielle
Repeat
  Event  = WaitWindowEvent(10)
  GEvent = EventGadget()
  TEvent = EventType()
  
  Select Event
    Case #PB_Event_Gadget
      ForEach(Eleve())
        
        ;-Notation depuis le canvas contenant les étoiles
        If Eleve()\IdCanvasAssidu = GEvent          
          
          Select TEvent
            Case #PB_EventType_MouseEnter
              SetGadgetAttribute(GEvent, #PB_Canvas_Cursor, #PB_Cursor_Hand)
              
            Case #PB_EventType_MouseMove
              If GetGadgetAttribute(GEvent, #PB_Canvas_MouseX) > 5
                CurrentNote = (GetGadgetAttribute(GEvent, #PB_Canvas_MouseX) / 16)+1
              Else
                CurrentNote = 0
              EndIf
              UpdateEvaluationImage(GEvent, 16, 5, CurrentNote, #Res_StarEmpty, #Res_StarFull, RGB(240, 240, 240))  
              
            Case #PB_EventType_LeftButtonDown
              SetGadgetState(Eleve()\IdSpinAssidu, CurrentNote)
              
            Case #PB_EventType_MouseLeave
              CurrentNote = GetGadgetState(Eleve()\IdSpinAssidu)
              UpdateEvaluationImage(GEvent, 16, 5, CurrentNote, #Res_StarEmpty, #Res_StarFull, RGB(240, 240, 240))  
              
          EndSelect
        EndIf
        
        ;-Notation depuis le sélecteur de points (SpinGadget)
        If Eleve()\IdSpinAssidu = GEvent
          CurrentNote = GetGadgetState(Eleve()\IdSpinAssidu)
          UpdateEvaluationImage(Eleve()\IdCanvasAssidu, 16, 5, CurrentNote, #Res_StarEmpty, #Res_StarFull, RGB(240, 240, 240))  
        EndIf
      Next     
        
    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

DataSection
  
  ;Etoile
  Res_StarEmpty : IncludeBinary "media\star_empty.png"
  Res_Starfull  : IncludeBinary "media\star_full.png"
EndDataSection
Dernière modification par falsam le lun. 26/nov./2012 17:37, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Quelques questions, appel aux conseils

Message par Ar-S »

Un autre exemple avec Canvas, à peaufiner.
J'ai remplacé les étoiles par des cercles.

Au survol tu choisis le nbr de cercles. Puis un clic pour locker/délocker la possibilité de modifier.
Je pense aussi que c'est bien plus prudent de valider via le clique.

Code : Tout sélectionner

; LIB Canvas_Note


;; ////////////////////////////////////////////////////// EXEMPLE  //////////////////////////////////////////////////////

Global rayon, GO

hwnd = OpenWindow(0, #PB_Ignore, #PB_Ignore, 400, 400, "Canvas", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
If hwnd <> 0
  CanvasGadget (1, 1, 1, 208,50)
  rayon =   GadgetHeight(1) / 2
  GO = 1
  
  Repeat
     Select WaitWindowEvent()
          Case #PB_Event_Gadget
      
             Select EventGadget()
                 Case 1
                      Select EventType()
                        Case  #PB_EventType_MouseMove
                          If GO = 1
                            
                            SetGadgetAttribute(1, #PB_Canvas_Cursor,  #PB_Cursor_Hand)
                              MouseX = GetGadgetAttribute(1, #PB_Canvas_MouseX) ;Mémorisation des coordonnées X de la souris
                              Debug MouseX

                                   If MouseX <= 50
                                     N = 1
                                   ElseIf  MouseX > 50 And mouseX <= 100
                                     N = 2
                                     ElseIf  MouseX > 100 And mouseX <= 150
                                     N = 3
                                   Else
                                     N = 4
                                   EndIf
                                   
                                   ; // DESSIN DES CERCLES
                                   StartDrawing(CanvasOutput(1))
                                   
                                     Box(0, 0, GadgetWidth(1), GadgetHeight(1), #Green)
                                     Box(2, 2, GadgetWidth(1) - 4, GadgetHeight(1) - 4, $0)
                                   
                                   For i = 0 To N-1 
                                                                          
                                    Circle(i * (GadgetWidth(1) / 4) + rayon, GadgetHeight(1) / 2, rayon - 4, #Red)

                                  Next
                                   
                                   StopDrawing()
                                   
                                 Else
                                   SetGadgetAttribute(1, #PB_Canvas_Cursor,  #PB_Cursor_Denied)
                                   
                                   EndIf  
                                   
                                Case #PB_EventType_LeftButtonUp 
                                  
                                  If GO = 0
                                  GO + 1  
                                  Else
                                    GO = 0
                                  EndIf  
                                  
                                  Debug GO
                                  
                              EndSelect
                              
                 
                              
                      EndSelect   
                      
                          
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
  
  ForEver
  
EndIf

; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ FIN EXEMPLE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre