PureBasic

Forums PureBasic
Nous sommes le Mer 18/Juil/2018 23:08

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
 Sujet du message: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Dim 01/Oct/2017 22:50 
En ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6615
Localisation: IDF (Yvelines)
Vous souhaitez concevoir un outil pour l'IDE officiel de PureBasic qui va interagir avec le code contenu dans un des onglets de l'IDE.

C'est ce que nous allons voir avec la création d'un outils qui va aider l'utilisateur à modifier les paramètres d'un gadget.

Principe de l'outil.
Le principe de l'outil que vous allez créer est simple :
- L'utilisateur selectionne une ligne du gadget qu'il souhaite modifier

Image

- Il appelle l'outil avec la combinaison de touches Ctrl + Entree (ou une autre combinaison de touche) et modifie par exemple le libellé du gadget (Valider devient Modifier)

Cette combinaison de touche est paramétrée dans le gestionnaire d'outil de votre IDE. Si vous ne savez pas nous verrons plus loin comment paramétrer votre outil.

Image

-L'utilisateur valide ses modifications en cliquant sur le bouton OK et la ligne sélectionnée est mise à jour.

Image


Comment faire.
- L'éditeur de votre IDE officiel est conçu avec le GadgetScintilla()

- Récupérer le handle du GadgetScintilla
Fred a eu la sublime idée de le stocké dans la variable d'environnement PB_TOOL_Scintilla.
Le code suivant permet de récupérer facilement ce handle
Code:
HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))


- Récupérer la sélection de l'utilisateur.
Grace au Handle du composant d'édition de code Scintilla pour le source en cours on va faire un copie en mémoire
Code:
If HandleIDESci
    SendMessage_(HandleIDESci, #WM_COPY,0,0)   
EndIf
Vous verrez dans la façon de paramétrer l'outil qu'on peut bloquer toute intervention sur l'IDE tant que l'outil de modification de gadget est actif.

-L'utilisateur modifie les paramètres de son gadget et clique sur le bouton Ok.
Votre outil va créer la ligne du gadget avec les nouveaux paramètres et mémoriser le résultat dans une variable. Par exemple la variable Buffer.s
La nouvelle chaîne crée par votre outil est copié en mémoire.
Toujours grâce au Handle du composant d'édition de code Scintilla pour le source en cours, vous allez faire un coller de la modification dans l'IDE.
Code:
  SetClipboardText(Buffer)
  SendMessage_(HandleIDESci, #WM_PASTE,0,0)

Voila vous connaissez le minimum pour faire des outils d'aides à la conception d'application avec PureBasic.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Dim 01/Oct/2017 22:51 
En ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6615
Localisation: IDF (Yvelines)
Voici maintenant le code sommaire de votre application. L'objectif étant didacticiel il n'y aura que le minimum.
Code:
;PB 5.60 + - Windows Only (Présence d'API)

;Cet outil ne peut fonctionner que s'il est appelé depuis l'IDE

Enumeration Font
  #FontGlobal
EndEnumeration

Enumeration Window
  #mf 
EndEnumeration

Enumeration Gadget
  #mfOk
  #mfGadget
  #mfX
  #mfY
  #mfWidth
  #mfHeight
  #mfText
EndEnumeration

Global NewMap Gadgets()

;Plan de l'application
Declare Start()
Declare Setup()   ;Initialisation des mots clés
Declare Parse()   ;Analyse des paramétres du gadget
Declare Update()  ;Mise à jour de l'IDE
Declare Exit() 

Start()

Procedure Start()
  ;handle du composant d'édition de code Scintilla pour le source en cours
  Protected HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla")) 
  If HandleIDESci
    ;Copie en mémoire de la sélection de l'utilisateur.
    SendMessage_(HandleIDESci, #WM_COPY,0,0)   
  Else
    MessageRequester("Information", "Cette application doit etre lancer depuis l'IDE de PureBasic")
    Exit()
  EndIf
 
  LoadFont(#FontGlobal, "", 10)
   
  SetGadgetFont(#PB_Default, FontID(#FontGlobal))
  OpenWindow(#mf, 0, 0, 200, 230, "Gadget Editor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_Tool)
  StickyWindow(#mf, #True)
   
  TextGadget(#PB_Any, 5, 20, 75, 22, "Gadget")
  StringGadget(#mfGadget, 80, 20, 110, 22, "")
 
  TextGadget(#PB_Any, 5, 50, 75, 22, "x")
  StringGadget(#mfX, 80, 50, 110, 22, "")
 
  TextGadget(#PB_Any, 5, 80, 75, 22, "y")
  StringGadget(#mfY, 80, 80, 110, 22, "")
 
  TextGadget(#PB_Any, 5, 110, 75, 22, "Width")
  StringGadget(#mfWidth, 80, 110, 110, 22, "")
 
  TextGadget(#PB_Any, 5, 140, 75, 22, "Height")
  StringGadget(#mfHeight, 80, 140, 110, 22, "")
 
  TextGadget(#PB_Any, 5, 170, 75, 22, "Text")
  StringGadget(#mfText, 80, 170, 110, 22, "")
 
  ButtonGadget(#mfOk, 5, WindowHeight(#mf) - 30, 190, 22, "Ok") 
  DisableGadget(#mfOk, #True)
 
  ;Création de la liste des mots clés de PureBasic
  Setup()
 
  ;Analyse la sélection de l'utilisateur mémorisée dans le clipboard
  Parse() 
 
  ;Déclencheurs evenementiels
  BindGadgetEvent(#mfOk, @Update())
  BindEvent(#PB_Event_CloseWindow, @Exit())
 
  Repeat : WaitWindowEvent() : ForEver
EndProcedure

;Création de la liste des mots clés de PureBasic
Procedure Setup()
  AddMapElement(Gadgets(), "TextGadget")
  AddMapElement(Gadgets(), "ButtonGadget")
  AddMapElement(Gadgets(), "StringGadget")
EndProcedure

;Analyse la sélection de l'utilisateur mémorisée dans le clipboard
Procedure Parse()
  Protected Buffer.s, GadgetType.s, Parameters.s, Value.s, n
  Buffer     = Trim(StringField(GetClipboardText(), 1, #CRLF$)) ;Prendre en compte uniquement la prémiere ligne
  GadgetType = Trim(StringField(Buffer, 1, "("))                ;Mémorisation du type de gadget
  Parameters = Mid(RemoveString(Buffer, GadgetType), 2)         ;Supression premiere parenthése 
  Parameters = ReverseString(Mid(ReverseString(Parameters), 2)) ;Suppression de la derniere parenthése
 
  ;Est ce un mot clé ?
  If FindMapElement(Gadgets(), GadgetType)
    DisableGadget(#mfOk, #False)
   
    For n = 1 To CountString(Parameters, ",") + 1
      Value = Trim(StringField(Parameters, n, ","))
      If FindString(Value, #DQUOTE$)
        SetGadgetText(n, RemoveString(Value, #DQUOTE$))
        SetGadgetData(n, #True)
      Else
        SetGadgetText(n, Value)
      EndIf 
    Next
  EndIf
EndProcedure

;Mise à jour de l'IDE
Procedure Update()
  Protected HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))
  Protected Buffer.s, LastParameter, n
 
  LastParameter = #mfText
 
  ;Préparation de la chaine de paramétres à renvoyer
  Buffer = MapKey(Gadgets()) + "("
  For n = #mfGadget To LastParameter
    If GetGadgetData(n) = #True
      Buffer + #DQUOTE$ + GetGadgetText(n) + #DQUOTE$
    Else
      Buffer + GetGadgetText(n)
    EndIf
    If n <> LastParameter
      Buffer + ", "
    EndIf   
  Next 
  Buffer + ")"
 
  ;Mise à jour de l'IDE
  SetClipboardText(Buffer)
  SendMessage_(HandleIDESci, #WM_PASTE,0,0)
  PostEvent(#PB_Event_CloseWindow)
EndProcedure

Procedure Exit() 
  End
EndProcedure

Créer un exécutable de ce code. Par exemple GadgetEditor.exe

Installation.
- Allez dans le menu Outils de votre IDE et sélectionner l'item Outils Personnalisés
- Cliquez sur le bouton Nouveau
- Sélectionner l’exécutable de votre utilitaire (GadgetEditor.exe) dans le champ de saisie Ligne de commande.
- Cocher la case Attendre la fin du programme.
- Donner un nom à votre application dans le champ Nom.
- Cliquer sur le champ Raccourci puis presser simultanément la combinaison de touches Ctrl + Entree
- Pour finir cliquer sur Ok

Il ne vous reste plus qu'à tester votre application.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Lun 02/Oct/2017 6:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 02/Oct/2011 16:17
Messages: 1932
Localisation: 50200 Coutances
Merci falsam pour le partage de ce très bon tutoriel, j'adore !

_________________
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce GT 640 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.62, 5.70 LTS
Un homme doit être poli, mais il doit aussi être libre !


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Sam 10/Fév/2018 12:11 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6509
Localisation: Isere
Etait passé à trave 8O
" Vieux motard etc ..." merci pour le partage :oops: 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Sam 10/Fév/2018 20:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 22/Nov/2004 13:05
Messages: 350
Super utile ! Merci


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Conception d'un outil pour PureBasic : Interaction
MessagePosté: Sam 10/Fév/2018 21:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4115
Localisation: Arras, France
Excellent :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye