PureBasic

Forums PureBasic
Nous sommes le Mar 18/Juin/2019 0:27

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: outils personnalisés
MessagePosté: Jeu 26/Oct/2017 16:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 25/Juin/2015 16:18
Messages: 255
suite a un récent post de falsam: IDE : Editor Helper
j'ai pris connaissance de la variable d'environnement "PB_TOOL_Scintilla" à partir de laquelle on peut piloter l'editeur de PB

je suis parti bille en tête dans l'idée de me faire un petit outil permettant de proposer les constantes associées aux parametres de procedure

mais pinaise !! pas facile à apprivoiser le bestiau (scintilla), dès qu'y un truc qui lui plait pas, l'editeur plante

ci dessous mon programme de test:
son but est simplement de lire l'intstruction sur laquelle se trouve le curseur et de la remplacer par "bonjour"

pour me simplifier la tache (surtout du fait des plantages intempestifs), je me suis fait un mode test (definie à la 1er ligne)
si #test=1:
dans ce mode je crée un ScintillaGadget et je fais mes tests avec
la fonction est executer lorsque je clic sur le bouton test
sinon:
il faut creer un executable qui devra être definit comme outils personnalisé
la fonction est executer via un raccourcit clavier
(voir la doc PB)


probleme :
certaines fonction scintilla marche a partir du gadget (mode test) mais pas à partir de l'editeur
dans l'exemple ci dessous SCI_ADDTEXT entraine un plantage
sans doute un probleme d'encodage de caractere ou de pointeur/adresse mémoire

j'en appelle donc aux spécialistes de Scintilla

Code:
#test=1

CompilerIf #test
    InitScintilla()
    Declare test()
    OpenWindow(0,0,0,800,600,"",#PB_Window_ScreenCentered):SetWindowColor(0,$aaaaaa)
    ButtonGadget(1,10,5,80,20,"test"):BindGadgetEvent(1,@ test())
    ScintillaGadget(0,10,30,780,560,0)
    ScintillaSendMessage(0, #SCI_SETTEXT, 0, UTF8(~"azerty\n123456:789:0123\nqsdfg"))
    Procedure   Send(Message, *wParam = #Null, *lParam = #Null)
        ProcedureReturn ScintillaSendMessage(0, Message, *wParam, *lParam)
    EndProcedure
    Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow   
CompilerElse
    Global PB_TOOL_Scintilla.i = Val(GetEnvironmentVariable("PB_TOOL_Scintilla")):If (PB_TOOL_Scintilla=0):End:EndIf   
    CompilerSelect (#PB_Compiler_OS)
        CompilerCase (#PB_OS_Windows)
            Procedure   Send(Message, *wParam = #Null, *lParam = #Null)
                ProcedureReturn SendMessage_(PB_TOOL_Scintilla, Message, *wParam, *lParam)
                ;Protected val:SendMessageTimeout_(PB_TOOL_Scintilla, Message, *wParam, *lParam, #SMTO_ABORTIFHUNG, 2000, @ val):ProcedureReturn val
            EndProcedure
        ; pour les autres...
    CompilerEndSelect
CompilerEndIf


Procedure test()
    Protected  p,pi,pf,l,c.a,txt.s
    l=send(#SCI_GETLENGTH)
    p=Send(#SCI_GETSELECTIONSTART) -1
    pi=p
    While pi>=0
        c=send(#SCI_GETCHARAT, pi)
        If c=10 Or c=13 Or c=58:Break:EndIf
        txt=Chr(c)+txt
        pi-1
    Wend   
   
    pf=p+1
    While pf<l
        c=send(#SCI_GETCHARAT, pf)
        If c=10 Or c=13 Or c=58:Break:EndIf
        txt+Chr(c)
        pf+1
    Wend
    MessageRequester("","txt: "+txt)
    send(#SCI_DELETERANGE,pi+1,pf-pi-1)           
    txt="bonjour"
    send(#SCI_ADDTEXT,Len(Txt), UTF8(txt))
EndProcedure


If ProgramParameter(0)="test":test():EndIf


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

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 3 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