Multiples listicon editables

Partagez votre expérience de PureBasic avec les autres utilisateurs.
yves86
Messages : 36
Inscription : sam. 26/juil./2008 17:13
Localisation : Poitou

Multiples listicon editables

Message par yves86 »

Sur la base d'un code de hjbremer publié sur le forum Allemand
https://www.purebasic.fr/german/viewtop ... =8&t=20818
J'ai ajouté la possibilité d'éditer certaines colonnes avec un String ou une combobox en fonction du contenu de la liste passée en paramètres.
Je n'ai pas compris à quoi servait la fonction avec la touche F2, j'ai supprimée cette partie.
Fonctionne sur Window 10 X64 - Purebasic 5.71 LTS

Code : Tout sélectionner

;   Description: Simple Editable ListIconGadget
;            OS: Windows
; English-Forum: 
;  French-Forum: 
;  German-Forum: http://www.purebasic.fr/german/viewtopic.php?f=8&t=20818
; -----------------------------------------------------------------------------

; MIT License
; 
; Copyright (c) 2009 hjbremer
; Copyright (c) 2014 ts-soft -- PB_Gadget_SendGadgetCommand() replaced with PostEvent()
; Copyright (c) 2015 GPI -- bugfix
; 
; Permission is hereby granted, free of charge, to any person obtaining a copy
; of this software and associated documentation files (the "Software"), to deal
; in the Software without restriction, including without limitation the rights
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
; copies of the Software, and to permit persons to whom the Software is
; furnished to do so, subject to the following conditions:
; 
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
; 
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
; SOFTWARE.

CompilerIf #PB_Compiler_OS<>#PB_OS_Windows
  CompilerError "Windows Only!"
CompilerEndIf
; ListIconGadget Felder editieren
;
; Aufruf: im Hauptprogramm nur eine Zeile einfügen, direkt nach
;         event = WaitWindowEvent() kommt
;         event = LvEdit1(event)
;
; zusätzlicher Parameter selflag 0, 1 oder 2
;         event = WaitWindowEvent()
;         event = LvEdit1(event, 1)
;         0 = Cursor am Anfang, nur nötig wenn font angegeben
;         1 = Cursor ans Ende
;         2 = Cursor ans Ende + Feldinhalt wird markiert
;
; zusätzlicher Parameter font
;         event = WaitWindowEvent()
;         event = LvEdit1(event, 0, fontnr)
;         Die fontnr muß eine PbNr sein, keine ID
;         Wird ein Font angegeben sollte dieser auch geladen sein.
;         Ohne fontnr wird ein etwas kleinerer Font geladen
;         
; mit Doppelclick auf ein Feld wird Edit aktiviert
; mit ESC oder ein Klick auf ein Feld/Gadget/Window wird Edit beendet
;
; NUR mit Return werden Eingaben übernommen !
;
; zusätzlicher Spielkram
; wenn eine Zeile markiert und F2 gedrückt wird,
; wird Edit aktiviert und zwar das Feld in dem die Maus sich befindet.
; Nun mit Pfeiltasten oder Maus eine andere Zeile wählen, F2 drücken
; und nächstes Feld in der gleichen Spalte bearbeiten.
; Diesen "F2-Modus" mit Doppelclick auf ein Feld wieder ausschalten

; EnableExplicit
Declare Resize_saisie()

  Global editfeld.l, L_mod.l, C_mod.l, oldCallback, Gadget_list
  Enumeration
    #but1
    #lvg1
    #lvg2
    #lvg3
    #win1
    #font
    #font1
  EndEnumeration

Procedure LvFontHoehe(pbnr)
  Protected lg.LOGFONT
  Protected fontid = GetGadgetFont(pbnr)
  Protected pixely = GetDeviceCaps_(GetDC_(0), #LOGPIXELSY)
  Protected retvalue = GetObject_(fontid, SizeOf(LOGFONT), lg)
  Protected fonthoehe = -MulDiv_(lg\lfHeight, 72, pixely)   
  ProcedureReturn fonthoehe
  
EndProcedure

Procedure LvMausclick(lvid,*p.Point)
  Protected lvhit.LVHITTESTINFO
  GetCursorPos_(*p)  ;wo ist Maus
  MapWindowPoints_(0, lvid, *p, 1)
  lvhit\pt\x = *p\x
  lvhit\pt\y = *p\y
  SendMessage_(lvid, #LVM_SUBITEMHITTEST, 0, lvhit)               
  *p\y = lvhit\iItem      ;row ab 0
  *p\x = lvhit\iSubItem   ;col ab 0
  
EndProcedure

Procedure LvEdit1(event, List combob.s(), selflag = 0, font = -1)
  Protected flag, x, y, br, hh, nix, iitem$, nwrow
  Protected rect.RECT
  Protected point.POINT
  Static lvid, lvnr, lvhd, lvrow, lvcol, editfont, f2flag
  If event = #PB_Event_Gadget
    lvnr = EventGadget()
    If IsGadget(lvnr) = 0: ProcedureReturn -1: EndIf
    If GadgetType(lvnr) = #PB_GadgetType_ListIcon
      If EventType() = #PB_EventType_LeftDoubleClick
        lvid = GadgetID(lvnr)
        lvhd = SendMessage_(lvid, #LVM_GETHEADER, 0, 0)
        LvMausclick(lvid, point)           
        lvcol = point\x
        lvrow = point\y
        If lvrow = -1: ProcedureReturn -1: EndIf
        rect\top = lvcol
        rect\left = #LVIR_LABEL
        SendMessage_(lvid, #LVM_GETSUBITEMRECT , lvrow, rect)
        InflateRect_(rect,1,1)  ;rect um 1 vergrößern   
        x  = rect\left + 1
        y  = rect\top
        br = rect\right - rect\left
        hh = rect\bottom - rect\top
        iitem$ =GetGadgetItemText(lvnr, lvrow, lvcol)
        If ListSize(combob()) = 0
          editfeld = StringGadget(#PB_Any, x, y, br, hh,"")
        Else
          editfeld = ComboBoxGadget(#PB_Any,x,y,br,hh)
          ClearGadgetItems(editfeld)
          ForEach combob()
            AddGadgetItem(editfeld,-1,combob())
          Next
        EndIf
        SetGadgetText(editfeld,iitem$)
        If font = -1
          editfont = LoadFont(#PB_Any, "Arial", LvFontHoehe(lvnr) - 1)
        Else
          editfont = font
        EndIf
        If IsFont(editfont): SetGadgetFont(editfeld,FontID(editfont)): EndIf
        If selflag = 1      ;ans Ende
          SendMessage_(GadgetID(editfeld), #EM_SETSEL, Len(iitem$), -1)               
        ElseIf selflag = 2  ;ans Ende + alles markieren
          SendMessage_(GadgetID(editfeld), #EM_SETSEL, 0, -1)
        EndIf
        ;sieht besser aus finde ich
        SetWindowTheme_(GadgetID(editfeld), @nix, @nix)
        SetParent_(GadgetID(editfeld), lvid)  ;sehr wichtig
        SetActiveGadget(editfeld)
      EndIf
    EndIf     
  EndIf
  ProcedureReturn event
  
EndProcedure

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)  ;redimension des combo et string 
  Select uMsg
    Case #WM_NOTIFY
      *nmHEADER.HD_NOTIFY = lParam
      If *nmHEADER\hdr\code = #HDN_ITEMCHANGING
        If *nmHEADER\iItem = 0
          ProcedureReturn 1
        EndIf                 
        Resize_saisie()
      EndIf
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
  
EndProcedure

Procedure Resize_saisie()
  If IsGadget(editfeld)
    RtlZeroMemory_(@itemrect.RECT,SizeOf(RECT))
    itemrect\top = C_mod
    SendMessage_(GadgetID(Gadget_list),#LVM_GETSUBITEMRECT, L_mod, @itemrect)       
    ResizeGadget(editfeld,itemrect\left,itemrect\top,itemrect\right-itemrect\left,#PB_Ignore)
    SetActiveGadget(editfeld)
  EndIf
  
EndProcedure
      
;-Example
Procedure Open_win()
  DisableExplicit
  LoadFont(#font, "Arial", 10)
  LoadFont(#font1, "Arial", 8)
  OpenWindow(#win1,0,0,800,480,"ListIcon Gadget",#PB_Window_SystemMenu|1)
  lvflags = #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_CheckBoxes 
  ListIconGadget(#lvg1,10,10,280,400,"Spalte 0",140,lvflags)
    AddGadgetColumn(#lvg1,1,"Spalte 1",55)
    AddGadgetColumn(#lvg1,2,"Spalte 2",55)
  SetGadgetFont(#lvg1,FontID(#font))
  SetGadgetColor(#lvg1, #PB_Gadget_BackColor, RGB(255, 255, 224))
  lvflags = #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER
  ListIconGadget(#lvg2,300,10,220,400,"Spalte 0",140,lvflags)
    AddGadgetColumn(#lvg2,1,"Spalte 1",55)
  SetGadgetFont(#lvg2,FontID(#font))
  lvflags = #PB_ListIcon_GridLines
  ListIconGadget(#lvg3,530,10,220,400,"Spalte 0",140,lvflags)
    AddGadgetColumn(#lvg3,1,"Spalte 1",55)
  SetGadgetFont(#lvg3,FontID(#font))
  For i = 0 To 25
    nr$ = LSet(Str(i),3," ")
    txt$ = "Text "+nr$+" in Spalte 0" + #LF$ + Str(Random(111))
    AddGadgetItem(#lvg1, -1, txt$)           
    AddGadgetItem(#lvg2, -1, txt$)           
    AddGadgetItem(#lvg3, -1, txt$)           
  Next
  NewList combo.s()
  AddElement(combo()) : combo() = "1"
  AddElement(combo()) : combo() = "3"
  AddElement(combo()) : combo() = "5"
  AddElement(combo()) : combo() = "6"
  NewList comboA.s()
  AddElement(comboA()) : comboA() = "Aube"
  AddElement(comboA()) : comboA() = "Blois"
  AddElement(comboA()) : comboA() = "Calva"
  AddElement(comboA()) : comboA() = "Doubs"
  NewList vide.s()
  SetWindowCallback(@WindowCallback()) ;pouer redimensionner le string ou le combo
  
  ;=====================================================
  Repeat
    event = WaitWindowEvent(1)
    Select event
      Case #PB_Event_Gadget 
        Select EventGadget()  
          Case #lvg1
            If Not IsGadget(editfeld)
              LvMausclick(GadgetID(#lvg1),p1.Point)
              L_mod = p1\y
              C_mod = p1\x
              Gadget_list = #lvg1
              If p1\x = 0
                event = LvEdit1(event,vide(),2)
              ElseIf p1\x = 1
                event = LvEdit1(event,combo(), 2)
              ElseIf p1\x = 2
                event = LvEdit1(event,comboA(), 2)
              EndIf
            EndIf
          Case #lvg2
            If Not IsGadget(editfeld)
              LvMausclick(GadgetID(#lvg2),p2.Point)
              L_mod = p2\y
              C_mod = p2\x
              Gadget_list = #lvg2
              If p2\x = 1
                event = LvEdit1(event,vide(), 2)
              EndIf
            EndIf
          Case #lvg3
            If Not IsGadget(editfeld)
              LvMausclick(GadgetID(#lvg3),p3.Point)
              L_mod = p3\y
              C_mod = p3\x
              Gadget_list = #lvg3
              event = LvEdit1(event,vide(), 2)
            EndIf
          Case editfeld
            If IsGadget(editfeld) 
              If EventType() = #PB_EventType_LostFocus And GadgetType(editfeld) = #PB_GadgetType_String
                SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
                FreeGadget(editfeld): editfeld = 0
              ElseIf GadgetType(editfeld) = #PB_GadgetType_ComboBox 
                SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
                FreeGadget(editfeld): editfeld = 0
              EndIf
            EndIf
        EndSelect
      Case #WM_KEYDOWN
        ;Edit beeenden wenn ESC oder Return
        If IsGadget(editfeld) And GadgetType(editfeld) = #PB_GadgetType_String
          Select EventwParam()
          Case  #VK_RETURN, #VK_DOWN
            SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
            FreeGadget(editfeld): editfeld = 0
            If L_mod < CountGadgetItems(Gadget_list)
              SetGadgetState(Gadget_list,L_mod + 1)
            EndIf
          Case  #VK_UP
            SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
            FreeGadget(editfeld): editfeld = 0
            If L_mod > 0
              SetGadgetState(Gadget_list,L_mod - 1)
            EndIf
          Case #VK_ESCAPE
            FreeGadget(editfeld): editfeld = 0
          EndSelect
        EndIf
      Case 161
        Resize_saisie()
  EndSelect
  Until event = #PB_Event_CloseWindow
  
EndProcedure

Open_win()
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Multiples listicon editables

Message par Micoute »

Merci pour ce partage très utile pour moi.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
yves86
Messages : 36
Inscription : sam. 26/juil./2008 17:13
Localisation : Poitou

Re: Multiples listicon editables

Message par yves86 »

Code mis à jour pour pouvoir editer des listicon sur des fenètres différentes

Code : Tout sélectionner

;   Description: Simple Editable ListIconGadget
;            OS: Windows
; English-Forum: 
;  French-Forum: https://www.purebasic.fr/french/posting.php?mode=reply&f=6&t=17848
;  German-Forum: http://www.purebasic.fr/german/viewtopic.php?f=8&t=20818
; -----------------------------------------------------------------------------

; MIT License
; 
; Copyright (c) 2009 hjbremer
; Copyright (c) 2014 ts-soft -- PB_Gadget_SendGadgetCommand() replaced with PostEvent()
; Copyright (c) 2015 GPI -- bugfix
; Copyright (c) 2015 yves86
; Permission is hereby granted, free of charge, to any person obtaining a copy
; of this software and associated documentation files (the "Software"), to deal
; in the Software without restriction, including without limitation the rights
; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
; copies of the Software, and to permit persons to whom the Software is
; furnished to do so, subject to the following conditions:
; 
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
; 
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
; SOFTWARE.

CompilerIf #PB_Compiler_OS<>#PB_OS_Windows
  CompilerError "Windows Only!"
CompilerEndIf
; ListIconGadget Felder editieren
;
; Aufruf: im Hauptprogramm nur eine Zeile einfügen, direkt nach
;         event = WaitWindowEvent() kommt
;         event = LvEdit1(event)
;
; zusätzlicher Parameter selflag 0, 1 oder 2
;         event = WaitWindowEvent()
;         event = LvEdit1(event, 1)
;         0 = Cursor am Anfang, nur nötig wenn font angegeben
;         1 = Cursor ans Ende
;         2 = Cursor ans Ende + Feldinhalt wird markiert
;
; zusätzlicher Parameter font
;         event = WaitWindowEvent()
;         event = LvEdit1(event, 0, fontnr)
;         Die fontnr muß eine PbNr sein, keine ID
;         Wird ein Font angegeben sollte dieser auch geladen sein.
;         Ohne fontnr wird ein etwas kleinerer Font geladen
;         
; mit Doppelclick auf ein Feld wird Edit aktiviert
; mit ESC oder ein Klick auf ein Feld/Gadget/Window wird Edit beendet
;
; NUR mit Return werden Eingaben übernommen !
;
; zusätzlicher Spielkram
; wenn eine Zeile markiert und F2 gedrückt wird,
; wird Edit aktiviert und zwar das Feld in dem die Maus sich befindet.
; Nun mit Pfeiltasten oder Maus eine andere Zeile wählen, F2 drücken
; und nächstes Feld in der gleichen Spalte bearbeiten.

; EnableExplicit
DeclareModule ListIconTools
  Declare LvMouseclick(lvid,*p.Point)
  Declare LvEdit1(Win,event, List combob.s(), selflag = 0, font = -1)
  Declare LvResize_saisie()
  Declare.l LvMaj_list()
  
  Global editfeld.l, L_mod.l, C_mod.l, Gadget_list.l
  
  Structure Combos
    Texte.s
    Data_text.l
  EndStructure
EndDeclareModule

Module ListIconTools
  
  Procedure LvFont(pbnr)
    Protected lg.LOGFONT
    Protected fontid = GetGadgetFont(pbnr)
    Protected pixely = GetDeviceCaps_(GetDC_(0), #LOGPIXELSY)
    Protected retvalue = GetObject_(fontid, SizeOf(LOGFONT), lg)
    Protected fonthoehe = -MulDiv_(lg\lfHeight, 72, pixely)   
    ProcedureReturn fonthoehe
    
  EndProcedure
  
  Procedure LvMouseclick(lvid,*p.Point)
    Protected lvhit.LVHITTESTINFO
    GetCursorPos_(*p)  ;wo ist Maus
    MapWindowPoints_(0, lvid, *p, 1)
    lvhit\pt\x = *p\x
    lvhit\pt\y = *p\y
    SendMessage_(lvid, #LVM_SUBITEMHITTEST, 0, lvhit)               
    *p\y = lvhit\iItem      ;row ab 0
    *p\x = lvhit\iSubItem   ;col ab 0
    
  EndProcedure
  ; 
  Procedure LvEdit1(Win,event, List combob.Combos(), selflag = 0, font = -1)
    Protected flag, x, y, br, hh, nix, iitem$, nwrow
    Protected rect.RECT
    Protected point.POINT
    Static lvid, lvnr, lvhd, lvrow, lvcol, editfont, f2flag
    If event = #PB_Event_Gadget
      lvnr = EventGadget()
      If IsGadget(lvnr) = 0: ProcedureReturn -1: EndIf
      UseGadgetList(WindowID(win))
      If GadgetType(lvnr) = #PB_GadgetType_ListIcon
        If EventType() = #PB_EventType_LeftDoubleClick
          lvid = GadgetID(lvnr)
          lvhd = SendMessage_(lvid, #LVM_GETHEADER, 0, 0)
          lvcol = C_mod
          lvrow = L_mod
          If lvrow = -1: ProcedureReturn -1: EndIf
          rect\top = lvcol
          rect\left = #LVIR_LABEL
          SendMessage_(lvid, #LVM_GETSUBITEMRECT , lvrow, rect)
          InflateRect_(rect,1,1)  ;rect um 1 vergrößern   
          x  = rect\left + 1
          y  = rect\top
          br = rect\right - rect\left
          hh = rect\bottom - rect\top
          iitem$ = GetGadgetItemText(lvnr, lvrow, lvcol)
          If ListSize(combob()) = 0 
            editfeld = StringGadget(#PB_Any, x, y, br, hh,"")
          Else
            editfeld = ComboBoxGadget(#PB_Any,x,y,br,hh)
            ClearGadgetItems(editfeld)
            ForEach combob()
              AddGadgetItem(editfeld,-1,combob()\Texte)
              SetGadgetItemData(editfeld,CountGadgetItems(editfeld) - 1,combob()\Data_text)
            Next
          EndIf
          SetGadgetText(editfeld,iitem$)
          If font = -1
            editfont = LoadFont(#PB_Any, "Arial", LvFont(lvnr) - 1)
          Else
            editfont = font
          EndIf
          If IsFont(editfont): SetGadgetFont(editfeld,FontID(editfont)): EndIf
          If selflag = 1      ;ans Ende
            SendMessage_(GadgetID(editfeld), #EM_SETSEL, Len(iitem$), -1)               
          ElseIf selflag = 2  ;ans Ende + alles markieren
            SendMessage_(GadgetID(editfeld), #EM_SETSEL, 0, -1)
          EndIf
          ;sieht besser aus finde ich
          SetWindowTheme_(GadgetID(editfeld), @nix, @nix)
          SetParent_(GadgetID(editfeld), lvid)  ;sehr wichtig
          SetActiveGadget(editfeld)
        EndIf
      EndIf     
    EndIf
    ProcedureReturn event
    
  EndProcedure
  
  Procedure LvResize_saisie()
    If IsGadget(editfeld)
      RtlZeroMemory_(@itemrect.RECT,SizeOf(RECT))
      itemrect\top = C_mod
      SendMessage_(GadgetID(Gadget_list),#LVM_GETSUBITEMRECT, L_mod, @itemrect)       
      ResizeGadget(editfeld,itemrect\left,itemrect\top,itemrect\right-itemrect\left,#PB_Ignore)
      SetActiveGadget(editfeld)
    EndIf
    
  EndProcedure
  
  Procedure.l LvMaj_list()
    If EventType() = #PB_EventType_LostFocus And GadgetType(editfeld) = #PB_GadgetType_String
      SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
      Retour = Len(GetGadgetText(editfeld))
      FreeGadget(editfeld): editfeld = 0
    ElseIf GadgetType(editfeld) = #PB_GadgetType_ComboBox 
      SetGadgetItemText(Gadget_list,L_mod,GetGadgetText(editfeld),C_mod)
      Retour = GetGadgetItemData(editfeld,GetGadgetState(editfeld))
      FreeGadget(editfeld): editfeld = 0
    Else
      Retour = -1
    EndIf
    ProcedureReturn Retour
    
  EndProcedure
EndModule

Procedure WindowCallback(hWnd,uMsg,wParam,lParam)  ;redimension des combo et string 
  Select uMsg
    Case #WM_NOTIFY
      *nmHEADER.HD_NOTIFY = lParam
      If *nmHEADER\hdr\code = #HDN_ITEMCHANGING
        If *nmHEADER\iItem = 0
          ProcedureReturn 1
        EndIf                 
        ListIconTools::LvResize_saisie()
      EndIf      
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
  
EndProcedure

;-Example
Enumeration
  #win1
  #win2
  #but1
  #lvg1
  #lvg2
  #lvg3
  #font
  #font1
EndEnumeration

LoadFont(#font, "Arial", 10)
LoadFont(#font1, "Arial", 8)

Macro Key_down()
  ;Edit beeenden wenn ESC oder Return
  If IsGadget(ListIconTools::editfeld) And GadgetType(ListIconTools::editfeld) = #PB_GadgetType_String
    Select EventwParam()
      Case  #VK_RETURN
        SetGadgetItemText(ListIconTools::Gadget_list,ListIconTools::L_mod,GetGadgetText(ListIconTools::editfeld),ListIconTools::C_mod)
        FreeGadget(ListIconTools::editfeld): ListIconTools::editfeld = 0
    EndSelect
  EndIf
  If IsGadget(ListIconTools::editfeld) And EventwParam() = #VK_ESCAPE
    FreeGadget(ListIconTools::editfeld): ListIconTools::editfeld = 0
  EndIf
EndMacro
                
Procedure Open_win()
  DisableExplicit
  LoadFont(#font, "Arial", 10)
  LoadFont(#font1, "Arial", 8)
  OpenWindow(#win1,0,0,530,480,"ListIcon Gadget",#PB_Window_SystemMenu|1)
  lvflags = #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_CheckBoxes 
  ListIconGadget(#lvg1,10,10,280,400,"Spalte 0",140,lvflags)
    AddGadgetColumn(#lvg1,1,"Spalte 1",55)
    AddGadgetColumn(#lvg1,2,"Spalte 2",55)
  SetGadgetFont(#lvg1,FontID(#font))
  SetGadgetColor(#lvg1, #PB_Gadget_BackColor, RGB(255, 255, 224))
  lvflags = #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER
  ListIconGadget(#lvg2,300,10,220,400,"Spalte 0",140,lvflags)
    AddGadgetColumn(#lvg2,1,"Spalte 1",55)
  SetGadgetFont(#lvg2,FontID(#font))
  ButtonGadget(#but1,20,430,100,25,"Other Window")
  For i = 0 To 25
    nr$ = LSet(Str(i),3," ")
    txt$ = "Text "+nr$+" in Spalte 0" + #LF$ + Str(Random(111))
    AddGadgetItem(#lvg1, -1, txt$)           
    AddGadgetItem(#lvg2, -1, txt$)           
  Next
  NewList combo.ListIconTools::Combos()
  AddElement(combo()) : combo()\Texte = "1" : combo()\Data_text = 0
  AddElement(combo()) : combo()\Texte = "3" : combo()\Data_text = 2
  AddElement(combo()) : combo()\Texte = "5" : combo()\Data_text = 4
  AddElement(combo()) : combo()\Texte = "6" : combo()\Data_text = 5
  NewList comboA.ListIconTools::Combos()
  AddElement(comboA()) : comboA()\Texte = "Aube" : comboA()\Data_text = 10
  AddElement(comboA()) : comboA()\Texte = "Blois" : comboA()\Data_text = 11
  AddElement(comboA()) : comboA()\Texte = "Calva" : comboA()\Data_text = 12
  AddElement(comboA()) : comboA()\Texte = "Doubs" : comboA()\Data_text = 13
  NewList vide.ListIconTools::Combos()
  SetWindowCallback(@WindowCallback(),#win1) ;pouer redimensionner le string ou le combo
  ;=====================================================
  Repeat
    event = WaitWindowEvent(1)
    Select event
      Case #PB_Event_Gadget 
        Select EventGadget()  
          Case #lvg1
            If Not IsGadget(ListIconTools::editfeld)
              ListIconTools::LvMouseclick(GadgetID(#lvg1),p1.Point)
              ListIconTools::L_mod = p1\y
              ListIconTools::C_mod = p1\x
              ListIconTools::Gadget_list = #lvg1
              If p1\x = 0
                event = ListIconTools::LvEdit1((#win1),event,vide(),2)
              ElseIf p1\x = 1
                event = ListIconTools::LvEdit1((#win1),event,combo(), 2)
              ElseIf p1\x = 2
                event = ListIconTools::LvEdit1((#win1),event,comboA(), 2)
              EndIf
            Else
              ListIconTools::LvMaj_list()
            EndIf
          Case #lvg2
            If Not IsGadget(ListIconTools::editfeld)
              ListIconTools::LvMouseclick(GadgetID(#lvg2),p2.Point)
              ListIconTools::L_mod = p2\y
              ListIconTools::C_mod = p2\x
              ListIconTools::Gadget_list = #lvg2
              If p2\x = 1
                event = ListIconTools::LvEdit1((#win1),event,vide(), 2)
              EndIf
            Else
              ListIconTools::LvMaj_list()
            EndIf
          Case ListIconTools::editfeld
            If IsGadget(ListIconTools::editfeld) 
              ListIconTools::LvMaj_list()
            EndIf
          Case #but1
            OpenWindow(#win2,100,100,250,450,"Window 2",#PB_Window_SystemMenu,#win1)
            lvflags = #PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect
            ListIconGadget(#lvg3,10,10,220,400,"Spalte 0",140,lvflags)
              AddGadgetColumn(#lvg3,1,"Spalte 1",55)
            SetGadgetFont(#lvg3,FontID(#font))
            For i = 0 To 25
              nr$ = LSet(Str(i),3," ")
              txt$ = "Text "+nr$+" in Spalte 0" + #LF$ + Str(Random(111))
              AddGadgetItem(#lvg3, -1, txt$)           
            Next
            SetWindowCallback(@WindowCallback(),#win2) ;pouer redimensionner le string ou le combo
            Repeat
              event2 = WaitWindowEvent(1)
              Select event2
                Case #PB_Event_Gadget
                  Select EventGadget()  
                    Case #lvg3
                      If Not IsGadget(ListIconTools::editfeld)
                        ListIconTools::LvMouseclick(GadgetID(#lvg3),p3.Point)
                        ListIconTools::L_mod = p3\y
                        ListIconTools::C_mod = p3\x
                        ListIconTools::Gadget_list = #lvg3
                        event = ListIconTools::LvEdit1((#win2),event,vide(), 2)
                      Else
                        ListIconTools::LvMaj_list()
                      EndIf
                    Case ListIconTools::editfeld
                      If IsGadget(ListIconTools::editfeld) 
                        ListIconTools::LvMaj_list()
                      EndIf
                  EndSelect
                Case #WM_KEYDOWN
                  Key_down()
                Case #PB_Event_CloseWindow
                  Select EventWindow()
                    Case #win2
                      CloseWindow(#Win2)
                      Break
                  EndSelect
              EndSelect
            ForEver
        EndSelect
      Case #WM_KEYDOWN
        Key_down()
      Case 161; #WM_NCLBUTTONDOWN
        ListIconTools::LvResize_saisie()
    EndSelect
  Until event = #PB_Event_CloseWindow
  
EndProcedure

Open_win()
Répondre