IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Sources PureBasic

Sources PureBasicConsultez toutes les sources

Nombre d'auteurs : 41, nombre de sources : 88, dernière mise à jour : 13 août 2011 

 
OuvrirSommaireScintilla

Exécutez ce programme, et copiez un code XML dans la fenêtre qui s'affiche, la coloration syntaxique définie ci dessous devrait s'appliquer à votre texte.

 
Sélectionnez
EnableExplicit

InitScintilla("SciLexer") ; use a version with lexer, not the scintilla.dll!

Procedure SetScintillaProperties(id)
  ScintillaSendMessage(id, #SCI_SETLEXER,#SCLEX_XML)
; # Default
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #STYLE_DEFAULT, #Black)
  ScintillaSendMessage(id, #SCI_STYLESETBACK, #STYLE_DEFAULT, #White)
  ScintillaSendMessage(id, #SCI_STYLECLEARALL)

; # Tags
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_TAG, RGB($00, $00, 80))
; # Unknown Tags
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_TAGUNKNOWN, RGB($00, $00, $80))
; # Attributes
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_ATTRIBUTE, RGB($00, $80, $80))
; # Unknown Attributes
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_ATTRIBUTEUNKNOWN, RGB($00, $80, $80))
; # Numbers
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_NUMBER, #Red)
; # Double quoted strings
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_DOUBLESTRING, RGB(120, 120, 120))
; # Single quoted strings
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_SINGLESTRING, RGB(120, 120, 120))
; # Other inside tag
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_OTHER, RGB($80, $00, $80))
; # Comment
  ScintillaSendMessage(id, #SCI_STYLESETFORE, #SCE_H_COMMENT, RGB($80, $00, $80))

; ...
; #define SCE_H_ENTITY 10
; #define SCE_H_TAGEND 11
; #define SCE_H_XMLSTART 12
; #define SCE_H_XMLEND 13
; #define SCE_H_SCRIPT 14
; #define SCE_H_ASP 15
; #define SCE_H_ASPAT 16
; #define SCE_H_CDATA 17
; #define SCE_H_QUESTION 18
; #define SCE_H_VALUE 19
; #define SCE_H_XCCOMMENT 20
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 600, "XML", #PB_Window_SystemMenu)
RemoveKeyboardShortcut(0, #PB_Shortcut_Tab)
ScintillaGadget(0, 5, 5, 790, 590, 0)
SetScintillaProperties(0)
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Créé le 2 janvier 2010  par ts-soft

Ce code montre comment utiliser la bibliothèque scintilla.

 
Sélectionnez
;===========================================;
;                                           ;
;   Scintilla example                       ;
;                                           ;
;===========================================;

Global KeyWordUp.s, KeyWordDown.s, KeyWordNone.s
KeyWordUp = "Repeat If Procedure"
KeyWordDown = "ForEver EndIf EndProcedure"
KeyWordNone = "Else"
Enumeration 0
      #LexerState_Space
      #LexerState_Comment
      #LexerState_NonKeyword
      #LexerState_Keyword
      #LexerState_FoldKeyword
      #LexerState_Constant
      #LexerState_String
      #LexerState_FoldKeywordUp
      #LexerState_FoldKeywordDown
EndEnumeration

CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      InitScintilla("Scintilla.dll")
CompilerEndIf

Procedure SCI_GetLineEndPosition(gadget, line)
      ProcedureReturn ScintillaSendMessage(gadget,#SCI_GETLINEENDPOSITION,line)
EndProcedure

Procedure SCI_LineFromPosition(gadget, Pos)
      ProcedureReturn ScintillaSendMessage(gadget,#SCI_LINEFROMPOSITION,Pos)
EndProcedure

Procedure KeyWordIs(key.s)
      Protected n
      If key=""
            ProcedureReturn -1
      EndIf
     
      For n=1 To CountString(KeyWordUp, " ") + 1
            If LCase(StringField(KeyWordUp, n, " ")) = LCase(key)
                  ProcedureReturn #LexerState_FoldKeywordUp
            EndIf
      Next n
      For n=1 To CountString(KeyWordDown, " ") + 1
            If LCase(StringField(KeyWordDown, n, " ")) = LCase(key)
                  ProcedureReturn #LexerState_FoldKeywordDown
            EndIf
      Next n
      For n=1 To CountString(KeyWordNone, " ") + 1
            If LCase(StringField(KeyWordNone, n, " ")) = LCase(key)
                  ProcedureReturn #LexerState_Keyword
            EndIf
      Next n
      ProcedureReturn -1
EndProcedure


Procedure Highlight(sciptr.l, endpos.l)
      Protected level = #SC_FOLDLEVELBASE, Char.l, keyword.s, state.i, linenumber.l
      Protected thislevel.l = level
      Protected nextlevel.l = level
      Protected CurrentPos.l = 0, endlinepos.l, startkeyword
      Protected currentline.l = 0
      endpos = SCI_GetLineEndPosition(sciptr, SCI_LineFromPosition(sciptr, endpos))
      ScintillaSendMessage(sciptr, #SCI_STARTSTYLING, CurrentPos, $1F | #INDICS_MASK)
     
      While CurrentPos <= endpos
            Char = ScintillaSendMessage(sciptr, #SCI_GETCHARAT, CurrentPos)
            Select Char
                  Case 10
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, 1, #LexerState_NonKeyword)
                        ScintillaSendMessage(sciptr, #SCI_SETFOLDLEVEL, linenumber , thislevel)
                        thislevel = nextlevel
                        linenumber + 1
                  Case 'a' To 'z', 'A' To 'Z'
                        endlinepos = SCI_GetLineEndPosition(sciptr, SCI_LineFromPosition(sciptr, currentpos))
                       
                        keyword = Chr(char)
                        While currentpos < endlinepos
                              currentpos + 1
                              char = ScintillaSendMessage(sciptr, #SCI_GETCHARAT, currentpos)
                              If Not ((char >= 'a' And char <= 'z') Or (char >= 'A' And char <= 'Z') Or char = '_'Or (char >= '0' And char <= '9'))
                                    currentpos-1
                                    Break
                              EndIf
                              keyword + Chr(char)
                        Wend
                        Select KeyWordIs(keyword)
                              Case #LexerState_FoldKeywordUp
                                    state = #LexerState_Keyword
                                    thislevel | #SC_FOLDLEVELHEADERFLAG
                                    nextlevel + 1
                              Case #LexerState_FoldKeywordDown
                                    state = #LexerState_Keyword
                                    nextlevel - 1
                                    If nextlevel < #SC_FOLDLEVELBASE
                                          nextlevel = #SC_FOLDLEVELBASE
                                    EndIf
                              Case #LexerState_Keyword
                                    state = #LexerState_Keyword
                              Default
                                    state = #LexerState_NonKeyword
                        EndSelect
                       
                       
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, Len(keyword), state)
                  Case '"'
                        endlinepos = SCI_GetLineEndPosition(sciptr, SCI_LineFromPosition(sciptr, currentpos))
                        startkeyword = 1
                        While currentpos < endlinepos
                              currentpos + 1
                              startkeyword + 1
                              If ScintillaSendMessage(sciptr, #SCI_GETCHARAT, currentpos) = '"'
                                    Break
                              EndIf
                        Wend
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, startkeyword, #LexerState_String)
                  Case ';'
                        endlinepos = SCI_GetLineEndPosition(sciptr, SCI_LineFromPosition(sciptr, currentpos))
                        startkeyword = 1
                        While currentpos < endlinepos
                              currentpos + 1
                              startkeyword + 1
                        Wend
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, startkeyword, #LexerState_Comment)
                  Case 9, ' '
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, 1, #LexerState_Space)
                  Case '#'
                        endlinepos = SCI_GetLineEndPosition(sciptr, SCI_LineFromPosition(sciptr, currentpos))
                        startkeyword = 1
                        While currentpos < endlinepos
                              currentpos + 1
                              char = ScintillaSendMessage(sciptr, #SCI_GETCHARAT, currentpos)
                              If Not ((char >= 'a' And char <= 'z') Or (char >= 'A' And char <= 'Z') Or char = '_' Or (char >= '0' And char <= '9'))
                                    currentpos-1
                                    Break
                              EndIf
                              startkeyword + 1
                        Wend
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, startkeyword, #LexerState_Constant)
                  Default
                        ScintillaSendMessage(sciptr, #SCI_SETSTYLING, 1, #LexerState_NonKeyword)
            EndSelect
            currentpos+1
      Wend
EndProcedure

ProcedureDLL ScintillaCallBack(Gadget, *scinotify.SCNotification)
      Select *scinotify\nmhdr\code
            Case #SCN_STYLENEEDED
                  Highlight(Gadget, *scinotify\position)
            Case #SCN_MARGINCLICK
                  ScintillaSendMessage(Gadget, #SCI_TOGGLEFOLD, ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, *scinotify\Position))
      EndSelect
EndProcedure


If OpenWindow(0, 0, 0, 800, 600, "Scintilla exemple", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
     
      If UseGadgetList(WindowID(0))
            ScintillaGadget(0, 0, 0, 800, 600, @ScintillaCallBack())
            ; Choose a lexer
            ScintillaSendMessage(0, #SCI_SETLEXER, #SCLEX_CONTAINER, 0)
           
            ; Set default font
            ScintillaSendMessage(0, #SCI_STYLESETFONT, #STYLE_DEFAULT, @"Courier New")
            ScintillaSendMessage(0, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 12)
            ScintillaSendMessage(0, #SCI_STYLECLEARALL)
           
            ; Set caret line colour
            ScintillaSendMessage(0, #SCI_SETCARETLINEBACK, $eeeeff)
            ScintillaSendMessage(0, #SCI_SETCARETLINEVISIBLE, #True)
           
            ; Set styles for custom lexer
            ScintillaSendMessage(0, #SCI_STYLESETFORE, #LexerState_Comment, $bb00)
            ScintillaSendMessage(0, #SCI_STYLESETITALIC, #LexerState_Comment, 1)
            ScintillaSendMessage(0, #SCI_STYLESETFORE, #LexerState_NonKeyword, 0)
            ScintillaSendMessage(0, #SCI_STYLESETFORE, #LexerState_Keyword, RGB(0, 102, 102))
            ScintillaSendMessage(0, #SCI_STYLESETFORE, #LexerState_Constant, RGB(169, 64, 147))
            ScintillaSendMessage(0, #SCI_STYLESETFORE, #LexerState_String, RGB(255, 139, 37))
            ; Margins
            ScintillaSendMessage(0, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER)
            ScintillaSendMessage(0, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
            ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 0, 50)
            ScintillaSendMessage(0, #SCI_SETMARGINWIDTHN, 2, 20)
            ScintillaSendMessage(0, #SCI_SETMARGINSENSITIVEN, 2, #True)
           
            ; Choose folding icons
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPEN, #SC_MARK_CIRCLEMINUS)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDER, #SC_MARK_CIRCLEPLUS)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERSUB, #SC_MARK_VLINE)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERTAIL, #SC_MARK_LCORNERCURVE)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEREND, #SC_MARK_CIRCLEPLUSCONNECTED)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDEROPENMID, #SC_MARK_CIRCLEMINUSCONNECTED)
            ScintillaSendMessage(0, #SCI_MARKERDEFINE, #SC_MARKNUM_FOLDERMIDTAIL, #SC_MARK_TCORNERCURVE)
           
            ; Choose folding icon colours
            ScintillaSendMessage(0, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDER, $FFFFFF)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDER, 0)
            ScintillaSendMessage(0, #SCI_MARKERSETFORE, #SC_MARKNUM_FOLDEROPEN, $FFFFFF)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPEN, 0)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDEROPENMID, 0)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERSUB, 0)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERTAIL, 0)
            ScintillaSendMessage(0, #SCI_MARKERSETBACK, #SC_MARKNUM_FOLDERMIDTAIL, 0)
           
            txt.s = "procedure test()"+#LF$
            txt.s + " #test = "+ Chr(34)+ "chaine 1"+ Chr(34)+#LF$
            txt.s + " If #test = 24"+#LF$
            txt.s + "   ;test "+#LF$
            txt.s + " Else"+#LF$
            txt.s + ""+#LF$
            txt.s + " EndIf"+#LF$
            txt.s + "EndProcedure"+#LF$
            ScintillaSendMessage(0, #SCI_SETTEXT, #Null, @txt)
      EndIf
     
     
      Repeat
            Event = WaitWindowEvent()
           
            If Event = #PB_Event_CloseWindow
                  Quit = 1
            EndIf
           
      Until Quit = 1
     
EndIf

End
Créé le 1er février 2009  par Chaos

C'est une version minimaliste, elle permet surtout de montrer les bases pour créer son propre éditeur.

 
Sélectionnez
EnableExplicit

Enumeration
  #File
 
  #Mainform
 
  #MainMenu
  #New
  #Open
  #Save
  #SaveAs
  #Quit
 
  #Editor
  #StatusBar
EndEnumeration

Global StyleWindows.l=#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget
Global SciPos.l, SciLine.l, SciCol.l, SciIndent.l, SciFile.s, SciText.s
Global Result.l, FileLenght.l, *MemoryID.l

;Initialisation de la DLL Scintilla.
;Attention : SciLexer.dll doit etre present dans le meme dossier que votre programme
;ou bien dans un dossier dont vous aurez indiqué le chemin.
If Not InitScintilla("SciLexer.dll")
  MessageRequester("Information", "SciLexer.dll doit etre present dans le meme dossier que votre programme")
  End
EndIf


;CallBack qui recevra les evenements emis par le gadget Scintilla
;*scinotify pointe vers une structure comportant les informations sur l'évènement:
;Voir le bas de cette page http://www.scintilla.org/ScintillaDoc.html
;
;Cette procedure va permettre de connaitre la position courante du curseur
;et de se positionner correctement apres avoir actionner la touche Entrée
ProcedureDLL ScintillaCallBack(Gadget, *scinotify.SCNotification)
  ;La touche Entrée est utilisée
  If *scinotify\ch=13
   
    ;Mise en place dans la nouvelle ligne de l'indentation de la ligne précédente
    ScintillaSendMessage(Gadget, #SCI_SETLINEINDENTATION, SciLIne+1, SciIndent)
   
    ;Positionnement du curseur d'edition sur la nouvelle ligne
    ;Si pas d'indentation alors on ajoute 2 (ça fait bricolage mais je n'ai pas trouvé mieux)
    If SciIndent=0
      SciPos=SciPos+2
    EndIf
   
    ;Positionnement du curseur
    ScintillaSendMessage(Gadget, #SCI_GOTOPOS, SciPos+SciIndent)

  EndIf
 
  ;Determination de la position à l'intérieur de la chaine scintilla
  SciPos = ScintillaSendMessage(Gadget, #SCI_GETANCHOR)
 
  ;Determination de la ligne en cours
  SciLine = ScintillaSendMessage(Gadget, #SCI_LINEFROMPOSITION, SciPos)
 
  ;Determination de la colonne en cours
  SciCol = ScintillaSendMessage(Gadget, #SCI_GETCOLUMN, SciPos)
 
  ;Determination de l'indentation
  SciIndent = ScintillaSendMessage(Gadget, #SCI_GETLINEINDENTATION, SciLine)
 
  ;Affichage du numéro de ligne/colonne dans la barre de status
  StatusBarText(#StatusBar,0,"Line : " +Str(SciLine+1)+ "  Col : "+Str(SciCol+1), #PB_StatusBar_Center)
EndProcedure

Procedure SetScintillaProperties(Gadget)
 
  ;Chargement du dictionnaire HTML
  ScintillaSendMessage(Gadget, #SCI_SETLEXER, #SCLEX_HTML)
 
  ;Style par defaut du gadget scintilla
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #STYLE_DEFAULT, #Black)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #STYLE_DEFAULT, $EAFEFE)
  ScintillaSendMessage(Gadget, #SCI_STYLESETFONT,#STYLE_DEFAULT,@"Verdana")
  ScintillaSendMessage(Gadget, #SCI_STYLESETSIZE, #STYLE_DEFAULT, 12)
  ;ScintillaSendMessage(gadget, #SCI_CLEARALL)
   
  ;Affichage de la colone de numérotation des lignes
  ScintillaSendMessage(Gadget, #SCI_SETMARGINTYPEN, 0, #SC_MARGIN_NUMBER) ;
  ScintillaSendMessage(Gadget, #SCI_SETMARGINWIDTHN, 0, 40)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #STYLE_LINENUMBER, $D4D4D4)
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #STYLE_LINENUMBER, #Yellow)
 
  ;Margin Mask Folder
  ScintillaSendMessage(Gadget, #SCI_SETMARGINMASKN, 2, #SC_MASK_FOLDERS)
  ScintillaSendMessage(Gadget, #SCI_SETMARGINWIDTHN, 2, 15)

  ;Affichage et couleur de la ligne active
  ScintillaSendMessage(Gadget, #SCI_SETCARETLINEVISIBLE, #True)
  ScintillaSendMessage(Gadget, #SCI_SETCARETLINEBACK, $C4FBFA)
 
  ;Les tabulations sont remplacées par des espaces
  ScintillaSendMessage(Gadget, #SCI_SETUSETABS, #False)
 
  ;Nombre d'espaces pour une tabulation
  ScintillaSendMessage(Gadget, #SCI_SETINDENT, 4)
 
  ;Affichage du guide d'indentation et affectatoin d'une couleur
  ScintillaSendMessage(Gadget, #SCI_SETINDENTATIONGUIDES, #SC_IV_LOOKFORWARD)
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #STYLE_INDENTGUIDE, #Red)
 
  ;coloration syntaxique (Prefixe #SCE_H pour les attribut du lexer HTML)
 
  ;Texte par defaut
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_DEFAULT, #Black)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_DEFAULT, $EAFEFE)
 
  ;Balises HTML
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_TAG, #Red)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_TAG, $EAFEFE)
 
  ;Balises inconnues
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_TAGUNKNOWN, $949494)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_TAGUNKNOWN, $EAFEFE)
 
  ;Attributs
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_ATTRIBUTE, #Blue)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_ATTRIBUTE, $EAFEFE)
 
  ;Attributs inconnus
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_ATTRIBUTEUNKNOWN, $505000)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_ATTRIBUTEUNKNOWN, $EAFEFE)
 
  ;Chiffres
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_NUMBER, #Red)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_NUMBER, $EAFEFE)
 
  ;Texte entres guillemets
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_DOUBLESTRING, $787878)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_DOUBLESTRING, $EAFEFE)
 
  ;Textes entres simples quotes
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_SINGLESTRING, $787878)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_SINGLESTRING, $EAFEFE)
 
  ;Autres balises
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_OTHER, $AE0050)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_OTHER, $EAFEFE)
 
  ;Commentaires
  ScintillaSendMessage(Gadget, #SCI_STYLESETFORE, #SCE_H_COMMENT, #Green)
  ScintillaSendMessage(Gadget, #SCI_STYLESETBACK, #SCE_H_COMMENT, $EAFEFE)
 
EndProcedure

;Affichage de la fenetre principale de l'application
Procedure MainFormShow() 
  OpenWindow(#MainForm,  0,  0, 800, 600, "HTML Editor", StyleWindows)
 
  ;Evite le scintillement du Scintilla gadget lors du redimentionnement de la fenetre
  SmartWindowRefresh(#Mainform, #True)
 
  ;Menu de l'application
  CreateMenu(#mainmenu,WindowID(#MainForm))
  MenuTitle("Fichier")
  MenuItem(#New,"Nouveau")
  MenuItem(#Open,"Ouvrir")
  MenuItem(#Save,"Enregistre")
  MenuItem(#SaveAs,"Enregistrer Sous")
  MenuBar()
  MenuItem(#Quit,"Quitter")
 
  ;@ScintillaCallBack() correspond à l'adresse de la procédure
  ;qui recevra les évènements émis par le contrôle.
  ScintillaGadget(#Editor, 10, 40, 790, 590, @ScintillaCallBack())
   
  CreateStatusBar(#StatusBar,WindowID(#Mainform))
  AddStatusBarField(150)
  AddStatusBarField(450)
 
 
  RemoveKeyboardShortcut(#Mainform, #PB_Shortcut_Tab)
 
  ;Affectation des touches de racourcis à aucun évènement menu
  ;tant qu'elles ne servent à rien afin d'éviter l'insertion des caracteres spéciaux
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_B, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_G, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_E, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_R, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_O, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_P, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_Q, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_S, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_F, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_H, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_K, 0)
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_W, 0) 
  AddKeyboardShortcut(#Mainform, #PB_Shortcut_Control+#PB_Shortcut_N, 0)
 
  StatusBarText(#StatusBar,1,"Nouveau document")
  SetActiveGadget(#editor)
EndProcedure

;Redimensionnement de la fenetre principale
Procedure MainFormResize()
  ResizeGadget(#Editor, #PB_Ignore, #PB_Ignore, WindowWidth(#MainForm)-30, WindowHeight(#Mainform)-100)
EndProcedure

;Nouveau document
Procedure NewFile()
  ScintillaSendMessage(#Editor, #SCI_SETTEXT, 0, @"")
  StatusBarText(#StatusBar,1,"Nouveau document")
EndProcedure

;Ouverture d'un fichier
Procedure LoadFile()
  SciFile=OpenFileRequester("Ouvrir un fichier", "", "html (*.html)|*.html|All files (*.*)|*.*", 0)
  If SciFile
    StatusBarText(#StatusBar,1,SciFile)
    If ReadFile(#File, SciFile)
      FileLenght = Lof(#file)
      *MemoryID = AllocateMemory(FileLenght)
      If *MemoryID
        ReadData(#File, *MemoryID, FileLenght)
        ScintillaSendMessage(#Editor, #SCI_SETTEXT, 0, *MemoryID)
        FreeMemory(*MemoryID)
      EndIf
      CloseFile(#File) 
    EndIf 
  EndIf
EndProcedure

;Sauvegarde d'un fichier sous
Procedure SaveFileAs()
  SciFile=OpenFileRequester("Sauvegarder un  fichier sous", "", "html (*.html)|*.html|All files (*.*)|*.*", 0)
  If SciFile
    StatusBarText(#StatusBar,1,SciFile)
    If CreateFile(#File, SciFile)
     FileLenght = ScintillaSendMessage(#Editor, #SCI_GETLENGTH)+1
     *MemoryID = AllocateMemory(FileLenght)
     If *MemoryID
       ScintillaSendMessage(#Editor, #SCI_GETTEXT, FileLenght, *MemoryID)
       WriteData(#File, *MemoryID, FileLenght)
       FreeMemory(*MemoryID) 
     EndIf
     CloseFile(#File) 
    EndIf
  EndIf
EndProcedure

;Sauvegarde d'un fichier
Procedure SaveFile()
  If SciFile<>""
  If CreateFile(#File, SciFile)
    FileLenght = ScintillaSendMessage(#Editor, #SCI_GETLENGTH)+1
    *MemoryID = AllocateMemory(FileLenght)
    If *MemoryID
      ScintillaSendMessage(#Editor, #SCI_GETTEXT, FileLenght, *MemoryID)
      WriteData(#File, *MemoryID, FileLenght)
      FreeMemory(*MemoryID) 
    EndIf
    CloseFile(#File) 
  EndIf
Else
  SaveFileAs()
EndIf
EndProcedure

;Debut du traitement
MainFormShow()
SetScintillaProperties(#Editor)

Repeat     
  Select WaitWindowEvent()
    Case #PB_Event_Menu
      Select EventMenu()
        Case #new
          NewFile()
        Case #Open
          LoadFile()
        Case #Save
          SaveFile()
        Case #SaveAs
          SaveFileAs()
        Case #Quit
          End
      EndSelect
     
    Case #PB_Event_Gadget
      Select EventGadget()
         
      EndSelect
     
    Case #PB_Event_SizeWindow
      MainFormResize()
     
    Case #PB_Event_CloseWindow
      End
     
  EndSelect
ForEver
Créé le 10 décembre 2010  par falsam

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.