Listin Gambas2

Création d'un programme en Gambas2 : un répertoire téléphonique pas à pas

Origine : http://listingambas.blogspot.com/2011/06/modulo-filtro-buscar-y-filtrar-instr.html



Module de filtre : Filtre de recherche et  InStr

Nous commençons à utiliser notre agenda : trouvons les données qui nous intéressent ...
Pour ce faire nous allons utiliser le TextBoxRecherche où l'on va entrer les mots à chercher (jusqu'à 3) (complets ou non), séparés par des virgules. Exemple: "Sev, 954,43," por trouver tous les documents contenant le mot «Sev» comme « SEV illa »,« 951 954 953 »et« 942 485 43 ", indépendamment de l'ordre dans lequel ils apparaissent.



 PUBLIC SUB TextBoxRecherche_KeyPress ()
 IF key. Code = key.enter OR key. Code = key.Return THEN
 BoutonRecherche . SetFocus
 ENDIF



Et le code BoutonRecherche, qui est celui contenant l'appel à la procédure de recherche du module  filtre :

PUBLIC SUB BoutonRecherche_Click()
DIM c AS String
DIM resultat AS Integer
DIM patrons AS NEW String[]]
DIM numero_patrons AS Integer

  numero_patrons = 0
  patrons = Split(Upper$(TextBoxRecherche.text), ",")
  numero_patrons = patrons.Count
  IF numero_patrons = 0 THEN
    patrons.resize(3)
    patrons[0] = "*"
    patrons[1] = " "
    patrons[2] = " "
    END IF
   
  IF numero_patrons = 1 THEN
    patrons.resize(3)
    patrons[1] = " "
    patrons[2] = " "
    END IF

  IF numero_patrons = 2 THEN
    patrons.resize(3)
    patrons[2] = " "
    END IF

  IF numero_patrons > 3 THEN
    Message.Info("3 patrons de recherche maximum")
    TextBoxRecherche.SetFocus
    GOTO finfiltre
    END IF
  
  resultat = filtrer.Conceptfiltre(patrons[0], patrons[1], patrons[2])
  IF resultat = 1 THEN
    GridViewDonnees.Background = Color.cyan
  ELSE
    GridViewDonnees.Background = Color.White
    END IF

finfiltre:
END

  Comme vous le voyez, chaque fois qu'il nous est retourné le résultat = 1, gridviewDonnees change la couleur en cyan, pour montrer que l'on ne voit que  les données concordantes avec le filtre. Pour annuler ce filtre, on va créer un bouton qui efface le modèle du filtre et revient à la couleur blanche dans gridviewDonnées.

 PUBLIC SUB ToolButtonAnnulerFiltre_Click ()
 TextBoxRecherche. text = ""
 BoutonRecherche_Click
 END

Nous pouvons également utiliser la propriété "ToolTip" pour indiquer à l'utilisateur l'action effectuée par la touche (quand on a passe sur le bouton un message en jaune s'affiche)

Dans l''IDE de Gambas, nous cherchons la propriété ToolTip du bouton ToolButtonAnnulerFiltre  et y écrivons "Annuler filtre". D'autre part, dans module filtre, nous allons créer deux sous-programmes qui auront la responsabilité de trouver des concordances réelles et de remplir gridViewDonnées

Annuler filtre


PUBLIC FUNCTION ConceptFiltre(patron AS String, OPTIONAL patron1 AS String, OPTIONAL patron2 AS String) AS Integer
DIM lignes AS String
DIM a AS Integer
DIM nombre AS Integer
DIM valider AS Boolean

fmain.GridViewDonnees.Rows.count = 0

nombre = 0 'compteur de fichiers valides (non supprimés)

IF patron
= "*" OR patron = "" THEN
 'tracer toutes les données
 titre.remplir()
 
RETURN 0
ENDIF

IF
patron1 = "" THEN patron1 = " "
IF
patron2 = "" THEN patron2 = " "

FOR a = 0 TO var.id.Count - 1
lignes = ""
     
lignes &= var.id[a]
      lignes &= var.dni[a]
      lignes &= var.nom[a]]
     
lignes &= var.prenoms[a]
      lignes &= var.entreprise[a]
      lignes &= var.poste[a]
      lignes &= var.tel_entreprise[a]
      lignes &= var.tel_perso[a]
      lignes &= var.fax[a]
      lignes &= var.mobile_entreprise[a]
      lignes &= var.mobile_perso[a]
      lignes &= var.page[a]
      lignes &= var.photo[a]
      lignes &= var.adresse[a]
      lignes &= var.commentaires[a]
      lignes &= var.date_donnees[a]
      lignes &=var.mail[a]
lignes = Upper$(lignes)
valider = estdans(l
lignes, patron) AND estdans(lignes, patron21) AND estdans(lignes, patron2)
 
 IF valider THEN
 nombre += 1
 FMain.GridViewDonnees.Rows.COUNT = nombre

 WITH FMain
 IF FMain.CheckBoxmini.Value = FALSE THEN
  .GridViewDonnees.Rows.height = 25
  .GridViewDonnees[
numero - 1, 0].Picture = Picture[var.photo[a]]
 
ELSE
 .GridViewDonnees[nombre - 1, 0].Alignment = 1
 .GridViewDonnees.Rows.height = 100
 .GridViewDonnees
[nombre - 1, 0].Picture = Picture[miniatures.faire(var.photo[a], "96x96")]
 ENDIF
        

 .GridViewDonnees[nombre - 1, 0].Picture = Picture[var.photo[a]]
 .GridViewDonnees[nombre - 1, 1].text = var.nom[a]
 .GridViewDonnees[nombre - 1, 2].text = var.prénoms[a]
 .GridViewDonnees[nombre - 1, 3].text = var.dni[a]
 .GridViewDonnees[nombre - 1, 4].text = var.entreprise[a]
 .GridViewDonnees[nombre - 1, 5].text = var.poste[a]
 .GridViewDonnees[nombre - 1, 6].text = var.tel_entreprise[a]
 .GridViewDonnees[nombre - 1, 7].text = var.mobilel_entreprise[a]
 .GridViewDonnees[nombre - 1, 8].text = var.tel_perso[a]
 .GridViewDonnees[nombre - 1, 9].text = var.mobile_perso[a]
 .GridViewDonnees[nombre - 1, 10].text = var.fax[a]
 .GridViewDonnees[nombre - 1, 11].text = var.mail[a]
 .GridViewDonnees[nombre - 1, 12].text = var.page[a]
 .GridViewDonnees[nombre - 1, 13].text = var.adresse[a]
 .GridViewDonnees[nombre - 1, 14].text = var.commentaires[a]
 .GridViewDonnees[nombre - 1, 15].text = var.date_donnees[a]
 .GridViewDonnees[nombre - 1, 16].text = var.id[a]
 END WITH
 ENDIF
 Finnext:
 NEXT
 IF numero > 0 THEN
 ' ON A TROUVE UN DOUBLON
 RETURN 1
 ELSE
 RETURN 0
 ENDIF
 END


 '-----------------------------------------------------
 ' fonction estdans
 '-----------------------------------------------------
 SUB  estdans(phrase AS String, patron AS String) AS Boolean
 IF patron = " " THEN
 RETURN 1
 ELSE
 RETURN InStr(phrase, patron)
 ENDIF
 END

La fonction  estdans(), grâce à l'instruction InSr renvoie si la phrase contient le patron (true ou false)