Page 1 sur 1

Listicon

Publié : mer. 23/mars/2011 13:53
par dayvid
Que pensez-vous de ce premier code ?
ce qui serais pas mal aussi c'est de pouvoir modifier les cellule sans passer par un input
j'avais penser a crée un string gadget a la position de la cellule a modifier mais je ne sais pas comment je vais m'y prendre
car il faudrait localiser la position exacte de celle-ci en x et y (pixel) par apport a la fenêtre et aussi savoir sa largeur et sa hauteur
Une fois ceci fais ce serais plus qu'un jeu d'enfant non ?

Code : Tout sélectionner

; exemple réaliser par monsieur dieppedalle david le 23 mars 2011 a 11h Am

#ListIcon_0 = 1

Global couleur_case_selectionner = RGB(51, 153, 255)
Global couleur_texte_case_selectionner = RGB(255, 255, 255)
Global Sauvegarde_case
Global Sauvegarde_colonne
Global Sauvegarde_couleur_case
Global Sauvegarde_couleur_texte_case

; pas de moi mais modifier par moi
Procedure.l WindowCallBack(WindowID.l, Message.l, wParam.l, lParam.l) 
  ReturnValue.l = #PB_ProcessPureBasicEvents
  ;
  If Message = #WM_NOTIFY
    *msg.NMHDR = lParam
    If *msg\hwndFrom = GadgetID(#ListIcon_0) And *msg\code = #NM_CLICK
      *ListViewIA.NMITEMACTIVATE = lParam 
      ListViewClick_Row = *ListViewIA\iItem 
      ListViewClick_Column = *ListViewIA\iSubItem
      
      Sauvegarde_couleur_case = PureCOLOR_GetCellColor(#ListIcon_0, ListViewClick_Row, ListViewClick_Column, 2)
      Sauvegarde_couleur_texte_case = PureCOLOR_GetCellColor(#ListIcon_0, ListViewClick_Row, ListViewClick_Column, 1)
      
      SetGadgetText(2, "Click at (" + Str(ListViewClick_Row) + "," + Str(ListViewClick_Column)+ ")")
      
      PureCOLOR_SetCellColor(#ListIcon_0, ListViewClick_Row, ListViewClick_Column, couleur_texte_case_selectionner, couleur_case_selectionner)
      PureCOLOR_SetCellColor(#ListIcon_0, Sauvegarde_case, Sauvegarde_colonne, Sauvegarde_couleur_texte_case, Sauvegarde_couleur_case)
      SetActiveGadget(2)
      
      Sauvegarde_case =  ListViewClick_Row
      Sauvegarde_colonne = ListViewClick_Column
      
      ReturnValue = #False
    EndIf
  EndIf   
  ProcedureReturn ReturnValue 
EndProcedure

; Create Window
OpenWindow(0, 100, 300, 600, 400, "PureCOLOR test : columns, rows and individual cells", #PB_Window_SystemMenu) 
SetWindowCallback(@WindowCallBack()) 
ListIconGadget(#ListIcon_0, 1, 1, 598, 398, "0", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
TextGadget(2, 21, 170, 200, 20, "Click on any cell to colorize it ...")
   ;
SetGadgetItemText(#ListIcon_0, -1, "Colonne 1", 0)
SetGadgetItemAttribute(#ListIcon_0, 0, #PB_ListIcon_ColumnWidth, 65 , 0)
    
For b = 2 To 6          ; ajouter 3 colonnes supplémentaires
  AddGadgetColumn(#ListIcon_0, b, "Colonne " + Str(b), 65)
Next
For b = 0 To 20          ; ajouter 4 éléments à chaque ligne des listes avec icônes
  AddGadgetItem(#ListIcon_0, b, "Elément 1"+Chr(10)+"Elément 2"+Chr(10)+"Elément 3"+Chr(10)+"Elément 4"+Chr(10)+"Elément 5"+Chr(10)+"Elément 6"+Chr(10)+"Elément 7"+Chr(10)+"Elément 8")
Next


Repeat ; Start of the event loop
  
  Event = WaitWindowEvent(1) ; 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
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #ListIcon_0
      
      If EventType = #PB_EventType_LeftDoubleClick 
        Texte$ = InputRequester("Editer le texte de la celulle", "Veuillez entrez le nouveaux texte de la celulle", GetGadgetItemText(#ListIcon_0, Sauvegarde_case, Sauvegarde_colonne))
        If Texte$ > ""
          SetGadgetItemText(#ListIcon_0, Sauvegarde_case, Texte$, Sauvegarde_colonne)
        EndIf
      EndIf
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

Re: Listicon

Publié : mer. 23/mars/2011 13:54
par dayvid
Ah et j'ai réussi a crée sa aussi, sa renvoie sur quelle colonne se trouve la souris

Code : Tout sélectionner

; crée par monsieur dieppedalle david le lindi 21 mars 2011 vers 22 h

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_0
  #StatusBar
EndEnumeration

Global NewList LargeurColonne.s()
Global Nombre_colonne

Global WindowMouseX
Global WindowMouseY
        
Global GadgetX
Global GadgetY
        
Global GadgetHeight
Global GadgetWidth

Global Sauvegarde_LargeurColonne$

Global passage_1
Global Sauvegarde_colonne

Global passage_2

Procedure ListIcon_GetColumnCount(Gadget)  
  col.LV_COLUMN\mask = #LVCF_WIDTH  
  Repeat  
    a+1:x=SendMessage_(GadgetID(Gadget),#LVM_GETCOLUMN,a,@col)  
  Until x = 0  
  ProcedureReturn a  
EndProcedure  

Procedure GetSelectionColonne(Gadget)
  
  passage_2 + 1
  
  If passage_2 > 1000
    passage_2 = 0
    
  ClearList(LargeurColonne()) 
  Caracteristique_LargeurColonne$ = ""
  
  x = 0
  
  For Colonne = 0 To Nombre_colonne - 1
    
    AddElement(LargeurColonne())
    
    LargeurColonne() = "X = " + Str(x) + ", Largeur = " + Str(GetGadgetItemAttribute(Gadget, 0, #PB_ListIcon_ColumnWidth, Colonne))
    Caracteristique_LargeurColonne$ + LargeurColonne()
    
    x + GetGadgetItemAttribute(Gadget, 0, #PB_ListIcon_ColumnWidth, Colonne)
    
  Next
  
EndIf

EndProcedure

Procedure Element(Hauteur_colonne)
  Nombre_element = CountGadgetItems(#ListIcon_0)
  
  For x = Nombre_element To Nombre_element * 2
    Hauteur = Hauteur_colonne * Nombre_element
    If WindowMouseY < Hauteur
      Debug x
    EndIf
  Next
  
EndProcedure

Procedure GetMousePosition()
  passage_1 + 1
  
  If passage_1 > 50
    passage_1 = 0
    If WindowMouseY > GadgetY And WindowMouseY < (GadgetY + GadgetHeight) And WindowMouseX > GadgetX And WindowMouseX < (GadgetX  + GadgetWidth)
      
      Position_element = 0
      
      
      ForEach LargeurColonne()
        
        Position_element + 1
        
        Minimum$ = Mid(LargeurColonne(), 4, 4)
        RemoveString(Minimum$, ",", 0, 1)
        
        Maximum$ = Mid(LargeurColonne(), FindString(LargeurColonne(), "Largeur = ", 1) + 10)
        
        Minimum$ = RTrim(Minimum$)
        Maximum$ = RTrim(Maximum$)
        
        Minimum = Val(Minimum$)
        Maximum = Val(Maximum$)
        
        Maximum + Minimum
        
        If WindowMouseX(#Window_0) > GadgetX + Minimum + 2 And WindowMouseX(#Window_0) < GadgetX + Maximum + 2
          If Position_element <> Sauvegarde_colonne
            Sauvegarde_colonne = Position_element
            Element(15)
            StatusBarText(#StatusBar, 0, "Colonne n° " + Str(Position_element))
          EndIf
          
        EndIf
        
      Next LargeurColonne()
      
    EndIf
  EndIf
  
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 440, 281, 600, 449, "New window ( 0 )",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    CreateStatusBar(#StatusBar, WindowID(#Window_0))
    AddStatusBarField(8000)
    ListIconGadget(#ListIcon_0, 75, 55, 465, 340, "Column0", 100, #PB_ListIcon_GridLines)
    SetGadgetItemText(#ListIcon_0, -1, "Colonne 1", 0)
    SetGadgetItemAttribute(#ListIcon_0, 0, #PB_ListIcon_ColumnWidth, 65 , 0)
    
    For b = 2 To 4          ; ajouter 3 colonnes supplémentaires
      AddGadgetColumn(a, b, "Colonne " + Str(b), 65)
    Next
    For b = 0 To 5          ; ajouter 4 éléments à chaque ligne des listes avec icônes
      AddGadgetItem(a, b, "Elément 1"+Chr(10)+"Elément 2"+Chr(10)+"Elément 3"+Chr(10)+"Elément 4")
    Next
    
    SetGadgetItemState(#ListIcon_0, 1, #PB_ListIcon_Selected) 
    
    Nombre_colonne = ListIcon_GetColumnCount(#ListIcon_0)
    GetSelectionColonne(#ListIcon_0)
    
    GadgetX = GadgetX(#ListIcon_0)
    GadgetY = GadgetY(#ListIcon_0)
    
    GadgetHeight = GadgetHeight(#ListIcon_0)
    GadgetWidth = GadgetWidth(#ListIcon_0)

  EndIf
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent(1) ; 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
  
  WindowMouseX = WindowMouseX(#Window_0)
  WindowMouseY = WindowMouseY(#Window_0)
  
  GetSelectionColonne(#ListIcon_0)
  GetMousePosition()
  
  ;You can place code here, and use the result as parameters for the procedures
  
  If Event = #PB_Event_Gadget
    
    If GadgetID = #ListIcon_0
      
    EndIf
    
  EndIf
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
; 
; jaPBe Version=3.10.9.849
; FoldLines=00200026002800410043004D004F0078
; Build=0
; FirstLine=21
; CursorPosition=151
; ExecutableFormat=Windows
; DontSaveDeclare
; EOF

Re: Listicon

Publié : mer. 23/mars/2011 13:57
par dayvid
Et tans que on y est j'ai trouvé ceci aussi qui est pas mal
mais sa ne marche pas avec la verssion 4.50 de pure basic

j'ai bien essayer de modifier le truc mais j'ai pas réussi

Code : Tout sélectionner

; http://www.purebasic-lounge.de 
; Author: Hroudtwolf 
; Date: 10. November 2006 
; OS: Windows 
; Demo: No 
 
 
; ############################################### 
; # GetItemUnderCursor                          # 
; # GetColumnUnderCursor                        # 
; ############################################### 
; # 2006 By Hroudtwolf                          # 
; # Last Update: 10.11.2006                     # 
; # PB 4.01                                     # 
; ############################################### 
 
 
Declare GetItemUnderCursor   (Gadget.l) 
Declare GetColumnUnderCursor (Gadget.l , NumberOfColumns.l) 
 
 
; ############################################### 
; # Hauptprogramm                               # 
; ############################################### 
 
*Window.Long = OpenWindow(#PB_Any , #PB_Ignore , #PB_Ignore , 500 , 400 , "ListIcon Mouse-Infos", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
If *Window = #False Or CreateGadgetList(*Window\l) = #False 
   MessageBox_(0,"Ubekannter Fehler.","Fehler",#MB_OK|#MB_ICONERROR) 
   End 
EndIf    
  
CreateStatusBar (1, *Window\l) 
 
Global *List.Long = ListIconGadget(#PB_Any, 0, 0, 500, 400 - StatusBarHeight (1), "Name", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines|#PB_ListIcon_HeaderDragDrop) 
 
 
AddGadgetColumn (*List , 1 , "Strasse" , 100) 
AddGadgetColumn (*List , 2 , "PLZ"     ,  60) 
AddGadgetColumn (*List , 3 , "Ort"     , 140) 
AddGadgetColumn (*List , 4 , "Telefon" , 95) 
 
Restore Personal 
For x = 0 To 3 
   Read PersData.s 
   AddGadgetItem     (*List , x  , StringField (PersData.s , 1 , ";")) 
   SetGadgetItemText (*List , x  , StringField (PersData.s , 2 , ";") , 1) 
   SetGadgetItemText (*List , x  , StringField (PersData.s , 3 , ";") , 2) 
   SetGadgetItemText (*List , x  , StringField (PersData.s , 4 , ";") , 3) 
   SetGadgetItemText (*List , x  , StringField (PersData.s , 5 , ";") , 4) 
Next x 
 
 
 
 
Repeat 
Select WaitWindowEvent() 
    Case #PB_Event_CloseWindow 
    End 
    Case #WM_MOUSEMOVE 
    StatusBarText (1,0,"Item:  "+Str(GetItemUnderCursor   (*List))+"   Column:"+Str(GetColumnUnderCursor (*List , 5))) 
EndSelect 
 
ForEver 
 
 
Procedure GetItemUnderCursor (Gadget.l) 
  Protected HitTestInfo.LV_HITTESTINFO 
  Protected hwnd       .l              =GadgetID(Gadget.l) 
  Protected re         .rect 
  Protected pt         .POINT 
  GetWindowRect_(hwnd.l,re) 
  GetCursorPos_(pt.POINT) 
  If PtInRect_(re,pt\x,pt\y) 
    HitTestInfo\pt\x = pt\x - re\left 
    HitTestInfo\pt\y = pt\y - re\top 
    ClientToScreen_(GetActiveWindow_(), @HitTestInfo\pt) 
    ScreenToClient_(hwnd .l, @HitTestInfo\pt) 
    ProcedureReturn SendMessage_(hwnd .l, #LVM_HITTEST, 0, @HitTestInfo) 
  EndIf 
  ProcedureReturn #False 
EndProcedure 
 
 
Procedure GetColumnUnderCursor (Gadget.l , NumberOfColumns.l) 
  Protected hwnd       .l              =GadgetID(Gadget.l) 
  Protected re         .rect 
  Protected pt         .POINT 
  Protected width      .l 
  Protected prevwidth  .l 
  NumberOfColumns.l - 1 
  GetWindowRect_(hwnd.l,re) 
  GetCursorPos_(pt.POINT) 
  If PtInRect_(re,pt\x,pt\y) 
    While CurrentCol.l <= NumberOfColumns.l 
    width.l + SendMessage_(hwnd .l , #LVM_GETCOLUMNWIDTH  , CurrentCol.l , 0) 
    If pt\x - re\left > prevwidth.l And pt\x - re\left < width.l 
       ProcedureReturn CurrentCol.l + 1 
    EndIf 
    prevwidth.l = width.l 
    CurrentCol.l + 1 
    Wend 
  EndIf 
  ProcedureReturn #False 
EndProcedure 
 
DataSection 
   Personal: 
   Data.s "Olaf Maier;Rheinstrasse 3;64283;Darmstadt;06151-303071;" 
   Data.s "Herbert Schmiedt;Neue Strasse 44;64572;Gross-Gerau;06152-5478196;" 
   Data.s "Franz Bauer;Europaring 12;64319;Pfungstadt;06157-33054;" 
   Data.s "Heinz Huber;Zehntgasse 34;64285;Darmstadt;06151-22344;" 
EndDataSection 
 
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 71
; FirstLine = 57
; Folding = -

Re: Listicon

Publié : mer. 23/mars/2011 13:59
par Kwai chang caine
j'avais penser a crée un string gadget a la position de la cellule a modifier mais je ne sais pas comment je vais m'y prendre
Toujours du grand NETMAESTRO (Clic droit pour modifier)
http://www.purebasic.fr/english/viewtop ... light=grid

Ou du Grand SROD (Double clic pour modifier)
http://www.purebasic.fr/english/viewtop ... 94#p194094

Si ça peut te donner des idées :wink: