[Résolu] Problème avec LVFINDINFO residente?

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

[Résolu] Problème avec LVFINDINFO residente?

Message par kernadec »

Bonsoir ya un truc avec PB531 :?
j 'ai souci avec la structure LVFINDINFO
voici celle de nico

Code : Tout sélectionner

Structure LVFINDINFO 
	flags.l 
	psz.s 
	lParam.l 
	pt.POINT 
	vkDirection.l 
EndStructure

elle fonctionne pour moi avec PB5.00
je passe en PB5.31 et ping,
PB531 me dit Structure existante, très bien, Alors je la commente;;;
maintenant, il ne veut plus de mes caractères pour la variable psz

il dit que la variable psz attend une valeur numérique

je suis allé sur le site Mdsn pour voir où est l'erreur et la structure de nico est identique a celle du site
que se passe t'il avec PB5.31???
quelqu'un est il au courant de ce changement...

" MDSN LVFINDINFO "

Code : Tout sélectionner

  typedef struct tagLVFINDINFO {
  UINT    flags;
  LPCTSTR psz;
  LPARAM  lParam;
  POINT   pt;
  UINT    vkDirection;
  } LVFINDINFO, *LPFINDINFO;
  
Voici un code de nico avec le problème LVFINDINFO commentée?

Code : Tout sélectionner

; Exemple de recherche d'élément dans une ListIconGadget
; La recherche s'effectue soit à partir de l'index 0
; soit à partir de la sélection
; soit à partir du String Gadget
; A noter: La recherche est sensible à la casse  
; By Nico

Procedure Recherche(handle.l, ValeurRecherche.s, depart.l)
  find.LVFINDINFO
  find\flags=#LVFI_PARTIAL
  find\psz= ValeurRecherche
  index.l=SendMessage_(handle, #LVM_FINDITEM, depart, find)
  SetGadgetItemState(4, index, 1)
  NbItem = CountGadgetItems(4)
  ;Message pour récupérer la hauteur d'un item
  SendMessage_(handle, #LVM_GETITEMRECT, 0, @prc.RECT)
  ;Message pour scroller tout au début (item*hauteur)
  SendMessage_(handle, #LVM_SCROLL, 0, -NbItem*(prc\bottom-prc\top))
  ;Message pour scroller sur l'élément recherché
  SendMessage_(handle, #LVM_SCROLL, 0, index*(prc\bottom-prc\top))
  ProcedureReturn index    
EndProcedure

If OpenWindow(0,100,200,380,200,"Recherche ListIcon Example",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  If CreateGadgetList(WindowID(0)) 
    StringGadget(0,  10, 10, 360, 20, "Entrez un ou plusieurs caractères pour la  recherche sur la colonne Valeur", #PB_String_ReadOnly|#PB_String_BorderLess)
    ButtonGadget(1, 210, 50, 140, 20, "Rechercher depuis le début")
    ButtonGadget(2, 210, 30, 140, 20, "Suivant")
    StringGadget(3,  20, 40, 150, 20, "")
    hlist.l=ListIconGadget(4,20,80,330,100,"Valeur",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 
    AddGadgetColumn(4,1,"Donnée",178)
    
    For x= 0 To 120 
      AddGadgetItem(4,-1,Str(x)+Chr(10)+"Donnée "+Str(x))
    Next x
    
    For x= 0 To 120 
      AddGadgetItem(4,-1,Str(x)+Chr(10)+Str(x))
    Next x
    
    Repeat 
      EventID = WaitWindowEvent()
      Select EventID
        Case  #PB_Event_Gadget
          Select EventGadget()
            Case 1  ;rechercher depuis le début
              Texte$ = GetGadgetText(3) 
              ElementTrouve.l= Recherche(hlist, Texte$, -1)
              
            Case 2  ;suivant
              Texte$ = GetGadgetText(3) 
              ElementTrouve= Recherche(hlist, Texte$, ElementTrouve)
              If ElementTrouve < 0
                MessageRequester("Info", "Valeur non trouvée")
              EndIf
              
            Case 3 ;rechercher depuis le String Gadget
              Texte$ = GetGadgetText(3)
              If EventType() <> #PB_EventType_Focus 
                If selection=#False
                  ElementTrouve= Recherche(hlist, Texte$, -1)
                EndIf 
              EndIf
              selection=#False
              
            Case 4  ;retrouve l'index courant pour continuer la recherche 
                    ;à partir de l'élément sélectionné
              If EventType() = #PB_EventType_LeftClick
                #LVM_GETHOTITEM= $1000+61
                ElementTrouve=SendMessage_(hlist, #LVM_GETHOTITEM, 0, 0)
                Texte$ = GetGadgetText(4)
                SetGadgetText(3, Texte$)
                selection=#True
              EndIf
              
          EndSelect
      EndSelect
    Until EventID = #PB_Event_CloseWindow
  EndIf 
EndIf  
Cordialement
Dernière modification par kernadec le lun. 27/oct./2014 20:23, modifié 2 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Problème avec LVFINDINFO residente?

Message par nico »

Il faut mettre un @ devant:

Code : Tout sélectionner

Procedure Recherche(handle.l, ValeurRecherche.s, depart.l)
   find.LVFINDINFO
   find\flags=#LVFI_PARTIAL
   find\psz= @ValeurRecherche
   index.l=SendMessage_(handle, #LVM_FINDITEM, depart, find)
   SetGadgetItemState(4, index, 1)
   NbItem = CountGadgetItems(4)
   ;Message pour récupérer la hauteur d'un item
   SendMessage_(handle, #LVM_GETITEMRECT, 0, @prc.RECT)
   ;Message pour scroller tout au début (item*hauteur)
   SendMessage_(handle, #LVM_SCROLL, 0, -NbItem*(prc\bottom-prc\top))
   ;Message pour scroller sur l'élément recherché
   SendMessage_(handle, #LVM_SCROLL, 0, index*(prc\bottom-prc\top))
   ProcedureReturn index    
EndProcedure

If OpenWindow(0,100,200,380,200,"Recherche ListIcon Example",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
   If CreateGadgetList(WindowID(0)) 
      StringGadget(0,  10, 10, 360, 20, "Entrez un ou plusieurs caractères pour la  recherche sur la colonne Valeur", #PB_String_ReadOnly|#PB_String_BorderLess)
      ButtonGadget(1, 210, 50, 140, 20, "Rechercher depuis le début")
      ButtonGadget(2, 210, 30, 140, 20, "Suivant")
      StringGadget(3,  20, 40, 150, 20, "")
      hlist.l=ListIconGadget(4,20,80,330,100,"Valeur",100,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 
      AddGadgetColumn(4,1,"Donnée",178)
      
      For x= 0 To 120 
         AddGadgetItem(4,-1,Str(x)+Chr(10)+"Donnée "+Str(x))
      Next x
      
      For x= 0 To 120 
         AddGadgetItem(4,-1,Str(x)+Chr(10)+Str(x))
      Next x
      
      Repeat 
         EventID = WaitWindowEvent()
         Select EventID
            Case  #PB_Event_Gadget
               Select EventGadget()
                  Case 1  ;rechercher depuis le début
                     Texte$ = GetGadgetText(3) 
                     ElementTrouve.l= Recherche(hlist, Texte$, -1)
                     
                  Case 2  ;suivant
                     Texte$ = GetGadgetText(3) 
                     ElementTrouve= Recherche(hlist, Texte$, ElementTrouve)
                     If ElementTrouve < 0
                        MessageRequester("Info", "Valeur non trouvée")
                     EndIf
                     
                  Case 3 ;rechercher depuis le String Gadget
                     Texte$ = GetGadgetText(3)
                     If EventType() <> #PB_EventType_Focus 
                        If selection=#False
                           ElementTrouve= Recherche(hlist, Texte$, -1)
                        EndIf 
                     EndIf
                     selection=#False
                        
                  Case 4  ;retrouve l'index courant pour continuer la recherche 
                     ;à partir de l'élément sélectionné
                        If EventType() = #PB_EventType_LeftClick
                        #LVM_GETHOTITEM= $1000+61
                        ElementTrouve=SendMessage_(hlist, #LVM_GETHOTITEM, 0, 0)
                        Texte$ = GetGadgetText(4)
                        SetGadgetText(3, Texte$)
                        selection=#True
                     EndIf
                     
               EndSelect
         EndSelect
      Until EventID = #PB_Event_CloseWindow
   EndIf 
EndIf 
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Problème avec LVFINDINFO residente?

Message par kernadec »

bonsoir nico
Merci, je n'avais pas suivi ce changement dans PB 8O

Cordialement
Répondre