Editeur de message console

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
dayvid
Messages : 1242
Inscription : mer. 11/nov./2009 18:17
Localisation : Poitiers (Vienne)

Editeur de message console

Message par dayvid »

Bonjour :)

J'ai eu l'idée de crée ceci, en faite j'avais déjà eu l'idée
mais j'avais laisser tomber tellement que c'étais dur
et puis est repris mais cette fois avec une approche différente et réalisable
pas si dur que sa en fin de compte enfin si on veut :roll:

J’ai beaucoup ramé pour les couleurs mais est fini par y arriver :D

Mais la cette fois si je rame vraiment et est épuiser tous mon stocke de neurones :(

La ou sa coince c’est quand on écrie avec des retours a la ligne
Le résulta n’est pas du tous satisfaisant

Le message démo marche mais c’est tous
Pourriez-vous m’aider s’il vous plaie :)

Code : Tout sélectionner

Enumeration
  #Fentre
EndEnumeration

Enumeration
  #Editor_0
  #Button_1
  #Button_2
  #Button_3
  #MenuPopup
EndEnumeration

Structure CHARFORMAT2_ 
  cbSize.l 
  dwMask.l  
  dwEffects.l  
  yHeight.l  
  yOffset.l  
  crTextColor.l  
  bCharSet.b  
  bPitchAndFamily.b  
  szFaceName.b[#LF_FACESIZE]  
  _wPad2.w  
  wWeight.w  
  sSpacing.w  
  crBackColor.l  
  lcid.l  
  dwReserved.l  
  sStyle.w  
  wKerning.w  
  bUnderlineType.b  
  bAnimation.b  
  bRevAuthor.b  
  bReserved1.b 
EndStructure

Global CouleurTexte
Global CouleurFondTexte

;Future proof!
CompilerIf Defined(ENM_LINK, #PB_Constant)
CompilerElse
  #ENM_LINK = $04000000
CompilerEndIf
CompilerIf Defined(CFM_LINK, #PB_Constant)
CompilerElse
  #CFM_LINK = $00000020
CompilerEndIf
CompilerIf Defined(CFE_LINK, #PB_Constant)
CompilerElse
  #CFE_LINK = $0020
CompilerEndIf
CompilerIf Defined(CFE_SUBSCRIPT, #PB_Constant)
CompilerElse
  #CFE_SUBSCRIPT = $00010000
CompilerEndIf
CompilerIf Defined(CFE_SUPERSCRIPT, #PB_Constant)
CompilerElse
  #CFE_SUPERSCRIPT = $00020000
CompilerEndIf
CompilerIf Defined(CFM_SUBSCRIPT, #PB_Constant)
CompilerElse
  #CFM_SUBSCRIPT = #CFE_SUBSCRIPT | #CFE_SUPERSCRIPT
  #CFM_SUPERSCRIPT=#CFM_SUBSCRIPT
CompilerEndIf
CompilerIf Defined(CFM_BACKCOLOR, #PB_Constant)
CompilerElse
  #CFM_BACKCOLOR =$4000000
CompilerEndIf

Procedure.l IsMouseOverGadget(Gadget) ; gestion du passge de la souris sur le gadget
  If IsGadget(Gadget)
    GetWindowRect_(GadgetID(Gadget),GadgetRect.RECT) 
    GetCursorPos_(mouse.POINT) 
    If mouse\x>=GadgetRect\Left And mouse\x<=GadgetRect\right And mouse\y>=GadgetRect\Top And mouse\y<=GadgetRect\bottom 
      ProcedureReturn #True 
    Else 
      ProcedureReturn #False 
    EndIf 
  EndIf
EndProcedure 

Procedure Editor_BackColor(Color.l) 
  format.CHARFORMAT2 
  format\cbSize = SizeOf(CHARFORMAT2) 
  format\dwMask = #CFM_BACKCOLOR
  format\crBackColor = Color 
  SendMessage_(GadgetID(#Editor_0), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure

; Set the Text color for the Selection 
; in RGB format 
Procedure Editor_Color(Color.l) 
  format.CHARFORMAT2 
  format\cbSize = SizeOf(CHARFORMAT2) 
  format\dwMask = #CFM_COLOR 
  format\crTextColor = Color 
  SendMessage_(GadgetID(#Editor_0), #EM_SETCHARFORMAT, #SCF_SELECTION, @format) 
EndProcedure 

Procedure Couleur_police(Couleur_texte, Couleur_fond)
  CouleurTexte = Couleur_texte
  CouleurFondTexte = Couleur_fond
  Editor_BackColor(Couleur_fond)
  Editor_Color(Couleur_texte)
EndProcedure

Procedure CaracteristiqueSelection()
  format.CHARFORMAT2 
  format\cbSize = SizeOf(CHARFORMAT2) 
  format\dwMask = #CFM_COLOR 
  SendMessage_(GadgetID(#Editor_0), #EM_GETCHARFORMAT, #SCF_SELECTION, @format) 
  CouleurTexte = format\crTextColor
  format.CHARFORMAT2 
  format\cbSize = SizeOf(CHARFORMAT2) 
  format\dwMask = #CFM_BACKCOLOR
  SendMessage_(GadgetID(#Editor_0), #EM_GETCHARFORMAT, #SCF_SELECTION, @format) 
  CouleurFondTexte = format\crBackColor
EndProcedure

Procedure selection_libre(ligne_de_depart.l, caractere_de_depart.l, ligne_de_fin.l, caractere_de_fin.l)
  If IsGadget(#Editor_0)
    ligne_de_depart - 1
    sel.CHARRANGE 
    sel\cpMin = SendMessage_(GadgetID(#Editor_0), #EM_LINEINDEX, ligne_de_depart, 0) + caractere_de_depart - 1 
    
    If ligne_de_fin = -1 
      ligne_de_fin = SendMessage_(GadgetID(#Editor_0), #EM_GETLINECOUNT, 0, 0) - 1 
    EndIf 
    sel\cpMax = SendMessage_(GadgetID(#Editor_0), #EM_LINEINDEX, ligne_de_fin, 0) 
    
    If caractere_de_fin = -1 
      sel\cpMax + SendMessage_(GadgetID(#Editor_0), #EM_LINELENGTH, sel\cpMax, 0) 
    Else 
      sel\cpMax + caractere_de_fin - 1 
    EndIf 
    SendMessage_(GadgetID(#Editor_0), #EM_EXSETSEL, 0, @sel) 
  EndIf
EndProcedure 
  
Procedure selectionner_caracteres(ligne, position_depart, position_fin)
  selection_libre(ligne, position_depart, ligne - 1, position_fin)
EndProcedure
  
  Procedure deplacer_cursseur_console(ligne, position)
  If IsGadget(#Editor_0)
  x = position
  y = ligne
  If x = - 1
  x = - 9999
  EndIf
  
  If y = - 1
  y = 9999
  EndIf
  
  ; Set cursor position 
  REG = GadgetID(#Editor_0) 
  CharIdx = SendMessage_(REG,#EM_LINEINDEX,y-1,0) 
  LLength = SendMessage_(REG,#EM_LINELENGTH,CharIdx,0) 
  If LLength >= x-1 
    CharIdx + x-1 
  EndIf 
  Range.CHARRANGE 
  Range\cpMin = CharIdx 
  Range\cpMax = CharIdx 
  SendMessage_(REG,#EM_EXSETSEL,0,Range) 
  EndIf
EndProcedure 

Procedure ecrire(Texte$, CouleurDuTexte, CouleurDuFondDuTexte)
    Couleur_police(CouleurDuTexte, CouleurDuFondDuTexte)
    SendMessage_(GadgetID(#Editor_0), #EM_REPLACESEL, 0, Texte$) 
EndProcedure
  
Procedure.l renvoiller_position_cursseur_Y_console() 
  If IsGadget(#Editor_0)
    ; returns Y-Pos of Cursor 
    REG = GadgetID(#Editor_0) 
    SendMessage_(REG,#EM_EXGETSEL,0,Range.CHARRANGE) 
    position_cursseur_Y_console = SendMessage_(REG,#EM_EXLINEFROMCHAR,0,Range\cpMin)+1 
    ProcedureReturn position_cursseur_Y_console
  EndIf
EndProcedure 

Procedure Open_Fentre()
  If OpenWindow(#Fentre, 361, 278, 470, 305, "Editeur de message console",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    EditorGadget(#Editor_0, 5, 5, 460, 245)
    CreatePopupImageMenu(#MenuPopup, #PB_Menu_ModernLook) 
    MenuTitle("Couleurs")
    OpenSubMenu("Couleur du texte")
      
      MenuItem(114, "Noir") 
      MenuItem(115, "Bleu") 
      MenuItem(116, "Vert") 
      MenuItem(117, "Cyan") 
      MenuItem(118, "Rouge") 
      MenuItem(119, "Magenta") 
      MenuItem(120, "Brun") 
      MenuItem(121, "Gris clair") 
      MenuItem(122, "Gris foncé") 
      MenuItem(123, "Bleu clair") 
      MenuItem(124, "Vert clair") 
      MenuItem(125, "Cyan clair") 
      MenuItem(126, "Rouge clair") 
      MenuItem(127, "Magenta clair") 
      MenuItem(128, "Jaune")
      MenuItem(129, "Blanc")
      MenuBar()
    CloseSubMenu()
    
    OpenSubMenu("Couleur du fond")
      MenuItem(130, "Noir") 
      MenuItem(131, "Bleu") 
      MenuItem(132, "Vert") 
      MenuItem(133, "Cyan") 
      MenuItem(134, "Rouge") 
      MenuItem(135, "Magenta") 
      MenuItem(136, "Brun") 
      MenuItem(137, "Gris clair") 
      MenuItem(138, "Gris foncé") 
      MenuItem(139, "Bleu clair") 
      MenuItem(140, "Vert clair") 
      MenuItem(141, "Cyan clair") 
      MenuItem(142, "Rouge clair") 
      MenuItem(143, "Magenta clair") 
      MenuItem(144, "Jaune")
      MenuItem(145, "Blanc")
      MenuBar()
    CloseSubMenu()
    
  CloseSubMenu()
    
      ButtonGadget(#Button_1, 175, 265, 115, 27, "Valider le message")
      ButtonGadget(#Button_2, 302, 265, 115, 27, "Annuler le message")
      ButtonGadget(#Button_3, 49, 265, 115, 27, "Aperçus du message")
      Couleur_police(0, RGB(255, 255, 255))
      
      ; Petite démo:
      
      SetGadgetColor(#Editor_0, #PB_Gadget_BackColor, 0)
      
      ecrire("Si ", RGB(255, 255, 0), 0)
      ecrire("je ", RGB(255, 0, 0), 0)
      ecrire("devais ", RGB(0, 128, 0), 0)
      ecrire("choisir ", RGB(0, 0, 255), 0)
      ecrire("l'animal ", RGB(255, 0, 0), 0)
      ecrire("que ", RGB(255, 255, 0), 0)
      ecrire("je ", RGB(0, 128, 0), 0)
      ecrire("serais ", RGB(0, 0, 255), 0)
      ecrire(Chr(13) + Chr(10), 0, 0)
      ecrire("Je ", RGB(255, 255, 0), 0)
      ecrire("choisirais ", RGB(0, 128, 0), 0)
      ecrire("alors ", RGB(0, 0, 255), 0)
      ecrire("l'oiseau", RGB(255, 0, 0), 0)
      
      ; fin démo
      
      Repeat ; Start of the event loop
        
        Event = WaitWindowEvent() ; This line waits until an event is received from Windows
        WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
        GadgetID = EventGadget() ; Is it a gadget event?
        EventType = EventType() ; The event type
        Menu = EventMenu()
        
        
        If Event = #PB_Event_Gadget
          
          If GadgetID = #Editor_0
            
          ElseIf GadgetID = #Button_1 ; valider
            
          ElseIf GadgetID = #Button_2 ; annuler
            
          ElseIf GadgetID = #Button_3 ; aperçus
            ligne = 1
            OpenConsole()
            For lecture = 1 To Len(GetGadgetText(#Editor_0))
              Delay(50)
              
              selectionner_caracteres(ligne, lecture, lecture+1)
              CaracteristiqueSelection()
              Caractere$ = Mid(GetGadgetText(#Editor_0), lecture, 1)
              
              position_cursseur_Y_console = renvoiller_position_cursseur_Y_console()
              
              If Sauvegarde_position_cursseur_Y_console = position_cursseur_Y_console
                
              ElseIf Sauvegarde_position_cursseur_Y_console < position_cursseur_Y_console
                If Sauvegarde_position_cursseur_Y_console > 0
                  PrintN("")
                EndIf
                Debug 1
                EndIf
              
              Sauvegarde_position_cursseur_Y_console = position_cursseur_Y_console
              
              If CouleurTexte = RGB(0, 0, 0) ; Noir
                CouleurDuTexte = 0
              ElseIf CouleurTexte = RGB(0, 0, 128) ; Bleu
                CouleurDuTexte = 1
              ElseIf CouleurTexte = RGB(0, 128, 0) ; Vert
                CouleurDuTexte = 2
              ElseIf CouleurTexte = RGB(0, 128, 128) ; Cyan
                CouleurDuTexte = 3
              ElseIf CouleurTexte = RGB(128, 0, 0) ; Rouge
                CouleurDuTexte = 4
              ElseIf CouleurTexte = RGB(128, 0, 128) ; Magenta
                CouleurDuTexte = 5
              ElseIf CouleurTexte = RGB(128, 128, 0) ; Brun
                CouleurDuTexte = 6
              ElseIf CouleurTexte = RGB(192, 192, 192) ; Gris clair
                CouleurDuTexte = 7
              ElseIf CouleurTexte = RGB(128, 128, 128) ; Gris foncé
                CouleurDuTexte = 8
              ElseIf CouleurTexte = RGB(0, 0, 255) ; Bleu clair
                CouleurDuTexte = 9
              ElseIf CouleurTexte = RGB(0, 255, 0) ; Vert clair
                CouleurDuTexte = 10
              ElseIf CouleurTexte = RGB(0, 255, 255) ; Cyan clair
                CouleurDuTexte = 11
              ElseIf CouleurTexte = RGB(255, 0, 0) ; Rouge clair
                CouleurDuTexte = 12
              ElseIf CouleurTexte = RGB(255, 0, 255) ; Magenta clair
                CouleurDuTexte = 13
              ElseIf CouleurTexte = RGB(255, 255, 0) ; Jaune
                CouleurDuTexte= 14
              ElseIf CouleurTexte = RGB(255, 255, 255) ; Blanc
                CouleurDuTexte = 15
              EndIf
              
              If CouleurFondTexte = RGB(0, 0, 0) ; Noir
                CouleurDuFond = 0
              ElseIf CouleurFondTexte = RGB(0, 0, 128) ; Bleu
                CouleurDuFond = 1
              ElseIf CouleurFondTexte = RGB(0, 128, 0) ; Vert
                CouleurDuFond = 2
              ElseIf CouleurFondTexte = RGB(0, 128, 128) ; Cyan
                CouleurDuFond = 3
              ElseIf CouleurFondTexte = RGB(128, 0, 0) ; Rouge
                CouleurDuFond = 4
              ElseIf CouleurFondTexte = RGB(128, 0, 128) ; Magenta
                CouleurDuFond = 5
              ElseIf CouleurFondTexte = RGB(128, 128, 0) ; Brun
                CouleurDuFond = 6
              ElseIf CouleurFondTexte = RGB(192, 192, 192) ; Gris clair
                CouleurDuFond = 7
              ElseIf CouleurFondTexte = RGB(128, 128, 128) ; Gris foncé
                CouleurDuFond = 8
              ElseIf CouleurFondTexte = RGB(0, 0, 255) ; Bleu clair
                CouleurDuFond = 9
              ElseIf CouleurFondTexte = RGB(0, 255, 0) ; Vert clair
                CouleurDuFond = 10
              ElseIf CouleurFondTexte = RGB(0, 255, 255) ; Cyan clair
                CouleurDuFond = 11
              ElseIf CouleurFondTexte = RGB(255, 0, 0) ; Rouge clair
                CouleurDuFond = 12
              ElseIf CouleurFondTexte = RGB(255, 0, 255) ; Magenta clair
                CouleurDuFond = 13
              ElseIf CouleurFondTexte = RGB(255, 255, 0) ; Jaune
                CouleurDuFond = 14
              ElseIf CouleurFondTexte = RGB(255, 255, 255) ; Blanc
                CouleurDuFond = 15
              EndIf
              
              ConsoleColor(CouleurDuTexte, CouleurDuFond)
              If Asc(Caractere$) > 31
                Print(Caractere$)
                EndIf

            Next
          EndIf
          
        ElseIf Event = #WM_RBUTTONDOWN
          CaracteristiqueSelection()
          If IsMouseOverGadget(#Editor_0)
            DisplayPopupMenu(#MenuPopup,WindowID(#Fentre)) 
          EndIf
          
        ElseIf Event = #PB_Event_Menu
          Select Menu
          
        Case 114 To 129 ; Couleur du texte
          If Menu = 114 ; Noir
            Couleur_police(RGB(0, 0, 0), CouleurFondTexte)
          ElseIf Menu = 115 ; Bleu
            Couleur_police(RGB(0, 0, 128), CouleurFondTexte)
          ElseIf Menu = 116 ; Vert
            Couleur_police(RGB(0, 128, 0), CouleurFondTexte)
          ElseIf Menu = 117 ; Cyan
            Couleur_police(RGB(0, 128, 128), CouleurFondTexte)
          ElseIf Menu = 118 ; Rouge
            Couleur_police(RGB(128, 0, 0), CouleurFondTexte)
          ElseIf Menu = 119 ; Magenta
            Couleur_police(RGB(128, 0, 128), CouleurFondTexte)
          ElseIf Menu = 120 ; Brun
            Couleur_police(RGB(128, 128, 0), CouleurFondTexte)
          ElseIf Menu = 121 ; Gris clair
            Couleur_police(RGB(192, 192, 192), CouleurFondTexte)
          ElseIf Menu = 122 ; Gris foncé
            Couleur_police(RGB(128, 128, 128), CouleurFondTexte)
          ElseIf Menu = 123 ; Bleu clair
            Couleur_police(RGB(0, 0, 255), CouleurFondTexte)
          ElseIf Menu = 124 ; Vert clair
            Couleur_police(RGB(0, 255, 0), CouleurFondTexte)
          ElseIf Menu = 125 ; Cyan clair
            Couleur_police(RGB(0, 255, 255), CouleurFondTexte)
          ElseIf Menu = 126 ; Rouge clair
            Couleur_police(RGB(255, 0, 0), CouleurFondTexte)
          ElseIf Menu = 127 ; Magenta clair
            Couleur_police(RGB(255, 0, 255), CouleurFondTexte)
          ElseIf Menu = 128 ; Jaune
            Couleur_police(RGB(255, 255, 0), CouleurFondTexte)
          ElseIf Menu = 129 ; Blanc
            Couleur_police(RGB(255, 255, 255), CouleurFondTexte)
          EndIf
          
        Case 130 To 145 ; Couleur de fond du texte
          If Menu = 130 ; Noir
            Couleur_police(CouleurTexte, RGB(0, 0, 0))
          ElseIf Menu = 131 ; Bleu
            Couleur_police(CouleurTexte, RGB(0, 0, 128))
          ElseIf Menu = 132 ; Vert
            Couleur_police(CouleurTexte, RGB(0, 128, 0))
          ElseIf Menu = 133 ; Cyan
            Couleur_police(CouleurTexte, RGB(0, 128, 128))
          ElseIf Menu = 134; Rouge
            Couleur_police(CouleurTexte, RGB(128, 0, 0))
          ElseIf Menu = 135 ; Magenta
            Couleur_police(CouleurTexte, RGB(128, 0, 128))
          ElseIf Menu = 136 ; Brun
            Couleur_police(CouleurTexte, RGB(128, 128, 0))
          ElseIf Menu = 137 ; Gris clair
            Couleur_police(CouleurTexte, RGB(192, 192, 192))
          ElseIf Menu = 138 ; Gris foncé
            Couleur_police(CouleurTexte, RGB(128, 128, 128))
          ElseIf Menu = 139 ; Bleu clair
            Couleur_police(CouleurTexte, RGB(0, 0, 255))
          ElseIf Menu = 140 ; Vert clair
            Couleur_police(CouleurTexte, RGB(0, 255, 0))
          ElseIf Menu = 141 ; Cyan clair
            Couleur_police(CouleurTexte, RGB(0, 255, 255))
          ElseIf Menu = 142 ; Rouge clair
            Couleur_police(CouleurTexte, RGB(255, 0, 0))
          ElseIf Menu = 143 ; Magenta clair
            Couleur_police(CouleurTexte, RGB(255, 0, 255))
          ElseIf Menu = 144 ; Jaune
            Couleur_police(CouleurTexte, RGB(255, 255, 0))
          ElseIf Menu = 145 ; Blanc
            Couleur_police(CouleurTexte, RGB(255, 255, 255))
          EndIf
        
      EndSelect
      
  EndIf
  
  
      Until Event = #PB_Event_CloseWindow ; End of the event loop
      
  EndIf
EndProcedure

Open_Fentre()

; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 233
; Folding = P0
; EnableCompileCount = 46
; EnableBuildCount = 0
; EnableExeConstant
; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 471
; FirstLine = 422
; Folding = --
; EnableCompileCount = 46
; EnableBuildCount = 0
; EnableExeConstant
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php