[LibEditorPlus] Numérotation de Lignes

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

[LibEditorPlus] Numérotation de Lignes

Message par Progi1984 »

Bonjour à tous, j'ai besoin de vous pour optimiser (/personnaliser) un max la numérotation de lignes. Voici le code initial :

Code : Tout sélectionner

#SCF_ALL = 4

#PFM_NUMBERINGSTYLE=$2000
#PFM_NUMBERINGTAB=$4000
#PFM_NUMBERINGSTART=$8000

Enumeration
  #Editor_0
  #Editor_1
EndEnumeration


Global egPara.PARAFORMAT2
egPara\cbSize = SizeOf(PARAFORMAT2)
egPara\dwMask = #PFM_NUMBERING | #PFM_NUMBERINGSTART | #PFM_NUMBERINGSTYLE | #PFM_NUMBERINGTAB
egPara\wNumbering =2       ; 2 = 1..2..3 ; 3 = a..b..c ; 4 = A..B..C ; 5 = i...ii...iii ; 6 = I...II...III
egPara\wNumberingStart = 1   ; First number to use
egPara\wNumberingStyle = $100 ; 0 = NUM) ; $100 = (NUM) ; $200 =NUM. ; $300 = NUM
egPara\wNumberingTab = 700    ; twips
 
Procedure ALineNumber(hWnd, msg, wParam, lParam)
  result = #PB_ProcessPureBasicEvents
  Shared previousLineCount
  Select msg
    Case #WM_COMMAND
      Select wParam>>16 &$FFFF
        Case #EN_CHANGE
          
          currentLineCount = SendMessage_(lParam, #EM_GETLINECOUNT , 0, 0)
          ;MessageRequester("",Str(currentLineCount))
          If currentLineCount <> previousLineCount
            currentLine = SendMessage_(lParam, #EM_LINEFROMCHAR, -1, 0)
            ;MessageRequester("",Str(currentLine))
            currentPos = SendMessage_(lParam, #EM_GETSEL, @startPos, @endPos)
            ; --> Get current scroll postion 
            ; --<  pour y revenir aprés réécriture des items
            SendMessage_(lParam, #EM_GETSCROLLPOS, 0, @scrollP.POINT)
            egPara\wNumberingStart = currentLine+1
            ; --> Désactive la réaffichage de l'editorGadget
            ; --< pour éviter le scrolling lors de la réécriture des lignes
            SendMessage_(lParam, #WM_SETREDRAW, 0, 0)
            For a = currentLine-1 To currentLineCount -1
              egPara\wNumberingStart = a + 1
              line.s = GetGadgetItemText(GetActiveGadget(), a, 0)
              ; --> Line numbering only continues with valid item text
              ; --> so we'll add a temporary space character
              If line = ""
                line = " "
              EndIf
              SetGadgetItemText(GetActiveGadget(), a, line, 0)
              SendMessage_(lParam, #EM_SETPARAFORMAT, 0, egPara)
              ; --> On peut enlever le caractère espace temporaire
              If line = " "
                line = ""
                SetGadgetItemText(GetActiveGadget(), a, line, 0)
              EndIf
            Next a
           ; --> Put caret back To correct position
            SendMessage_(lParam, #EM_SETSCROLLPOS, 0, scrollP.POINT)
            SendMessage_(lParam, #EM_SETSEL, startPos, startPos)
           ; --> Turn redraw back on For EditorGadget
            SendMessage_(lParam, #WM_SETREDRAW, 1, 0)
           ; --> Redraw EditorGadget To show new line numbers
            InvalidateRect_(lParam, 0, 1)
          EndIf
          previousLineCount = SendMessage_(lParam, #EM_GETLINECOUNT , 0, 0)
      EndSelect
  EndSelect
  ProcedureReturn result
 EndProcedure
If OpenWindow(0, 0, 0, 800, 600, "EditorGadget with Line Numbers", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  EditorGadget (#Editor_0, 0, 0, 400, 600)
  EditorGadget (#Editor_1, 400, 0, 400, 600)
  SendMessage_(GadgetID(#Editor_0), #EM_SETEVENTMASK, 0, #ENM_CHANGE)
  SendMessage_(GadgetID(#Editor_1), #EM_SETEVENTMASK, 0, #ENM_CHANGE)
  For l = 1 To 260
    AddGadgetItem(#Editor_0, l, "Line " + Str(l))
    AddGadgetItem(#Editor_1, l, "Line " + Str(l))
    SendMessage_(GadgetID(#Editor_0), #EM_SETPARAFORMAT, 0, egPara)
    SendMessage_(GadgetID(#Editor_1), #EM_SETPARAFORMAT, 0, egPara)
    egPara\wNumberingStart +1
  Next
  
  SetWindowCallback(@ALineNumber())

  Repeat
    event = WaitWindowEvent()
  Until event = #PB_Event_CloseWindow
EndIf
End
Pouvez vous m'aider à l'optimiser ?

PS : Un grand Merci à FLYPE qui grace à son aide sur la fonction Editor_GetFormat m'a permis de travailler sur une bonne dizaine de nouvelles fonctions :)
Dernière modification par Progi1984 le mar. 18/juil./2006 9:26, modifié 1 fois.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Quelqu'un pour m'aider ?
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Moi perso non
Pourquoi tu veux optimer ? le code est pourtant assez court. C'est parce qu'une ou plusieurs fonctions sont lourdes ?
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Disons que je souhaite l'améliorer surtout au niveau du flicking des numéros de ligne !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bon, je pense à un autre code pour la numérotation des lignes qui me permet de faire des trucs plus sympas !

Code : Tout sélectionner

; Line-Numbering by LP0304

Declare MAKELONG(low,high)
Declare ReleaseOutput()
Declare WindowIDOutput(hWnd) ; returns the outputID for the declared window handle
Declare _iEditor_CallBack(hwnd, msg, wParam, lParam)

Procedure MAKELONG(low,high)
  ProcedureReturn low | (high<<16)
EndProcedure

Structure DrawingInfoStruct
  Type.l
  Window.l
  DC.l
  ReleaseProcedure.l
  PixelBuffer.l
  Pitch.l
  Width.l
  Height.l
  Depth.l
EndStructure
Global DS.DrawingInfoStruct
Procedure ReleaseOutput()
  ReleaseDC_(DSWindow,DSDC)
EndProcedure

Procedure WindowIDOutput(hWnd) ; returns the outputID for the declared window handle
  DS\Type=1
  DS\Window=hWnd
  DS\DC=GetDC_(hWnd) ;GetWindowDC_(hWnd)
  DS\ReleaseProcedure=@ReleaseOutput()
  ProcedureReturn DS
EndProcedure

Procedure _iEditor_CallBack(hwnd, msg, wParam, lParam)
  Protected rc.rect
  Protected fontsizecy
  Shared OLDP
  Shared *font.long
  Protected point.point
  res = CallWindowProc_(OLDP, hwnd, msg, wParam, lParam)
  If msg = #WM_PAINT
    HideCaret_(hwnd)
    GetClientRect_(hwnd,rc)
    startindex = SendMessage_(hwnd,#EM_CHARFROMPOS,0,@point)
    startline = SendMessage_(hwnd,#EM_LINEFROMCHAR,startindex,0)
    point\x = rc\right
    point\y = rc\bottom
    endindex = SendMessage_(hwnd,#EM_CHARFROMPOS,0,@point)
    endline = SendMessage_(hwnd,#EM_LINEFROMCHAR,endindex,0)
    StartDrawing(WindowIDOutput(hwnd))
      Box(0,0,48,rc\bottom,$C0C0C0)
      DrawingFont(*font\l)
      fontsizecy = TextHeight("M")
      lastLine = rc\bottom / fontsizecy + startline - 1
      x = 43
      x2 = x
      While (startline <= lastLine) And (startline <= endline)
        DrawText(x-TextWidth(Str(startline+1)),y,Str(startline+1),$000000,$C0C0C0)
        y + fontsizecy
        startline + 1
      Wend
    StopDrawing()
     
    ShowCaret_(hwnd)
    ProcedureReturn 0
  EndIf
  ProcedureReturn res
EndProcedure
;##################################################### ;# ;#####################################################

Define.long *font
Define.long *editor
Define.long *window
Define.l Event



*window = OpenWindow(#PB_Any,0,0,400,400,"",1|#WS_SYSMENU)
If *window
  CreateGadgetList(*window\l)
  *editor = EditorGadget(#PB_Any,0,0,395,375)
  *font = LoadFont(#PB_Any,"Courier New",10)
  SetGadgetFont(*editor,*font\l)
  OLDP = SetWindowLong_(*editor\l,#GWL_WNDPROC,@_iEditor_CallBack())
  SendMessage_(*editor\l,#EM_SETMARGINS,#EC_LEFTMARGIN,MAKELONG(50,0))
  ;-
  For i=0 To 30
    AddGadgetItem(*editor,i,"line"+Str(i))
  Next
  Repeat
    Event = WaitWindowEvent()
  Until Event = #WM_CLOSE ;-
EndIf
End 
Mais bon, j'ai un bleme... Essayez de descendre avec la barre de scoll, les chiffres ne descendent pas en même temps que les lignes... Help me :)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

J'garde tes codes sous la main, ils peuvent servir...

Merci bien
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

En fait, je demandais de l'aide :p
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Bon, bah voici au final, sur ce quoi je vais me baser :
J'attends vos idées, commentaires et autres optimisations, bugs, etc...

Code : Tout sélectionner

;-TODO
; Thanks to Sparkie
Structure LN
  Editor_Ed.l
  Container.l
  Editor_Ln.l
EndStructure

Global NewList LNumber.LN()
Global LN
Procedure LN_Init(gadget)
  Find=#False
  ForEach LNumber()
    If LNumber()\editor_ed=gadget
      Find=#True
      Break
    EndIf
  Next
  If Find=#False
    LastElement(LNumber())
    AddElement(LNumber())
    LNumber()\Editor_ed=gadget
    gadget_x=GadgetX(gadget)
    gadget_y=GadgetY(gadget)
    gadget_width=GadgetWidth(gadget)
    gadget_height=GadgetHeight(gadget)
  
    ResizeGadget(gadget,gadget_x+50,#PB_Ignore,gadget_width-50,#PB_Ignore)
    LNumber()\Container=ContainerGadget(#PB_Any, gadget_x, gadget_y, 50, gadget_height,#PB_Container_BorderLess)
    LNumber()\Editor_Ln=EditorGadget(#PB_Any, 0, 0, 50, gadget_height)
    SendMessage_(GadgetID(LNumber()\Editor_Ln),#EM_SHOWSCROLLBAR,#SB_VERT,#False)
    SendMessage_(GadgetID(LNumber()\Editor_Ln),#EM_SHOWSCROLLBAR,#SB_HORZ,#False)
    CloseGadgetList()
    ;{
    AddGadgetItem(LNumber()\Editor_Ln, -1, "1 ")
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_SETBKGNDCOLOR, 0, RGB(248, 248, 220))
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_SETREADONLY, 1, 0)
    
    SendMessage_(GadgetID(gadget), #EM_SETEVENTMASK, 0, #ENM_UPDATE | #ENM_CHANGE | #ENM_SCROLL | #ENM_KEYEVENTS)
    egFormat.CHARFORMAT
    egFormat\cbSize = SizeOf(CHARFORMAT)
    egFormat\dwMask =  #CFM_SIZE | #CFM_COLOR
    ;size=Editor_GetFontSize(gadget)
    size=8
    egFormat\yHeight = size*20
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_SETCHARFORMAT, #SCF_ALL, @egFormat)
    SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
      egOne\x = 0
      SendMessage_(GadgetID(LNumber()\editor_ed), #EM_HIDESELECTION,#True,0)
        SetGadgetText(LNumber()\editor_ed,GetGadgetText(LNumber()\editor_ed))
      SendMessage_(GadgetID(LNumber()\editor_ed), #EM_HIDESELECTION,#False,0)
    SendMessage_(GadgetID(LNumber()\editor_ed), #EM_SETSCROLLPOS, 0, egOne)  
    
    ;}
    
    ;{ Mise à droite des colonnes
    egPara.PARAFORMAT2
    egPara\cbSize = SizeOf(PARAFORMAT2)
    egPara\dwMask = #PFM_ALIGNMENT
    egpara\wAlignment = #PFA_RIGHT
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_SETPARAFORMAT, #SCF_ALL, @egPara)
    ; récupère le texte de la sélection
    SendMessage_(GadgetID(LNumber()\Editor_Ln),#EM_GETSEL,@StartSel,@EndSel)
    Buffer$ = Space(EndSel-StartSel)
    SendMessage_(GadgetID(LNumber()\Editor_Ln),#EM_GETSELTEXT,0,@Buffer$)
    ; récupère la position des barres de scroll
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_GETSCROLLPOS, 0, @scrollP.POINT)
    SendMessage_(GadgetID(LNumber()\Editor_Ln),#EM_REPLACESEL,#True,@Buffer$)
    ; définit la position des barres de scroll
    SendMessage_(GadgetID(LNumber()\Editor_Ln), #EM_SETSCROLLPOS, 0, scrollP.POINT)
    ;}
    SendMessage_(GadgetID(LNumber()\editor_ln),#EM_SETMARGINS,1|2, 0|(10<<16))
  EndIf
  ProcedureReturn 
EndProcedure
Procedure LN_Stop(gadget)
  If IsGadget(gadget)
    Find=-1
    ForEach LNumber()
      If LNumber()\editor_ed=gadget
        Find=ListIndex(LNumber())
        Break
      EndIf
    Next
    If Find>-1
      SelectElement(LNumber(),Find)
      editor_ed=LNumber()\editor_ed
      container=LNumber()\container
      editor_ln=LNumber()\editor_ln
      DeleteElement(LNumber(),1)
      
      size_container=GadgetWidth(container)
      ; libération des gadgets
      FreeGadget(editor_ln)
      FreeGadget(container)
      ; redimensionnement de l'éditeur
      ResizeGadget(editor_ed,GadgetX(editor_ed)-size_container,#PB_Ignore,GadgetWidth(editor_ed)+size_container,#PB_Ignore)
    EndIf
  EndIf
EndProcedure
Procedure LN_Update(param=-1)
  If param=-1
    ForEach LNumber()
      LN_Update(LNumber()\editor_ed)
    Next
  Else
    ForEach LNumber()
      If LNumber()\editor_ed=param
        Break
      EndIf
    Next    
    If EventGadget() = LNumber()\editor_ln
      firstline=SendMessage_(GadgetID(LNumber()\editor_ln), #EM_GETFIRSTVISIBLELINE,0,0)
     ; Editor_Select(LNumber()\editor_ln,firstline+2,1,firstline+2,1)
      SetActiveGadget(LNumber()\editor_ed)
    EndIf
  EndIf
EndProcedure
Procedure LN_SetColorText(Gadget,Color)
  ForEach LNumber()
    If LNumber()\editor_ed=Gadget
      Break
    EndIf
  Next
  If ListIndex(LNumber()) > -1 
    SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETBKGNDCOLOR, 0, Color)
    SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
    egOne\x = 0
    SendMessage_(GadgetID(LNumber()\editor_ed), #EM_SETSCROLLPOS, 0, egOne)
  EndIf
EndProcedure
Procedure LN_SetColorBack(Gadget,Color)
  ForEach LNumber()
    If LNumber()\editor_ed=Gadget
      Break
    EndIf
  Next
  If ListIndex(LNumber()) > -1
    egFormat.CHARFORMAT
    egFormat\cbSize = SizeOf(CHARFORMAT)
    SendMessage_(GadgetID(LNumber()\editor_ln), #EM_GETCHARFORMAT, #SCF_ALL, @egFormat)
    egFormat\dwMask |  #CFM_SIZE | #CFM_COLOR
    size=8;Editor_GetFontSize(LNumber()\editor_ed)
    egFormat\yHeight = size*20
    egFormat\crTextColor = Color
    SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETCHARFORMAT, #SCF_ALL, @egFormat)
    SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
    egOne\x = 0
    SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETSCROLLPOS, 0, egOne)
  EndIf
EndProcedure
Procedure LN_Resize(Gadget,Valeur)
  ForEach LNumber()
    If LNumber()\editor_ed=Gadget
      Break
    EndIf
  Next    
  If ListIndex(LNumber()) > -1
    ResizeGadget(LNumber()\Container, #PB_Ignore, #PB_Ignore, GadgetWidth(LNumber()\Container)+Valeur, #PB_Ignore)
    ResizeGadget(LNumber()\editor_ln, #PB_Ignore, #PB_Ignore, GadgetWidth(LNumber()\editor_ln)+Valeur, #PB_Ignore)
    ResizeGadget(LNumber()\editor_ed, GadgetX(LNumber()\editor_ed)+Valeur, #PB_Ignore, GadgetWidth(LNumber()\editor_ed)-Valeur, #PB_Ignore)
  EndIf
EndProcedure

Procedure Test_SetColor(Gadget)
  ForEach LNumber()
    If LNumber()\editor_ed=Gadget
      Break
    EndIf
  Next
  SendMessage_(GadgetID(LNumber()\editor_ed), #EM_SETBKGNDCOLOR, 0, RGB(Random(255), Random(255), Random(255)))
EndProcedure


Procedure.l LN_Callback(hwnd, msg, wparam, lparam)
  Shared previousItems
  result = #PB_ProcessPureBasicEvents
  Find=#False
  ForEach LNumber()
    If IsGadget(LNumber()\editor_ed)
      If GadgetID(LNumber()\editor_ed)=lparam
        Find=#True
        Break
      EndIf
    EndIf
  Next
  If Find=#True
    Select msg
      Case #WM_COMMAND
        If IsGadget(LNumber()\editor_ed) And IsGadget(LNumber()\editor_ln)
          If lparam = GadgetID(LNumber()\editor_ed)
            Select wparam >>16&$FFFF
              Case #EN_VSCROLL
                ; --> Keep linenumbers in sync with EditorGadget scrolling up or down (clicking scroll buttons)
                SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
                ; --> Keep numbers from scrolling left
                egOne\x = 0
                SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETSCROLLPOS, 0, egOne)
              Case #EN_UPDATE
                SendMessage_(GadgetID(LNumber()\editor_ed), #EM_SETCHARFORMAT, #SCF_ALL, @egFormat)
                ; --> Keep linenumbers in sync with EditorGadget scrolling up or down (dragging scroll thumb)
                SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
                ; --> Keep numbers from scrolling left
                egOne\x = 0
                SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETSCROLLPOS, 0, egOne)
              Case #EN_CHANGE
                ; --> Keep linenumbers in sync with EditorGadget adding or removing items
                currentLine = SendMessage_(GadgetID(LNumber()\editor_ed), #EM_LINEFROMCHAR, -1, 0)+1
                lnItems = CountGadgetItems(LNumber()\editor_ln)
                egItems = CountGadgetItems(LNumber()\editor_ed)
                ; --> For now I just clear the entire number list when items are
                ; --> added or removed. >>>>>>>>>>>>>  Causes slight flicker so find a better way! <<<<<<<<<<<<<<
                If egItems > lnItems
                  For i = lnItems+1 To egItems
                    AddGadgetItem(LNumber()\editor_ln, i, Str(i))
                  Next i
                EndIf
                If egItems < lnItems
                  For i = lnItems To egItems Step -1
                    RemoveGadgetItem(LNumber()\editor_ln, i)
                  Next i
                  ; --> Remove the last CR/LF left behind by RemoveGadgetItem
                  ; --> Readonly off for linenumbers
                  SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETREADONLY, 0, 0)
                  SendMessage_(GadgetID(LNumber()\editor_ln), #WM_KEYDOWN, #VK_BACK, 0)
                  SendMessage_(GadgetID(LNumber()\editor_ln), #WM_KEYUP, #VK_BACK, 0)
                  SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETREADONLY, 1, 0)
                EndIf
                ; --> Keep linenumbers in sync with EditorGadget scrolling up or down (dragging scroll thumb)
                SendMessage_(GadgetID(LNumber()\editor_ed), #EM_GETSCROLLPOS, 0, @egOne.POINT)
                ; --> Keep numbers from scrolling left
                egOne\x = 0
                SendMessage_(GadgetID(LNumber()\editor_ln), #EM_SETSCROLLPOS, 0, egOne)
                previousItems = egItems
            EndSelect
          EndIf
        EndIf
    EndSelect
  EndIf
  ProcedureReturn result
EndProcedure

If OpenWindow(0, 0, 0, 700, 500, "EditorGadget w/Line Numbers", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
  SetWindowCallback(@LN_Callback())
  ;{
  CreateMenu(1, WindowID(0))
  MenuTitle("F&ile")
    MenuItem(104, "&Quit" + Chr(9) + "Ctrl+Q")
  MenuTitle("&AZERTY")
    MenuItem(121, "Colonne > &Fond")
    MenuItem(122, "Colonne > &Texte")
    MenuItem(123, "&Editor > Fond")
    MenuItem(124, "Colonne > Taille +")
    MenuItem(125, "Colonne > Taille -")
    MenuItem(126, "Stop")
    MenuItem(127, "Commencer")
    AddKeyboardShortcut(0,#PB_Shortcut_F1,121)
    AddKeyboardShortcut(0,#PB_Shortcut_F2,122)
    AddKeyboardShortcut(0,#PB_Shortcut_F3,123)
    AddKeyboardShortcut(0,#PB_Shortcut_F4,124)
    AddKeyboardShortcut(0,#PB_Shortcut_F5,125)
    AddKeyboardShortcut(0,#PB_Shortcut_F6,126)
    AddKeyboardShortcut(0,#PB_Shortcut_F7,127)
  ;}
  EditorGadget(4,40,0,250,400)
  LN_Init(4)
  list=EditorGadget(#PB_Any,290,0,250,400)
  LN_Init(list)
  For i=0 To 100
    AddGadgetItem(4,i,"Line"+Str(i))
    AddGadgetItem(list,i,"Line"+Str(i))
  Next
  Repeat
    event = WaitWindowEvent()
    LN_Update()
    Select event
      Case #PB_Event_Menu
        Select EventMenu()
          Case 104
            CloseWindow(0)
          Case 121
            LN_SetColorText(4,RGB(Random(255), Random(255), Random(255)))
            LN_SetColorText(list,RGB(Random(255), Random(255), Random(255)))
          Case 122
            LN_SetColorBack(4,RGB(Random(255), Random(255), Random(255)))
            LN_SetColorBack(list,RGB(Random(255), Random(255), Random(255)))
          Case 123
            Test_SetColor(4)
            Test_SetColor(list)
          Case 124
            LN_Resize(4,5)
            LN_Resize(list,5)
          Case 125
            LN_Resize(4,-5)
            LN_Resize(list,-5)
          Case 126
            LN_Stop(4)
            LN_Stop(list)
          Case 127
            LN_Init(4)
            LN_Init(list)
        EndSelect
    EndSelect
  Until event = #PB_Event_CloseWindow 
EndIf
End
Dernière modification par Progi1984 le jeu. 20/juil./2006 8:29, modifié 2 fois.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Oui ya un bug qd on quitte par le menu, g pa eu le tps de regarder pourkoi. Peut-être un pb avec le callback ki veut faire quelquechose sur un gadget qui vient justement d'être détruit...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Problème réglé !
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

MAJ Code :
- Alignement de la colonne (Numérotation des lignes) à droite
- Marge pour faire comme dans l'IDE de PB !

Un pb :
Faites F5 puis F6, plusieurs fois et rapidement !
Principalement dans le deuxieme editeur, on voit le déplacement du scrollbar, c a cause de la ligne 50, que je dois utiliser pour réactualiser l'editeur pour que le callback maj la colonne de num des lignes !
Donc si vous savez comment actualiser l'ed facilement dites le moi :)
Répondre